我制作了一个名为YES的不和谐机器人,我有一个仅用于图像的文本通道,我正在尝试使其如果有文本消息,机器人将删除它并回复“您不能发送文本消息”。我还为机器人创建了一个白名单,因为我希望它能够发送文本消息。
client.on("message", async message => {
var usernames = ["YES"]
if (usernames.includes(message.author.username)) {
if (message.attachments.size > 0) {
message.delete();
client.channels.cache.get("841260660960395287").send(message.author.username + ", you cannot send text")
}
}
}) 这根本不起作用,也不会显示任何错误。
发布于 2021-07-06 20:05:43
您的if语句 if (message.attachments.size > 0)正在检查attachments集合的大小是否大于 0。因此,如果邮件至少有< code >E19一个附件,它将只执行其中的代码。
您可以应用以下内容:
if (message.attachments.size)如果该邮件没有attachments,则集合"attachments“应为空,在这种情况下,您要删除此邮件。²
也是
您应该await .delete()>函数,因为它返回一个promise
await message.delete();
// Further code或²
message.delete()
.then(msg => console.log(`Deleted message from ${msg.author.username}`))
.catch(error => console.log(error))很高兴知道:
如果你想在一个字符串中使用变量,你不必使用所有的'+‘。一种更简单、更快的解决方案是用`替换',然后将变量包装在${}中。在您的代码中,它将如下所示:
client.channels.cache.get("841260660960395287").send(`${message.author.username}, you cannot send text`)修复后的代码现在应该如下所示:
client.on('message', async message => {
var usernames = ['YES'];
if (usernames.includes(message.author.username)) {
if (message.attachments.size) {
await message.delete();
client.channels.cache.get('841260660960395287').send(`${message.author.username}, you cannot send text`);
}
}
}); 参考文献
发布于 2021-07-06 18:32:49
这里的问题出在if语句逻辑上。它会检查邮件是否有多个附件,然后将其删除。这就是问题所在,因此通过检查集合的大小是否为0 (=== 0),您的程序将成功运行。
https://stackoverflow.com/questions/68268837
复制相似问题