From 827ff350ee5df918bc4ecb2e19b64eccc94a46c7 Mon Sep 17 00:00:00 2001 From: Federico fuji97 Rapetti Date: Sun, 26 Dec 2021 04:45:50 +0100 Subject: Improve commands registration --- src/bot.ts | 25 ++++++++++++++----------- src/events/guild-create.ts | 19 ++++++++++++++++++- src/index.ts | 2 +- 3 files changed, 33 insertions(+), 13 deletions(-) (limited to 'src') 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 => { await Settings.upsert({guildId: guild.id, prefix: DEFAULT_PREFIX}); + // Setup slash commands + const commands: ApplicationCommandData[] = container.getAll(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(TYPES.Bot); -- cgit v1.2.3