discord.js 机器人会对操作做出多次反应。使用discord.js 库向服务器发送多条消息

问题描述 投票:0回答:1

所以我的代码,每次在特定论坛中创建线程时,它都会添加标签:

client.on('threadCreate', (thread) => { 
    if (thread.parentId == global.disrequestforum) {
        const tags = thread.appliedTags.map(tagId => {
            const tag = thread.parent.availableTags.find(t => t.id === tagId);
            return tag ? tag.name : "Unknown";
        });
        let messageText = "Tags:";
        if (tags.includes("Accounting")) {
            messageText = messageText + ' <@' + userid + '>';
        }
        thread.send(messageText);
    }
});

问题是,当您在论坛上创建帖子时,它会向您发送 4 条具有相同上下文的消息。

它也适用于voiceStateUpdate - 如果有人加入或离开语音频道,我会发出通知,每个操作我都会收到四次消息(现在是三次,因为我已经关闭了此通知)。

在图像上您可以看到这些变化。

我已经多次更新了机器人的令牌,删除了 js 文件并将其添加回 pm2。甚至重新启动服务器 - 它工作了很短的时间。

例如,当我编辑代码时,我在 messageText 变量中写入“Tagus”而不是“Tags”,它会发送三条带有“Tags”的消息和一条带有更新的“Tagus”的消息。 所以我假设它在某个地方缓存了文件代码并在后台运行它。但在哪里以及如何 - 我不知道。我不在其他地方运行脚本文件,我见过一些类似的问题,但没有任何帮助我。

我可以添加

if (message.author.bot) {  return; }
,但它对这些重复项没有帮助,而且我添加了脚本,该脚本会自己创建这些帖子,所以我需要将这些标签添加到该论坛上的所有帖子中。

我什至重命名了 js 文件。重新上传到服务器,删除旧的,结果是一样的...

这不是由discord发送到我的服务器的多个操作 - 我已经从pm2中删除了脚本,添加了console.log命令并使用节点命令运行脚本 - 在这种情况下,我在discord中收到了4条消息,并且控制台中只有一条消息。 所以,要么我找不到问题,要么可能是库本身的问题,就像人们在这里

node.js discord.js duplicates
1个回答
0
投票

造成这种情况的主要原因有两个。

  1. 您有多个正在运行的机器人实例。
    检查您是否只有 1 个终端实例运行该机器人,并且它没有托管在其他任何地方。例如,在云中的 VPS 上。
  2. 这可能是你的修复方法,只需在最后添加一个 return 即可停止该函数。
client.on('threadCreate', (thread) => { 
    if (thread.parentId == global.disrequestforum) {
        const tags = thread.appliedTags.map(tagId => {
            const tag = thread.parent.availableTags.find(t => t.id === tagId);
            return tag ? tag.name : "Unknown";
        });
        let messageText = "Tags:";
        if (tags.includes("Accounting")) {
            messageText = messageText + ' <@' + userid + '>';
        }
        thread.send(messageText);

        return
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.