猫鼬-如何获取特定的号码和消息ID



我试图使机器人基本上编辑任何特定情况下提到的消息,例如,如果我做-case 5 test,它会寻找情况5和它的消息。到目前为止,当我这样做时,它基本上改变了最近的案件编号消息,而不是我想要改变的那个。例如,如果我做case 5 test,最新的情况是#9,它将改变9而不是5。

我是这样发送消息的:

Modlog.findOneAndUpdate({ guildID: msg.channel.guild.id }, { $inc: { 'caseID': 1 } }, { new: true }, async function (err, doc) {
if (err) throw err;
if (!doc) return;
if (doc.modLog.enabled) {
if (msg.channel.guild.channels.get(doc.modLog.channelID)) {
let m = await msg.channel.guild.channels.get(doc.modLog.channelID).createMessage({
embed: {
title: `${action} | Case #${doc.caseID}`,
color: colour,
fields: [
{
name: 'User',
value: user,
inline: true
},
{
name: 'Moderator',
value: moderator ? moderator : 'No issuer.',
inline: true
},
{
name: 'Reason',
value: reason ? reason : 'No reason.'
}
]
}
});
doc.messageID = m.id;
doc.type = action;
doc.caseID = doc.caseID;
//doc.caseID = m.id
doc.moderatorID = moderator,
doc.targetID = user
doc.save();
}
}
})

这就是我发送信息的方式。你可以看到我正在存储的东西,所以当有人改变一个特定的情况下的原因,例如:case 5 spamming,我希望它寻找caseID 5,然后通过它的ID编辑消息。但我不确定我做错了什么。我试图使每个情况下存储它自己的消息ID,我真的很感激任何帮助。这是我用来查找的情况和编辑的原因。

Modlog.findOne({ guildID: msg.guildID }, async (err, doc) => {
if (err) throw err;
if (!doc.modLog.enabled) return msg.channel.createMessage(`Modlog is not enabled in this server! ${this.emoji.cross}`);
if (isNaN(Number(caseID))) return msg.channel.createMessage(`Case `#${caseID}` was not a number! ${this.emoji.cross}`);
if (doc.caseID === undefined) return msg.channel.createMessage(`Couldn't find case `#${caseID}`! ${this.emoji.cross}`);
const moderator = this.bot.users.get(doc.moderatorID) || {
username: 'Unknown User',
discriminator: '0000'
}
const target = this.bot.users.get(doc.targetID) || {
username: 'Unknown User',
discriminator: '0000'
}
let embed = {
title: `${doc.type} | Case #${doc.caseID}`,
fields: [
{
name: 'User',
value: `${target.username}#${target.discriminator} (${target.id})`,
inline: true
},
{
name: 'Moderator',
value: `${moderator.username}#${moderator.discriminator} (${moderator.id})`,
inline: true
},
{
name: 'Reason',
value: reason
}
]
};
try {
await this.bot.editMessage(doc.modLog.channelID, doc.messageID, { embed: embed });
await msg.channel.createMessage(`Case **#${caseID}** has been updated. ${this.emoji.tick}`);
} catch (e) {
await msg.channel.createMessage(`I'm unable to edit that case or it has been deleted. ${this.emoji.cross}`);
}
});```

解决方案:查找Case ID
看来你没有查找Case ID,只在过滤器参数中查找了公会ID

Modlog.findOneAndUpdate({ guildID: msg.channel.guild.id }, { ... }, { ... }, ... {
...
}

在您的代码中,只有guildID被传递到过滤器参数。这将导致Mongoose为服务器查找最近初始化的文档。对于您的情况,您还应该将caseID传递到过滤器参数中。

Modlog.findOneAndUpdate({ guildID: msg.channel.guild.id, caseID: caseIDArg }, { ... }, { ... }, ... {
...
}

caseIDArg替换为消息内容中假定的caseID参数。例如,args[1]或您编写的参数处理程序。

希望这有助于回答你的问题!

最新更新