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,
+ })}
+ />
+
+