【问题标题】:My Discord bot is sending multiple messages at once using discord.js我的 Discord 机器人使用 discord.js 一次发送多条消息
【发布时间】:2021-04-19 23:54:13
【问题描述】:

由于某种原因,该机器人不止一次在不和谐中发帖。我现在不确定如何解决这个问题。我已经用尽了所有选项,甚至重新启动了代码和机器人本身,但我不确定从这里开始。

你可以在下面找到我的代码:

const Discord = require('discord.js');
const fs = require('fs');

const client = new Discord.client();    
const prefix = '-';

client.commands = new Discord.Collection();
    
const commandFiles = fs.readdirSync('./commands/').filter(file => file.endsWith('.js'));

for (const file of commandFiles){
    const command = require(`./commands/${file}`);
    
    client.commands.set(command.name, command);
}
    
client.once('ready', () => {
    console.log('United is online');
});
    
client.on('message', message =>{
    if(!message.content.startsWith(prefix) || message.author.bot ) return;
    
    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase();
    
    if(command === 'youtube'){
        client.commands.get('youtube').execute(message, args);
    } else if (command == 'twitter'){
        message.channel.send('https://twitter.com/UnitedPeoplesTV');
    }
});

youtube.js

module.exports = {
    name: 'youtube',
    description: "displays youtube channel!",
    execute(message, args){
        message.channel.send('https://youtube.com/unitedpeoplestv?sub_confirmation=1');
    }
}

【问题讨论】:

  • 您是否运行了多个机器人实例?
  • 不,discord 中只有一个机器人,除非我遗漏了什么。
  • 尝试重置您的 IDE 和终端

标签: javascript node.js discord.js


【解决方案1】:

我建议您将机器人从服务器中踢出,重新启动计算机(或停止托管服务 - 例如,如果您使用的是 pm2,请确保它没有运行多个实例),然后重试。完成后,再次从 discord 应用程序网页邀请机器人回来。

【讨论】:

    【解决方案2】:

    确保没有两个进程在运行,在任务管理器中查看是否有两个 Node.js 进程在运行,如果有则可能是双重运行。尝试结束它们,然后再次启动机器人。

    【讨论】:

    • 逻辑上的OR 在那里非常完美。使用||,当没有前缀或消息来自机器人时,我们不执行命令。使用您的&&,您正在检查消息是否不以前缀AND 开头,作者是一个机器人,因此它只会在机器人开始发送无前缀消息时停止执行。
    • 您不需要在任务管理器中查看是否有 2 个节点进程正在运行,因为命令行是您通常启动机器人的方式。您只需关闭所有命令行实例
    • 一个进程很容易被命令行孤立并继续运行。使用ps aux | grep <your program> 确保您没有任何僵尸四处奔跑。
    • @Proto 不,它们有时会被启动到后台并且不会显示为窗口
    【解决方案3】:

    为确保没有多个实例,您可以在应用程序内的discord developer portal 中重置您的令牌,并将旧令牌替换为新令牌。之后,您需要使用新令牌重新启动您的机器人。

    这将停止所有其他进程,因为由于令牌重置,discord 正在停止所有连接。

    【讨论】:

      【解决方案4】:

      尝试添加这行代码:

      if (message.author.bot) return;
      

      它检查消息的作者是否是机器人,如果为真则不返回任何内容。

      【讨论】:

        猜你喜欢
        • 2019-09-12
        • 2021-08-19
        • 2020-04-29
        • 2021-01-08
        • 2020-08-16
        • 1970-01-01
        • 2020-02-26
        • 2020-01-22
        • 2020-09-14
        相关资源
        最近更新 更多