nyaboom
This commit is contained in:
parent
57137cb0a2
commit
c752332e47
1 changed files with 171 additions and 0 deletions
|
|
@ -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 (
|
||||
<ScrollView style={styles.container}>
|
||||
<RN.View style={{ paddingVertical: 16 }}>
|
||||
<BetterTableRowGroup title="📊 Category Statistics" icon={getAssetIDByName("ChartIcon")} padding={true}>
|
||||
<RN.Text style={styles.infoText}>
|
||||
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
|
||||
</RN.Text>
|
||||
</BetterTableRowGroup>
|
||||
|
||||
<BetterTableRowGroup title="📋 All Categories" icon={getAssetIDByName("ListViewIcon")}>
|
||||
{sortedCategories.map((category, index) => (
|
||||
<RN.View key={index} style={styles.categoryItem}>
|
||||
<RN.Text style={styles.categoryName}>
|
||||
{category.name}
|
||||
</RN.Text>
|
||||
<RN.Text style={styles.categoryValue}>
|
||||
{category.value}
|
||||
</RN.Text>
|
||||
<RN.View style={category.nsfw ? styles.nsfwBadge : styles.sfwBadge}>
|
||||
<RN.Text style={styles.badgeText}>
|
||||
{category.nsfw ? "NSFW" : "SFW"}
|
||||
</RN.Text>
|
||||
</RN.View>
|
||||
</RN.View>
|
||||
))}
|
||||
</BetterTableRowGroup>
|
||||
</RN.View>
|
||||
</ScrollView>
|
||||
);
|
||||
}
|
||||
|
||||
// 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() {
|
|||
/>
|
||||
</BetterTableRowGroup>
|
||||
|
||||
<BetterTableRowGroup title="NekosLife Reference" icon={getAssetIDByName("BookOpenIcon")}>
|
||||
<FormRow
|
||||
label="View All Categories"
|
||||
subLabel="See all 52 available nekos.life categories with SFW/NSFW status"
|
||||
leading={<FormRow.Icon source={getAssetIDByName("ListViewIcon")} />}
|
||||
trailing={<FormRow.Arrow />}
|
||||
onPress={() => navigation.push("VendettaCustomPage", {
|
||||
title: "NekosLife Categories",
|
||||
render: NekosLifeCategoriesPage,
|
||||
})}
|
||||
/>
|
||||
</BetterTableRowGroup>
|
||||
|
||||
<BetterTableRowGroup title="NSFW Bypass Options" icon={getAssetIDByName("WarningIcon")}>
|
||||
<FormSwitchRow
|
||||
label="KonoChan NSFW Bypass"
|
||||
|
|
@ -339,6 +508,8 @@ function HiddenSettingsPage() {
|
|||
);
|
||||
}
|
||||
|
||||
// ... [Keep all other existing functions: FactsSettingsPage, GaryAPIPage, ListSettingsPage, ImageSettingsPage, SpotifySettingsPage, OtherSettingsPage unchanged] ...
|
||||
|
||||
// Facts Commands Settings Page
|
||||
function FactsSettingsPage() {
|
||||
useProxy(storage);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue