【问题标题】:How to make a reaction collector for a bot's message如何为机器人的消息制作反应收集器
【发布时间】:2021-12-18 12:44:41
【问题描述】:

现在我正在制作一个反应收集器,它可以工作,但是机器人会向我的消息添加一个反应而不是它自己的,但是当我让它自己添加反应时,我不能使用变量 I用于收集器的承诺中。

import { ICommand } from 'wokcommands'
import { Message, MessageEmbed, MessageReaction, User } from 'discord.js'

export default {
    category: 'Testing',
    description: 'Tests the collector system',
    hidden: true,

    callback: ({ message, channel }) => {
    

        const answerUsernameEmbed = new MessageEmbed()
        .setTitle('Please confirm this action')
        .setColor('#1be730')
        message.reply({
            embeds: [answerUsernameEmbed]
        }).then((newMessage) => {
            newMessage.react('????')
        })

        const filter = (r: MessageReaction, user: User) => {
            return user.id === message.author.id
        }

        const collector = message.createReactionCollector({
            filter,
            max: 1,
            time: 1000 * 10,
        })

        collector.on('collect', reaction => {
            console.log(reaction.emoji.name)
        })
        
        collector.on('end', collected => {
            if (collected.size === 0) {
                const badCollector = new MessageEmbed()
                .setTitle('You did not react in time...')
                .setColor('#ff0000')
                message.reply({
                    embeds: [badCollector]
                })
                return
            }

            let text = 'Collected:\n\n'

            collected.forEach((message) => {
                text += `${message.emoji.name}\n`
            })

            message.reply(text)
        })
    }
} as ICommand

如您所见,我可以使用 .then 让机器人对自己的消息做出反应,但是 newMessage 在承诺范围之外是不可访问的,我不能将收集器放在承诺中,因为那一次给我8个错误...

【问题讨论】:

    标签: typescript discord.js


    【解决方案1】:

    当尝试对消息做出反应时,最好使用 await 函数并将消息设置为一个变量。如:

    const reactMsg = await message.reply({embeds: 
        [answerUsernameEmbed]}).then(reactMsg.react('?'))
    

    这应该避免您的消息变量位于全局范围之内或之外。现在您可以在任何地方使用它,并且您仍然会得到正确消息的反应,因为它实际上是在等待它发送,然后对它做出反应。

    https://discordjs.guide/popular-topics/reactions.html#reacting-to-messages.
    如果您需要更多帮助但尚未查看,则 DJS 指南提供了一些有用的信息。

    【讨论】:

      猜你喜欢
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 2021-12-11
      • 2021-09-12
      • 2020-07-28
      • 1970-01-01
      • 2019-06-01
      相关资源
      最近更新 更多