反应收集器Discordjs

问题描述 投票:0回答:1

我的反应收集器似乎无法正常工作。我不知道为什么。我尝试了几个不同的版本,但似乎没有任何帮助。这是我的命令的代码。其背后的想法是执行命令,然后机器人发送带有反应的嵌入。当用户对此做出反应时,他们应该获得“会员”角色。

const { SlashCommandBuilder } = require('@discordjs/builders');
const { PermissionFlagsBits, EmbedBuilder } = require('discord.js')

module.exports = {
    data: new SlashCommandBuilder()
        .setName('rules')
        .setDescription("the Rules of the Server")
        .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers)
        .setDMPermission(false),


    async execute(interaction) {
        const ruleChannel = "1090705828304146544"
        const memberRole = interaction.guild.roles.cache.find(role => role.name === 'Member')

        let embed = new EmbedBuilder()
            .setColor('#e42643')
            .setTitle('Rules')
            .setDescription('Rule 1: bla bla \nRule 2: bla bla')

        const messageEmbed = await interaction.reply({ embeds: [embed], fetchReply: true })
        messageEmbed.react('✅')

        const collectorFilter = (reaction, user) => {
            return reaction.emoji.name === '✅' && !user.bot;
        };

        const collector = messageEmbed.createReactionCollector({ filter: collectorFilter})

        collector.on('collect', (reaction, user) => {
            if(reaction.emoji.name === '✅'){
                user.roles.add(memberRole)
            }     
        })
    }
}
node.js discord.js bots
1个回答
0
投票

您的代码中似乎有 2 个错误。

  1. .add(memberRole)
    =>
    .add(memberRole.id)
  2. user.roles.add
    角色不能分配给用户,角色分配给“成员”。

这是工作代码:

const { SlashCommandBuilder } = require('@discordjs/builders');
const { PermissionFlagsBits, EmbedBuilder } = require('discord.js')

module.exports = {
    data: new SlashCommandBuilder()
        .setName('rules')
        .setDescription("the Rules of the Server")
        .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers)
        .setDMPermission(false),


    async execute(interaction) {
        const ruleChannel = "1090705828304146544"
        const memberRole = interaction.guild.roles.cache.find(role => role.name === 'Member')

        let embed = new EmbedBuilder()
            .setColor('#e42643')
            .setTitle('Rules')
            .setDescription('Rule 1: bla bla \nRule 2: bla bla')

        const messageEmbed = await interaction.reply({ embeds: [embed], fetchReply: true })
        messageEmbed.react('✅')

        const collectorFilter = (reaction, user) => {
            return reaction.emoji.name === '✅' && !user.bot;
        };

        const collector = messageEmbed.createReactionCollector({ filter: collectorFilter})

        collector.on('collect', (reaction, user) => {
            if(reaction.emoji.name === '✅'){
              interaction.guild.members.cache.get(user.id).roles.add(memberRole.id)
            }     
        })
    }
}```
© www.soinside.com 2019 - 2024. All rights reserved.