我的反应收集器似乎无法正常工作。我不知道为什么。我尝试了几个不同的版本,但似乎没有任何帮助。这是我的命令的代码。其背后的想法是执行命令,然后机器人发送带有反应的嵌入。当用户对此做出反应时,他们应该获得“会员”角色。
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)
}
})
}
}
您的代码中似乎有 2 个错误。
.add(memberRole)
=> .add(memberRole.id)
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)
}
})
}
}```