0

我试图让机器人基本上编辑提到的任何特定案例的消息,例如,如果我这样做-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}`);
        }
    });```
4

1 回答 1

0

解决方法:搜索Case ID
貌似你没有找Case ID,只在filter参数里找了公会ID。

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

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

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

在消息内容中替换caseIDArg为您假定的 caseID 参数。例如,args[1]或者您对参数处理程序进行了编程以使其工作。

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

于 2021-09-09T14:36:01.380 回答