【问题标题】:Check if someone sent the message twice检查是否有人发送了两次消息
【发布时间】:2022-01-07 04:06:13
【问题描述】:
在我的服务器上,我们只有一个词的频道,"Oi"。
如果有人发送的不是"Oi" 这个词,它就会被删除。但是现在我需要一个代码,如果有人连续发送两次消息,它会删除该消息。如果他们想发送,他们必须等待其他人发送。
这是我当前的代码,如果您出于某种原因想查看它:
if (message.channel.id === "ChannelIdWhichImNotGonnaTell") {
if (message.content === "Oi") {
let log = client.channels.cache.get("ChannelIdWhichImNotGonnaTell")
log.send(`New Oi By ${message.author.tag}`)
} else {
message.delete()
}
}
【问题讨论】:
标签:
javascript
node.js
discord
discord.js
【解决方案1】:
您可以使用limit option fetch() 最后两条消息,返回集合中的last() 将是频道中的倒数第二条消息(最后一条触发您的代码之前的一条)。
然后你可以比较author的ID;如果它们相同,您可以删除该消息:
if (message.channel.id === oiChannelID) {
if (message.content === 'Oi') {
// fetch the last two messages
// this includes this one and the previous one too
let lastMessages = await message.channel.messages.fetch({ limit: 2 });
// this is the message sent before the one triggered this command
let previousMessage = lastMessages.last();
if (previousMessage.author.id === message.author.id) {
console.log('No two Ois, mate');
message.delete();
// don't execute the rest of the code
return;
}
let log = client.channels.cache.get(logChannelID);
log.send(`New Oi By ${message.author.tag}`);
} else {
message.delete();
}
}
【解决方案2】:
有一些解决方法。但我发现这是执行此操作的有效方法。
正如您所说的“他们必须等待其他人发送 oi”,那么您应该在发送的“新消息”之前获取“旧消息”。并尝试获取用户 ID。然后将其与新消息一比较。
这里是示例代码:
if (message.content === 'Oi') {
message.channel.messages.fetch({limit: 2})
.then(map => {
let messages = Array.from(map.values());
let msg = messages[1];
if (msg.author.id === message.author.id){
message.delete();
// do something
} else {
let log = client.channels.cache.get("ChannelID")
log.send(`New Oi By ${message.author.tag}`)
}}).catch(error => console.log("Error fetching messages in channel"));
}
它将“旧消息”作者用户 ID 与“新消息”作者用户 ID 进行比较。如果匹配的话。然后将其删除。