Гильдия не определена в обработчике команд

#javascript #discord #discord.js

#javascript #Discord #discord.js

Вопрос:

Итак, я пытаюсь создать многоцелевого бота discord, используя discord.js все идет хорошо, однако я использую обработчик команд вместо того, чтобы помещать все свои команды в свой основной код. Что вызывает у меня проблемы, так как многие переменные и константы, которые мне нужны, «не определены». Я пытаюсь создать команду удара, которая работает довольно хорошо, но, похоже, я не могу определить, есть ли у бота указанные разрешения на удар пользователя, все, что возвращается, это то, что гильдия не определена. Я пробовал использовать guild.me.hasPermissions("KICK_MEMBERS") , но это тоже не сработало. Вот мой код, если кто-нибудь может помочь:

 module.exports = {
name: 'kick',
description: 'Kick a user from the server.',
guildOnly: true,
permission: 'KICK_MEMBERS',
usage: '<user> <reason>',
execute(message, args) {
    const fullCommand = message.content.substr(1);
    const splitCommand = fullCommand.split(' ');
    const arguments2 = splitCommand.slice(2);

    const reason = arguments2;
    const member = message.mentions.members.first();

    if (!message.mentions.users.size) {
        message.reply('please ping a user for me to kick!');
    }
    if (member.kickable == false) {
        message.channel.send('That user cannot be kicked!');
    }
    if (args.length == 1) {
        member.kick();
    }
    if (args.length > 1) {
        member.kick(reason);
    }
},
 

};

Ответ №1:

Неопределенное было довольно ясно, потому что вы их не определили 🙂

Я не уверен, в какой версии Discord.Вы находитесь в JS.

Но если вы хотите получить доступ к гильдии, в которую отправляется сообщение, вы можете использовать :

 let guild = message.guild;
 

После этого вы можете проверить свои права доступа к боту, используя :

 guild.me.hasPermission("KICK_MEMBERS");
 

Примечания :
Я создал пользовательский обработчик команд для своего бота, который передает все переменные, которые мне нужны, в качестве параметра :

index.js

 client.on("message", async message => {

var RawMessage = message.content.split(client.Informasi.get("Konfigurasi").BotInternal.BotSeparator);

// TDCM was the picked command based on what the user want to do.
TDCM.FunctionRun(message, RawMessage, Discord, client, FileSystem);
}

 

TheCommandFunction.js

 module.exports = {
    FunctionName: "ping",
    FunctionDeskripsi: "Function description here",
    FunctionInput: "PUBLIC-UNLR",
    FunctionAdminOnly: false,
    async FunctionRun(message, rawmessage, Discord, client, FileSystem) {
        message.reply(`My ping is ${client.ws.ping} ms !`);
    }
};
 

Ответ №2:

вы можете проверить свои права доступа к объекту guild. С объектом message код будет выглядеть следующим образом.

 message.guild.me.hasPermission("KICK_MEMBERS");
 

Вы можете прочитать больше об объекте message здесь .

Комментарии:

1. Вероятно, в моих словах было мало смысла, но я сказал, что слово «гильдия» возвращается таким же неопределенным, какого не было в моем основном коде.

2. Вы сделали «MESSAGE.guild»?