From 04af684e13ec2b70cc448857600f04995a7a8f7b Mon Sep 17 00:00:00 2001 From: ION606 Date: Tue, 18 Apr 2023 16:50:15 -0400 Subject: [PATCH] Added the ability to add/remove slash commands --- package-lock.json | 126 ++---------------- package.json | 3 +- structures/client/client.js | 10 +- structures/interactions/InteractionManager.js | 46 +++++++ .../interactions/interactionOptionRaw.js | 12 ++ tests/interactionTests.js | 7 + tests/test.js | 1 + 7 files changed, 84 insertions(+), 121 deletions(-) create mode 100644 structures/interactions/InteractionManager.js create mode 100644 structures/interactions/interactionOptionRaw.js diff --git a/package-lock.json b/package-lock.json index cf74de7..4417a92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,15 @@ { - "name": "custom_discordjs", + "name": "iondiscordjs", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "custom_discordjs", + "name": "iondiscordjs", "version": "1.0.0", "license": "ISC", "dependencies": { "axios": "^1.3.4", - "websocket": "^1.0.34", "ws": "^8.13.0" }, "devDependencies": { @@ -43,6 +42,8 @@ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", "hasInstallScript": true, + "optional": true, + "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -61,23 +62,6 @@ "node": ">= 0.8" } }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -86,52 +70,6 @@ "node": ">=0.4.0" } }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -164,11 +102,6 @@ "node": ">= 6" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -188,20 +121,12 @@ "node": ">= 0.6" } }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, "node_modules/node-gyp-build": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "optional": true, + "peer": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -213,24 +138,13 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/utf-8-validate": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, + "optional": true, + "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -238,22 +152,6 @@ "node": ">=6.14.2" } }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", @@ -273,14 +171,6 @@ "optional": true } } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } } } } diff --git a/package.json b/package.json index 2c3d9b1..070240e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "custom_discordjs", + "name": "iondiscordjs", "version": "1.0.0", "description": "because discord.js is annoying", "main": "tests\\test.js", @@ -21,7 +21,6 @@ }, "dependencies": { "axios": "^1.3.4", - "websocket": "^1.0.34", "ws": "^8.13.0" }, "type": "module" diff --git a/structures/client/client.js b/structures/client/client.js index 02425ca..ec4b717 100644 --- a/structures/client/client.js +++ b/structures/client/client.js @@ -9,6 +9,8 @@ import { exit } from 'process'; import Guild from '../guilds/Guild.js'; import user from '../messages/User.js'; import { Thread } from '../guilds/ThreadManager.js'; +import { InteractionManager } from '../interactions/InteractionManager.js'; +import { Interaction } from '../interactions/interaction.js'; @@ -43,6 +45,9 @@ export class Client extends EventEmitter { /** @type {import('axios').AxiosInstance} */ axiosCustom; + /** @type {InteractionManager} */ + commands; + /** * @param {opts} input */ @@ -77,10 +82,13 @@ export class Client extends EventEmitter { this.emit("messageRecieved", msg); } - ready(response) { + async ready(response) { this.user_profile = response.profile; this.user_settings = response.config; this.id = response.profile.id; + + const commandsRaw = (await this.axiosCustom.get(`applications/${this.id}/commands`)).data; + this.commands = new InteractionManager(commandsRaw, this); this.emit('ready'); } diff --git a/structures/interactions/InteractionManager.js b/structures/interactions/InteractionManager.js new file mode 100644 index 0000000..72f1f16 --- /dev/null +++ b/structures/interactions/InteractionManager.js @@ -0,0 +1,46 @@ +import { DataManager } from "../DataManager.js"; +import { Interaction } from "./interaction.js"; +import {interactionOptionRaw} from "./interactionOptionRaw.js"; + +export class InteractionManager extends DataManager { + /** @type {Map} */ + #commands; + + /** + * @param {String} name + */ + async delete(name) { + if (!this.#commands.has(name)) return; + const int = this.#commands.get(name); + + await this.client.axiosCustom.delete(`/applications/${this.client.id}/commands/${int.id}`); + this.#commands.delete(name); + + return int; + } + + /** + * @param {{name: string, description: string, options: [interactionOptionRaw], type: number, dm_permission: false}} int + */ + async set(int) { + const response = await this.client.axiosCustom.post(`/applications/${this.client.id}/commands`, int); + this.#commands.set(int.name, response); + return true; + } + + /** + * @description returns a map of + */ + list() { + return new Map(this.#commands); + } + + constructor(data, client) { + super(client); + this.#commands = new Map(); + + for (const commandRaw of data) { + this.#commands.set(commandRaw.name, commandRaw); + } + } +} \ No newline at end of file diff --git a/structures/interactions/interactionOptionRaw.js b/structures/interactions/interactionOptionRaw.js new file mode 100644 index 0000000..b5df83e --- /dev/null +++ b/structures/interactions/interactionOptionRaw.js @@ -0,0 +1,12 @@ +export const interactionOptionRaw = { + type: 0, + name: "", + description: "", + id: "", + required: false, + min_value: 0, + max_value: 0, + max_length: 0, + choices: [], + options: [] +}; \ No newline at end of file diff --git a/tests/interactionTests.js b/tests/interactionTests.js index 365331f..cbd0f24 100644 --- a/tests/interactionTests.js +++ b/tests/interactionTests.js @@ -13,6 +13,13 @@ export default async (interaction) => { const response = await interaction.followUp("followup!"); await delay(2000); response.delete(); + + // interaction.client.commands.set({ + // name: 'none', + // description: 'eheheheheh' + // }); + // const delResp = await interaction.client.commands.delete('none'); + // console.log(delResp); } else { console.log(interaction); } diff --git a/tests/test.js b/tests/test.js index 1626a2b..f8bc2bb 100644 --- a/tests/test.js +++ b/tests/test.js @@ -49,4 +49,5 @@ c.on('guildCreate', async (guild) => { c.on('ready', () => { console.log("BOT ONLINE!"); + console.log(c.commands); }); \ No newline at end of file