簡體   English   中英

Discord.js v13 Bot 不在 DMChannel 中收集消息

[英]Discord.js v13 Bot doesn't collect messages in DMChannel

我正在嘗試為我的 discord 機器人制作驗證碼驗證系統。 因此,當有人加入服務器時,機器人會向用戶發送驗證碼,並且用戶必須在給定的時間段內解決驗證碼才能在服務器中獲得特定角色,但我的機器人似乎沒有收集用戶的消息。 我嘗試了不同的方法來解決這個問題。 以下是我嘗試過的一些方法:

1. 使用 createMessageCollector()

        const filter = (message) => {
            if (message.author.id !== member.id) return;
            if (message.content === captcha.text) return true;
            else member.send("Wrong captcha")
        }
        const msg = await member.send({files : [captchaAttachment], embeds: [captchaEmbed], content: captcha.text })

        const collector = msg.channel.createMessageCollector({ filter, max: 1, time: 10000, errors: ["time"]})

        collector.on('collect', () => {
            member.roles.add("1009431897694294017");
            member.send("You have been verified")
        })

        collector.on('end', async () => {
            await member.send("you have not been verified and have kicked from the server")
            member.kick()
        })

2. 將 awaitMessages() 與 try...catch 一起使用

        const filter = (message) => {
            if (message.author.id !== member.id) return;
            if (message.content === captcha.text) return true;
            else member.send("Wrong captcha")
        }
        const msg = await member.send({files : [captchaAttachment], embeds: [captchaEmbed], content: captcha.text })
        try {
            const response = await msg.channel.awaitMessages({filter: filter, max: 1, time: 10000, errors: ["time"]})
            if (response) {
                member.roles.add("1009431897694294017")
                member.send("You have been verified")
            }
        }
        catch(e) {
            await member.send("you have not been verified and have kicked from the server")
            member.kick()
        }

3. 將 awaitMessages() 與 Promise 一起使用

        const filter = (message) => {
            if (message.author.id !== member.id) return;
            if (message.content === captcha.text) return true;
            else member.send("Wrong captcha")
        }
        await member.send({files : [captchaAttachment], embeds: [captchaEmbed], content: captcha.text })
            .then((msg) => {
                msg.channel.awaitMessages({ filter, max: 1, time: 10000, errors: ["time"] })
                    .then(() => {
                        member.roles.add("1009431897694294017");
                        member.send("You have been verified")
                    })
                    .catch(async () => {
                        await member.send("you have not been verified and have kicked from the server")
                        member.kick()
                    })
            })

上面的所有片段都具有相同的結果,如下圖所示: Captcha Bot error

如您所見,用戶已經解決了驗證碼,但機器人沒有收集消息,所以它拋出了一個錯誤。

我也嘗試刪除過濾器,因為我認為這是問題的根源,但似乎並沒有解決它。

我還注意到我只在DMChannel遇到了這個問題。 我嘗試通過 交互TextChannel中收集消息,並且消息收集器工作得非常好。

我終於解決了這個問題。 原來它與我使用的 Discord Intents有關。 這是我使用的意圖:

const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS] });

然后我意識到我實際上需要添加DIRECT_MESSAGES Intent。 所以正確的Client實例應該是這樣的:

const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.DIRECT_MESSAGES] });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM