import { DataStore } from "@api/index"; import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; import { cache } from "@webpack"; import { Constants, MessageStore, RestAPI, UserStore } from "@webpack/common"; import { Message } from "discord-types/general"; const DATA_STORE_KEY = "huskchart"; type Husk = { userId: string; channelId: string; messageId: string; }; const messageCache = new Map(); async function getMessage(channelId: string, messageId: string): Promise { const cached = messageCache.get(messageId); if (cached) return cached?.message; const storeMessage = MessageStore.getMessage(channelId, messageId); if (storeMessage) { messageCache.set(storeMessage.id, { message: storeMessage, fetched: false }); return storeMessage; } const apiMessage = await RestAPI.get({ url: Constants.Endpoints.MESSAGES(channelId), query: { limit: 1, around: messageId }, retries: 2 }).catch(() => null); if (apiMessage) { messageCache.set(apiMessage.body[0].id, { message: apiMessage, fetched: true }); return apiMessage.body[0]; } } 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); } } });