我制作了一个删除图像通道中的文本消息的机器人,但是当我使用它时,它会记录此错误。
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;
});
(这与同主题的其他问题不同) 我该如何解决?
答案 0 :(得分:0)
最可能的问题是您正在运行 Discord 机器人的多个实例。检查您是否打开了多个命令行,如果是,请检查它们是否正在运行机器人。除此之外,如果用户发送垃圾邮件,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;
}
});
答案 1 :(得分:0)
从上面的错误来看,您似乎对希望机器人执行的每个命令或功能都使用了 message event listener
。最大为 11(相同类型)。这不是执行此操作的正确方法。
//the 'client.on' function is called every time a 'message' is sent
client.on("message", async (message) => {
//do code
});
不是每个命令使用 1 个事件侦听器,而是对整个客户端使用 1 个。您可以通过多种方法解决这个问题,使用 command handlers 或类似的方法,但我会保持简单。
这是您应该在 index.js
或 main.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 指南,通读它,看看你能做什么。我强烈建议使用完全不同的机器人和干净的索引文件来尝试这个,因为这比尝试在已经有问题的代码之间适应你不理解的代码要容易。