#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. После всего этого устранения неполадок я упустил из виду самое важное. Спасибо за помощь!