Discord.js — Как я могу реализовать префикс, чтобы избежать ложного срабатывания ответа команды?

#javascript #node.js #discord #discord.js

#javascript #node.js #Discord #discord.js

Вопрос:

Я работаю над ботом discord с обработчиком команд, где у меня есть все команды в их собственных файлах, которые я импортирую в основной файл. Проблема, с которой я сталкиваюсь, заключается в том, что я изо всех сил пытаюсь внедрить префикс в команды, чтобы все команды могли запускаться просто текстом.

Способ работы моего обработчика команд заключается в том, что у меня есть этот код в bot.js:

 client.on('message', msg => {
if (msg.content.startsWith(prefix)) return;
//Splitting the message from the user
const args = msg.content.split(/  /);
const command = args.shift().toLowerCase();
console.log(`Called comand: ${command}`);

//See if the commands folder has that command in it
if (!client.commands.has(command)) return;

//Try to execute the command. If we can't, we throw an error instead.
try {
    client.commands.get(command).execute(msg, args);
} catch (error) {
    console.error(error);
    msg.channel.send("I hit an issue trying to issue that command.");
    console.log("A Comnmand was issued, but I hit an issue trying to run it.");
}
  

В верхней части этого файла у меня также есть

 const prefix = '!'
  

Затем у меня есть файл с именем index.js в папке commands, которая выглядит следующим образом:

 module.exports = {
about: require('./about'),
help: require('./help'),
nokill: require('./nokill'),
animeme: require('./animeme'),
showmeme: require('./showmeme'),
roadmap: require('./roadmap'),
changelog: require('./changelog'),
wuvu: require('./wuvu'),
debug: require('./debug'),
dailyquote: require('./dailyquotes'),
dance: require('./dance'),
  

И для команд они выглядят примерно так:

 const GihpyAPIModule = require('./command_modules/fetchGif.js');

module.exports = {
    name: 'dance',
    decription: 'Sends a dancing GIF',
    execute(msg, args) {
        msg.channel.send("Here's your dance!");
        var searchPromise = GihpyAPIModule.getGif("dance");

        searchPromise.then((gif) => {
            msg.channel.send(gif);
        })
    }
  

Посмотрев на консоль, из которой запускается бот, я заметил, что если я сначала отправлю сообщение с префиксом в нем, например!танцуйте, он даже не распознает его. Он просто полностью игнорирует его.

Вот что я пробовал до сих пор:

  • Внедрил префикс в каждый командный файл

  • Использовал это в bot.js:

    const args = msg.content.slice(префикс.длина).разделение (/ /);

Поскольку бот просто игнорирует сообщения с! в начале бот просто сокращал сообщения, поэтому справка превращалась в elp.

Любой совет приветствуется!

Ответ №1:

вам нужно заменить ваш метод с именем:

 if (msg.content.startsWith(prefix)) return;
  

С помощью этого:

 if (!msg.content.startsWith(prefix)) return;
  

Я думаю, что это должно сработать.

Ответ №2:

Вы завершаете выполнение своей команды, если она начинается с префикса. Функция return; завершит работу функции и заставит ее вернуть определенное значение, или она просто остановит ее и ‘вернется’ к основному коду. То, что вы делаете, это то, что вы возвращаете бота в состояние прослушивания команды вместо фактического ее выполнения.

Простым решением для этого было бы

 if(!msg.content.startsWith(prefix)) return;
  

The! метка в начале очень важна. Это означает, что если это не так, то вернитесь к прослушиванию новых сообщений.

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

1. После всего этого устранения неполадок я упустил из виду самое важное. Спасибо за помощь!