Почему переключатель по умолчанию повторяется? - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь создать бот-диск, используя дискорд. js, используя переключатель. Мой "default:" повторяется всякий раз, когда запускается любое дело.

Я проверил, есть ли случаи без перерывов, я пытался переключаться между "и". Кто-нибудь знает, почему это происходит и как это исправить?

const wrongResponse = ["1", "2", "3"];
var randomResponse = wrongResponse[Math.floor(Math.random() * wrongResponse.length)];

bot.on("message", message => {
    let args = message.content.substring(calling.length).split(" ");
    switch (args[0]) {
        case 'commands':
            const embed = new Discord.RichEmbed()
                .setDescription("commands here");
            message.channel.send(embed);
            break;

        case 'search':
            message.reply("nothing yet");
            break;

        default:
            message.reply(randomResponse);
            break;
    };
});

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

По умолчанию повторяется, потому что код по умолчанию отправляет событие сообщения, отправляя ответ, который является сообщением. Это вращается вокруг бесконечной l oop. Ваш бот должен игнорировать событие сообщения, отправленное из-за его собственных действий. Вы можете сравнить message.author.id с идентификатором бота, однако более простой способ сделать это - просто игнорировать всех ботов, что в большинстве случаев является хорошей идеей.

bot.on("message", message => {
    if(message.author.bot) { return; }
    // It's a human, do something!
}
0 голосов
/ 05 марта 2020

При отправке сообщения на канал также генерируется событие сообщения. После отправки сообщения, которое не соответствует ни одному из указанных случаев, бот отправит randomResponse и также получит это сообщение, и поскольку случайный ответ также не соответствует ни одному случаю, он будет делать то же самое снова и снова , Попробуйте добавить в начало вашего прослушивателя событий проверку, проверяющую, не было ли сообщение отправлено самим ботом.

...