diff --git a/plugins/Commands/settings.tsx b/plugins/Commands/settings.tsx index 065839b..cd640f6 100644 --- a/plugins/Commands/settings.tsx +++ b/plugins/Commands/settings.tsx @@ -209,10 +209,166 @@ function Header({ onHiddenUnlock }: { onHiddenUnlock?: () => void }) { ); } +// NekosLife Categories Reference Page +function NekosLifeCategoriesPage() { + const styles = stylesheet.createThemedStyleSheet({ + container: { + flex: 1, + backgroundColor: semanticColors.BACKGROUND_PRIMARY, + }, + categoryItem: { + flexDirection: "row", + alignItems: "center", + paddingVertical: 12, + paddingHorizontal: 16, + borderBottomWidth: 1, + borderBottomColor: semanticColors.BORDER_FAINT, + }, + categoryName: { + fontSize: 16, + fontWeight: "500", + color: semanticColors.TEXT_NORMAL, + flex: 1, + }, + categoryValue: { + fontSize: 14, + color: semanticColors.TEXT_MUTED, + fontFamily: "monospace", + marginRight: 8, + }, + nsfwBadge: { + backgroundColor: semanticColors.STATUS_DANGER, + paddingHorizontal: 8, + paddingVertical: 4, + borderRadius: 12, + }, + sfwBadge: { + backgroundColor: semanticColors.STATUS_POSITIVE, + paddingHorizontal: 8, + paddingVertical: 4, + borderRadius: 12, + }, + badgeText: { + fontSize: 12, + fontWeight: "600", + color: semanticColors.WHITE, + }, + infoText: { + fontSize: 14, + color: semanticColors.TEXT_MUTED, + textAlign: "center", + lineHeight: 20, + }, + }); + + // All nekos.life categories with their API values and NSFW status + const allCategories = [ + { name: "Anal", value: "anal", nsfw: true }, + { name: "Avatar", value: "avatar", nsfw: false }, + { name: "Boobs", value: "boobs", nsfw: true }, + { name: "Blowjob Image", value: "blowjob", nsfw: true }, + { name: "Blowjob GIF", value: "bj", nsfw: true }, + { name: "Classic", value: "classic", nsfw: false }, + { name: "Cuddle", value: "cuddle", nsfw: false }, + { name: "Cum", value: "cum", nsfw: true }, + { name: "Cum JPG", value: "cum_jpg", nsfw: true }, + { name: "Ero", value: "ero", nsfw: true }, + { name: "Ero Feet", value: "erofeet", nsfw: true }, + { name: "Ero Kemo", value: "erokemo", nsfw: true }, + { name: "Ero Kitsune", value: "erok", nsfw: true }, + { name: "Ero Neko", value: "eron", nsfw: true }, + { name: "Ero Yuri", value: "eroyuri", nsfw: true }, + { name: "Femdom", value: "femdom", nsfw: true }, + { name: "Feet", value: "feet", nsfw: true }, + { name: "Feet GIF", value: "feetg", nsfw: true }, + { name: "Fox Girl", value: "fox_girl", nsfw: false }, + { name: "Futanari", value: "futanari", nsfw: true }, + { name: "Gasm", value: "gasm", nsfw: true }, + { name: "Gecg", value: "gecg", nsfw: false }, + { name: "Kemonomimi", value: "kemonomimi", nsfw: false }, + { name: "Kiss", value: "kiss", nsfw: false }, + { name: "Kuni", value: "kuni", nsfw: true }, + { name: "Hentai", value: "hentai", nsfw: true }, + { name: "Holo", value: "holo", nsfw: false }, + { name: "Holo Ero", value: "holoero", nsfw: true }, + { name: "Holo Lewd", value: "hololewd", nsfw: true }, + { name: "Lesbian", value: "les", nsfw: true }, + { name: "Lewd", value: "lewd", nsfw: true }, + { name: "Lewd Kemo", value: "lewdkemo", nsfw: true }, + { name: "Lewd Kitsune", value: "lewdk", nsfw: true }, + { name: "Neko", value: "neko", nsfw: false }, + { name: "Neko GIF", value: "ngif", nsfw: false }, + { name: "NSFW Neko GIF", value: "nsfw_neko_gif", nsfw: true }, + { name: "NSFW Avatar", value: "nsfw_avatar", nsfw: true }, + { name: "Pussy", value: "pussy", nsfw: true }, + { name: "Pussy JPG", value: "pussy_jpg", nsfw: true }, + { name: "Pwank", value: "pwankg", nsfw: true }, + { name: "Random Hentai GIF", value: "Random_hentai_gif", nsfw: true }, + { name: "Small Boobs", value: "smallboobs", nsfw: true }, + { name: "Smug", value: "smug", nsfw: false }, + { name: "Solo", value: "solo", nsfw: true }, + { name: "Solo GIF", value: "solog", nsfw: true }, + { name: "Spank", value: "spank", nsfw: false }, + { name: "Tits", value: "tits", nsfw: true }, + { name: "Tickle", value: "tickle", nsfw: false }, + { name: "Trap", value: "trap", nsfw: true }, + { name: "Waifu", value: "waifu", nsfw: false }, + { name: "Wallpaper", value: "wallpaper", nsfw: false }, + { name: "Woof", value: "woof", nsfw: false }, + { name: "Yuri", value: "yuri", nsfw: true } + ]; + + // Sort categories: SFW first, then NSFW, then alphabetically within each group + const sortedCategories = allCategories.sort((a, b) => { + if (a.nsfw !== b.nsfw) { + return a.nsfw ? 1 : -1; // SFW first + } + return a.name.localeCompare(b.name); + }); + + const sfwCount = allCategories.filter(cat => !cat.nsfw).length; + const nsfwCount = allCategories.filter(cat => cat.nsfw).length; + + return ( + + + + + Total Categories: {allCategories.length}{'\n'} + SFW Categories: {sfwCount}{'\n'} + NSFW Categories: {nsfwCount}{'\n\n'} + Use these category names with the /nekoslife command. + Green = SFW, Red = NSFW + + + + + {sortedCategories.map((category, index) => ( + + + {category.name} + + + {category.value} + + + + {category.nsfw ? "NSFW" : "SFW"} + + + + ))} + + + + ); +} + // Hidden Commands Settings Page with NSFW bypass option and NekosLife function HiddenSettingsPage() { useProxy(storage); const [, forceUpdate] = React.useReducer((x) => x + 1, 0); + const navigation = NavigationNative.useNavigation(); const styles = stylesheet.createThemedStyleSheet({ container: { @@ -272,6 +428,19 @@ function HiddenSettingsPage() { /> + + } + trailing={} + onPress={() => navigation.push("VendettaCustomPage", { + title: "NekosLife Categories", + render: NekosLifeCategoriesPage, + })} + /> + +