guess who forgot to add files
diff --git a/src/commands/categorisationTest.ts b/src/commands/categorisationTest.ts
new file mode 100644
index 0000000..2852a2b
--- /dev/null
+++ b/src/commands/categorisationTest.ts
@@ -0,0 +1,75 @@
+import { CommandInteraction, MessageActionRow, MessageButton, MessageSelectMenu } from "discord.js";
+import { SelectMenuComponent, SelectMenuOption, SlashCommandBuilder } from "@discordjs/builders";
+import { WrappedCheck } from "jshaiku";
+import generateEmojiEmbed from "../utils/generateEmojiEmbed.js";
+import generateKeyValueList, { toCapitals } from "../utils/generateKeyValueList.js";
+import getEmojiByName from "../utils/getEmojiByName.js";
+
+const command = new SlashCommandBuilder()
+ .setName("categorise")
+ .setDescription("Categorises your servers channels")
+
+const callback = async (interaction: CommandInteraction) => {
+ // @ts-ignore
+ const { renderChannel } = interaction.client.logger
+
+ let channels = interaction.guild.channels.cache.filter(c => c.type !== "GUILD_CATEGORY");
+ let categorised = {}
+
+ await interaction.reply({embeds: [new generateEmojiEmbed()
+ .setTitle("Loading...")
+ .setEmoji("NUCLEUS.LOADING")
+ .setStatus("Success")
+ ], ephemeral: true});
+ for (let c of channels.values()) {
+ let predicted = []
+ let types = {
+ general: ["general"],
+ commands: ["bot", "command", "music"],
+ images: ["pic", "selfies", "image"],
+ nsfw: ["porn", "nsfw", "sex"],
+ links: ["links"],
+ advertising: ["ads", "advert", "server", "partner"],
+ staff: ["staff", "mod", "admin"]
+ }
+
+ for (let type in types) {
+ for (let word of types[type]) {
+ if (c.name.toLowerCase().includes(word)) {
+ predicted.push(type)
+ }
+ }
+ }
+
+ await interaction.editReply({embeds: [new generateEmojiEmbed()
+ .setTitle("Categorise")
+ .setDescription(generateKeyValueList({
+ channel: renderChannel(c),
+ category: c.parent ? c.parent.name : "Uncategorised"
+ }) + "\n\n" + `Suggested tags: ${predicted.join(", ")}`)
+ .setEmoji("CHANNEL.TEXT.CREATE")
+ .setStatus("Success")
+ ], components: [ new MessageActionRow().addComponents([
+ new MessageButton()
+ .setLabel("Use suggested")
+ .setStyle("PRIMARY")
+ .setCustomId("accept")
+ .setEmoji(getEmojiByName("CONTROL.RIGHT", "id"))
+ ]), new MessageActionRow().addComponents([new MessageSelectMenu()
+ .setPlaceholder("Select a category")
+ .setCustomId("category")
+ .setMinValues(0)
+ .setMaxValues(1)
+ // .setMaxValues(Object.keys(types).length)
+ .setOptions(Object.keys(types).map(type => {return {label: toCapitals(type), value: type}}))
+ ])]});
+ }
+}
+
+const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
+ return true;
+}
+
+export { command };
+export { callback };
+export { check };
\ No newline at end of file