aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFederico fuji97 Rapetti <[email protected]>2021-12-26 04:45:50 +0100
committerFederico fuji97 Rapetti <[email protected]>2021-12-26 04:45:50 +0100
commit827ff350ee5df918bc4ecb2e19b64eccc94a46c7 (patch)
treea8356fcb35a4f6416d2dc8682608563e9d1fc35d /src
parentc20e3b1760c0ec7d2422072930e0a13236032928 (diff)
downloadmuse-827ff350ee5df918bc4ecb2e19b64eccc94a46c7.tar.xz
muse-827ff350ee5df918bc4ecb2e19b64eccc94a46c7.zip
Improve commands registration
Diffstat (limited to 'src')
-rw-r--r--src/bot.ts25
-rw-r--r--src/events/guild-create.ts19
-rw-r--r--src/index.ts2
3 files changed, 33 insertions, 13 deletions
diff --git a/src/bot.ts b/src/bot.ts
index b9c31a7..fd606cf 100644
--- a/src/bot.ts
+++ b/src/bot.ts
@@ -109,10 +109,22 @@ export default class {
const spinner = ora('📡 connecting to Discord...').start();
- this.client.once('ready', () => {
+ this.client.once('ready', async () => {
debug(generateDependencyReport());
- spinner.succeed(`Ready! Invite the bot with https://discordapp.com/oauth2/authorize?client_id=${this.client.user?.id ?? ''}&scope=bot&permissions=2184236096`);
+ spinner.text = '📡 Updating commands in all guilds...';
+
+ // Update commands
+ const rest = new REST({version: '9'}).setToken(this.token);
+
+ this.client.guilds.cache.each(async guild => {
+ await rest.put(
+ Routes.applicationGuildCommands(this.client.user!.id, guild.id),
+ {body: this.commandsByName.map(command => command.slashCommand ? command.slashCommand.toJSON() : null)},
+ );
+ });
+
+ spinner.succeed(`Ready! Invite the bot with https://discordapp.com/oauth2/authorize?client_id=${this.client.user?.id ?? ''}&scope=applications.commands%20bot&permissions=2184236096`);
});
this.client.on('error', console.error);
@@ -121,15 +133,6 @@ export default class {
this.client.on('guildCreate', handleGuildCreate);
this.client.on('voiceStateUpdate', handleVoiceStateUpdate);
- // Update commands
await this.client.login(this.token);
-
- const rest = new REST({version: '9'}).setToken(this.token);
-
- await rest.put(
- Routes.applicationGuildCommands(this.client.user!.id, this.client.guilds.cache.first()!.id),
- // TODO: remove
- {body: this.commandsByName.map(command => command.slashCommand ? command.slashCommand.toJSON() : null)},
- );
}
}
diff --git a/src/events/guild-create.ts b/src/events/guild-create.ts
index 01f0910..38f6e6c 100644
--- a/src/events/guild-create.ts
+++ b/src/events/guild-create.ts
@@ -1,14 +1,31 @@
-import {Guild, TextChannel, Message, MessageReaction, User} from 'discord.js';
+import {
+ Guild,
+ TextChannel,
+ Message,
+ MessageReaction,
+ User,
+ ApplicationCommandData,
+} from 'discord.js';
import emoji from 'node-emoji';
import pEvent from 'p-event';
import {Settings} from '../models/index.js';
import {chunk} from '../utils/arrays.js';
+import container from '../inversify.config.js';
+import Command from '../commands';
+import {TYPES} from '../types.js';
const DEFAULT_PREFIX = '!';
export default async (guild: Guild): Promise<void> => {
await Settings.upsert({guildId: guild.id, prefix: DEFAULT_PREFIX});
+ // Setup slash commands
+ const commands: ApplicationCommandData[] = container.getAll<Command>(TYPES.Command)
+ .filter(command => command.slashCommand?.name)
+ .map(command => command.slashCommand as ApplicationCommandData);
+
+ await guild.commands.set(commands);
+
const owner = await guild.client.users.fetch(guild.ownerId);
let firstStep = '👋 Hi!\n';
diff --git a/src/index.ts b/src/index.ts
index a6b6d35..ac96352 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -7,7 +7,7 @@ import Bot from './bot.js';
import {sequelize} from './utils/db.js';
import Config from './services/config.js';
import FileCacheProvider from './services/file-cache.js';
-import metadata from '../package.json';
+import metadata from '../package.json' assert {type: "json"};
const bot = container.get<Bot>(TYPES.Bot);