如何修复discordapierror:未知消息?

gjmwrych  于 2021-09-23  发布在  Java
关注(0)|答案(2)|浏览(280)

我制作了一个机器人,可以删除图像频道中的文本消息,但当我使用它时,它会记录这个错误。

client.on("message", async message => {
    if (message.author.bot) return;
    const users = ['853248522563485717'];
    if (message.channel.id === '841260660960395287') {
        if (users.includes(message.author.id)) return;
        if (message.attachments.size !== 0) return;
        message.member.send("You can't send text in 'images' channel")
         await message.delete();
    } else return;
});

(这与同一主题的其他问题不同)如何解决?

bf1o4zei

bf1o4zei1#

最可能的问题是您正在运行discord bot的多个示例。检查是否有多个命令行打开,如果有,检查它们是否正在运行bot。除此之外,如果用户发送垃圾邮件,discord api往往会混淆要删除哪些邮件,使其尝试删除同一邮件超过1次。您可以尝试添加if语句,检查消息是否未定义。

client.on("message", async (message) => {
  if (!message) return; // ADDED THIS LINE OF CODE
  if (message.author.bot) return;
  const users = ["853248522563485717"];
  if (message.channel.id === "841260660960395287") {
    if (users.includes(message.author.id)) return;
    if (message.attachments.size !== 0) return;
    message.member.send("You can't send text in 'images' channel");
    await message.delete();
  } else {
    return;
  }
});
wixjitnu

wixjitnu2#

从上面的错误来看,您似乎在使用 message event listener 对于您希望bot执行的每个命令或功能。最大值为11(相同类型)。这不是正确的方法。

什么是事件侦听器?

//the 'client.on' function is called every time a 'message' is sent

client.on("message", async (message) => {
  //do code
});

如何解决此问题:

不要为每个命令使用1个事件侦听器,而是为整个客户端使用1个事件侦听器。您可以通过多种方法来解决这个问题,比如使用命令处理程序之类的,不过我会保持简单。
这是您应该在应用程序中看到的基本设置 index.jsmain.js 文件:

// require the discord.js module
const Discord = require('discord.js');

// create a new Discord client
const client = new Discord.Client();

// on message, run this
client.on('message', (message) => {
    if (!message) return;
    console.log(`message sent in ${message.channel.name}. message content: ${message.content}`);
    //this event will fire every time a message is sent, for example.
});

// login to Discord with your app's token
client.login('your-token-goes-here');

那么,如果你想用你的机器人实现多种功能,你会怎么做(例如,删除仅图像频道中的文本并将消息记录到控制台)
命令处理。这是唯一的办法。我在上面链接了一个官方的discord.js指南,仔细阅读,看看你能做些什么。我强烈建议您尝试使用完全不同的bot和干净的索引文件,因为这比尝试在已经有问题的代码之间插入您不理解的代码要容易得多。

相关问题