From f9e7a2fc926d7ca9e02fc9ec0896b51f0ed988b7 Mon Sep 17 00:00:00 2001 From: nin0dev Date: Thu, 8 Aug 2024 14:05:30 -0400 Subject: [PATCH] added bad ui --- index.tsx | 90 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 77 insertions(+), 13 deletions(-) diff --git a/index.tsx b/index.tsx index 9acde93..154981e 100644 --- a/index.tsx +++ b/index.tsx @@ -1,8 +1,11 @@ + + import { DataStore } from "@api/index"; +import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; -import definePlugin from "@utils/types"; +import definePlugin, { OptionType } from "@utils/types"; import { cache } from "@webpack"; -import { Constants, MessageStore, RestAPI, UserStore } from "@webpack/common"; +import { Constants, Forms, MessageStore, Parser, RestAPI, useEffect, UserStore, useState } from "@webpack/common"; import { Message } from "discord-types/general"; const DATA_STORE_KEY = "huskchart"; @@ -11,6 +14,10 @@ type Husk = { channelId: string; messageId: string; }; +type SortedHusk = { + id: string; + count: number; +}; const messageCache = new Map { + // powered by generative ai, idk react :trolley: + const [data, setData] = useState([]); + + useEffect(() => { + const fetchData = async () => { + const rawHusks: Husk[] = await DataStore.get(DATA_STORE_KEY) || []; + const unsortedHuskCountPerUser: SortedHusk[] = []; + for (const husk of rawHusks) { + let shouldAddInitialHusk = true; + for (const [i, hc] of unsortedHuskCountPerUser.entries()) { + const unsortedHusker: SortedHusk = hc; + if (unsortedHusker.id == husk.userId) { + unsortedHuskCountPerUser[i].count++; + shouldAddInitialHusk = false; + } + } + if (!shouldAddInitialHusk) continue; + unsortedHuskCountPerUser.push({ id: husk.userId, count: 1 }); + } + const sortedHuskers = unsortedHuskCountPerUser.sort((a, b) => b.count - a.count); + // @ts-ignore EXPLODEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE + setData(sortedHuskers); + }; + fetchData(); + }, []); + + return ( + <> + { + data && data.map(user => <> +
+ {/* @ts-ignore */} + {Parser.parse(`<@${user.id}>`)} with {user.count} husks +
+ ) + } + + ); +}; export default definePlugin({ name: "HuskChart", description: "See how much you've been husked, and by who", authors: [Devs.nin0dev], flux: { async MESSAGE_REACTION_ADD(event) { - const msg = await getMessage(event.channelId, event.messageId); - if (msg!.author.id !== UserStore.getCurrentUser().id) return; - if (!event.emoji.name.includes("husk")) return; - let husks: Husk[] = await DataStore.get(DATA_STORE_KEY) || []; - husks.push({ - userId: event.userId, - channelId: event.channelId, - messageId: event.messageId - }); - DataStore.set(DATA_STORE_KEY, husks); + try { + const msg = await getMessage(event.channelId, event.messageId); + if (msg!.author.id !== UserStore.getCurrentUser().id) return; + if (!event.emoji.name.includes("husk")) return; + let husks: Husk[] = await DataStore.get(DATA_STORE_KEY) || []; + husks.push({ + userId: event.userId, + channelId: event.channelId, + messageId: event.messageId + }); + DataStore.set(DATA_STORE_KEY, husks); + } + catch { + // explode + } } - } + }, + settings: definePluginSettings({ + buttons: { + type: OptionType.COMPONENT, + description: "User stats", + component: (aaa) => ( + <> + User stats + + + ) + } + }) });