【问题标题】:Mongoose - how to fetch specific number and message IDMongoose - 如何获取特定号码和消息 ID
【发布时间】:2021-10-20 08:22:50
【问题描述】:

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

【问题讨论】:

    标签: node.js mongoose discord eris


    【解决方案1】:

    解决方案:搜索案例 ID
    好像没有找case ID,只在filter参数里找了guild的ID。

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

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

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

    caseIDArg 替换为邮件内容中您假定的caseID 参数。例如,args[1] 或者您编写的参数处理程序可以正常工作。

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

    【讨论】:

    • 不应该是findAndUpdate吗?因为我不只是在找一个?
    猜你喜欢
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2013-09-04
    • 2016-05-10
    相关资源
    最近更新 更多