#javascript #discord #discord.js
#javascript #Discord #discord.js
Вопрос:
Я следую Discord.js руководство по созданию команд косой черты для моего бота, но я застрял на этом этапе:
https://discordjs.guide/interactions/slash-command-permissions.html#user-permissions
Есть две вещи, которые я не могу понять:
- где я должен написать этот блок кода, на который я ссылался выше,
- как я должен находить идентификатор каждой команды
Я создаю свои команды, используя SlashCommandBuilder
и deploy-commands.js
сценарий, как описано здесь:
https://discordjs.guide/creating-your-bot/creating-commands.html#command-deployment-script
и здесь:
https://discordjs.guide/interactions/registering-slash-commands.html#guild-commands
Если вы можете помочь мне в любой из этих двух вещей, это было бы здорово!
Спасибо!
Комментарии:
1. Не могли бы вы предоставить свой текущий код? (по крайней мере, некоторые из них?)
2. Конечно, здесь: github.com/OIIOIIOI/rd72-bot
3. Я предполагаю, что ваш репозиторий является частным, поэтому у меня нет к нему доступа. Если вы хотите, вы можете нажать на мой профиль, перейти в мой профиль на github и добавить меня в репозиторий. Чем я посмотрю
4. Мой плохой, я изменил его на общедоступный
Ответ №1:
Я изучил коды @discordjs/builders
и @discordjs/rest
, и нет способа установить пользовательские разрешения для этих пакетов. Что вы можете сделать, так это создать команды косой черты с Discord.js
пакетом. При их создании в Discord.js
пакете идентификатор команды косой черты будет возвращен в заполненном виде Promise
. С помощью этого идентификатора вы можете установить разрешения для команды. Единственная проблема при выполнении этого способа заключается в том, что может потребоваться некоторое время, прежде чем команды косой черты снова заработают. Вот пример:
const { Client } = require('discord.js');
const client = new Client({intents: ['Your Intents here']});
client.once('ready', () => {
client.application.commands.create({
name: 'your_command',
description: "Your command's description"
}).then(id => {
client.application.commands.set({command: id, permissions: [
id: 'some_user_id',
type: 'USER',
permission: false // Can not use the slash command
]}).catch(console.log);
});
});
client.login('Your token here');
Я думал, что есть другой способ сделать это, но я не совсем уверен. Если я прав, вы также можете получить все команды после обновления их с @discordjs/builders
@discordjs/rest
помощью пакетов и . После того, как вы их извлекли, они Promise
вернут a Collection
, как только он будет заполнен. В Collection
будут все идентификаторы всех команд косой черты, которые вы можете использовать для установки разрешений. Итак, если эта теория работает, это будет примером:
const { Client } = require('discord.js');
const client = new Client({intents: ['Your Intents here']});
client.once('ready', () => {
// Your refresh code here
client.application.commands.fetch().then(collection => {
collection.forEach(command => {
if(command.name === `The specified command name`){
client.application.commands.permissions.set({command: command.id, permissions: [
{
id: 'some_user_id',
type: 'USER',
permission: false // Can not use the slash command
}
]}).catch(console.log);
}
});
}).catch(console.log);
});
client.login('Your token here');
Комментарии:
1. Выполнение цикла forEach в событии ready действительно работает! Я соответствующим образом обновил репозиторий. Спасибо!