Cancellare Slash Commands in Discord.js

Ad un certo punto potremmo aver deciso che un determinato slash command non è più necessario, e ovviamente non vogliamo che gli utenti tentino di eseguire un comando ormai rimosso […]

Avatar di gbfactory
gbfactory 5 Agosto 2022

Ad un certo punto potremmo aver deciso che un determinato slash command non è più necessario, e ovviamente non vogliamo che gli utenti tentino di eseguire un comando ormai rimosso dal bot..

Cancellare un Comando Specifico

Per cancellare uno slash command specifico, abbiamo bisogno del suo id. Per recuperarlo apriamo la schermata delle "Impostazioni del server", andiamo su "Integrazioni" e selezioniamo il nostro bot nella sezione "Bot e App". Qui cerchiamo lo slash command in questione, premiamo con il tasto destro e scegliamo "Copia l'ID".

Ricorda che per poter visualizzare l'opzione "Copia l'ID" è necessario avere attivata la Modalità Sviluppatore dalle impostazioni avanzate di Discord.

Procediamo andando a modificare il file registra-comando.js creato nella lezione precedente come di seguito:

const { REST } = require('@discordjs/rest');
const { Routes } = require('discord.js');
const { clientId, guildId, token } = require('./config.json');

const rest = new REST({ version: '10' }).setToken(token);

// ...

// per i comandi locali dei server
rest.delete(Routes.applicationGuildCommand(clientId, guildId, 'commandId'))
	.then(() => console.log('Successfully deleted guild command'))
	.catch(console.error);

// per i comandi globali
rest.delete(Routes.applicationCommand(clientId, 'commandId'))
	.then(() => console.log('Successfully deleted application command'))
	.catch(console.error);

Nel codice appena riportato, commandId è l'id del comando che desideriamo cancellare. Una volta modificato il file in base alle proprie esigenze possiamo eseguire lo script, che procederà a cancellare il comando.

Cancellare tutti i comandi

Per cancellare tutti i comandi registrati in un server specifico o globalmente, dobbiamo semplicemente passare un array vuoto quando si vanno ad impostare i comandi:

const { REST } = require('@discordjs/rest');
const { Routes } = require('discord.js');
const { clientId, guildId, token } = require('./config.json');

const rest = new REST({ version: '10' }).setToken(token);

// ...

// per i comandi locali dei server
rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: [] })
	.then(() => console.log('Successfully deleted all guild commands.'))
	.catch(console.error);

// per i comandi globali
rest.put(Routes.applicationCommands(clientId), { body: [] })
	.then(() => console.log('Successfully deleted all application commands.'))
	.catch(console.error);

L'API di Discord attualmente non mette a disposizione un modo semplice per cancellare in un colpo solo tutti i comandi locali che tuttavia sono registrati su più di un server. Per ognuno di essi sarà necessaria una richiesta all'endpoint dell'API indicato nell'esempio, specificando l'id del server e del comando. Tieni presente che lo stesso comando registrato singolarmente su più di un server, avrà un id ogni volta differente.