node.js - 反应角色命令有问题... Node.js、Discord.js、Javascript
问题描述
您好,我在 Discord.js 中创建反应角色命令时遇到问题,我不明白为什么它是类型错误,任何帮助将不胜感激。我不知道如何解决这个问题,我已经尝试了很多年,请解释我不知道出了什么问题......
谢谢
const { MessageEmbed } = require('discord.js');
module.exports = {
name: 'reactionrole',
description: 'Creates a reaction role for games',
async execute(prefix, message, args, client) {
await message.delete().catch(O_o => { });
const minecraft = message.guild.roles.get('823987141239504929'); // Minecraft Role
const Fortnite = message.guild.roles.get('823987679078121543'); // Fortnite
const Hitman = message.guild.roles.get('824007858953388032'); // Hitman
const AmongUs = message.guild.roles.get('823987894569664522'); // Among Us
const RocketLeague = message.guild.roles.get('823988431402434580'); // Rocket League
const FNAF = message.guild.roles.get('823988527673901126'); // FNAF
const NightGaurdSimulator = message.guild.roles.get('823988658440765460'); // Night Gaurd Simulator
const filter = (reaction, user) => ['️', '', '️', '️', '⚽', '', ''].includes(reaction.emoji.name) && user.id === message.author.id;
const embed = new RichEmbed()
.setTitle('Avaiilable Roles')
.setDescription(`
️ ${minecraft.toString()}
${Fortnite.toString()}
️ ${Hitman.toString()}
️ ${AmongUs.toString()}
⚽ ${RocketLeague.toString()}
${FNAF.toString()}
${NightGaurdSimulator.toString()}
`)
.setColor(0xdd9323)
.setFooter(`ID: ${message.author.id}`);
message.channel.send(embed).then(async msg => {
await message.react('️');
await message.react('');
await message.react('️');
await message.react('️');
await message.react('⚽');
await message.react('');
await message.react('');
message.awaitReactions(filter, {
max: 1,
time: 30000,
errors: ['time']
}).then(collected => {
const reaction = collected.first();
switch (reaction.emoji.name) {
case '️':
if (message.member.roles.has(a.id)) {
msg.delete(2000);
return message.channel.send('You are already in this role!').then(m => m.delete(3000));
}
message.member.addRole(a).catch(err => {
console.log(err);
return message.channel.send(`Error adding you to this role: **${err.message}**.`);
});
message.channel.send(`You have been added to the **${minecraft.name}** role!`).then(m => m.delete(3000));
msg.delete();
break;
case '':
if (message.member.roles.has(b.id)) {
msg.delete(2000);
return message.channel.send('You are already in this role!').then(m => m.delete(3000));
}
message.member.addRole(b).catch(err => {
console.log(err);
return message.channel.send(`Error adding you to this role: **${err.message}**.`);
});
message.channel.send(`You have been added to the **${Fortnite.name}** role!`).then(m => m.delete(3000));
msg.delete();
break;
case '️':
if (message.member.roles.has(c.id)) {
msg.delete(2000);
return message.channel.send('You are already in this role!').then(m => m.delete(3000));
}
message.member.addRole(c).catch(err => {
console.log(err);
return message.channel.send(`Error adding you to this role: **${err.message}**.`);
});
message.channel.send(`You have been added to the **${Hitman.name}** role!`).then(m => m.delete(3000));
msg.delete();
break;
case '️':
if (message.member.roles.has(c.id)) {
msg.delete(2000);
return message.channel.send('You are already in this role!').then(m => m.delete(3000));
}
message.member.addRole(c).catch(err => {
console.log(err);
return message.channel.send(`Error adding you to this role: **${err.message}**.`);
});
message.channel.send(`You have been added to the **${AmongUs.name}** role!`).then(m => m.delete(3000));
msg.delete();
break;
case '⚽':
if (message.member.roles.has(c.id)) {
msg.delete(2000);
return message.channel.send('You are already in this role!').then(m => m.delete(3000));
}
message.member.addRole(c).catch(err => {
console.log(err);
return message.channel.send(`Error adding you to this role: **${err.message}**.`);
});
message.channel.send(`You have been added to the **${RocketLeague.name}** role!`).then(m => m.delete(3000));
msg.delete();
break;
case '':
if (message.member.roles.has(c.id)) {
msg.delete(2000);
return message.channel.send('You are already in this role!').then(m => m.delete(3000));
}
message.member.addRole(c).catch(err => {
console.log(err);
return message.channel.send(`Error adding you to this role: **${err.message}**.`);
});
message.channel.send(`You have been added to the **${FNAF.name}** role!`).then(m => m.delete(3000));
msg.delete();
break;
case '':
if (message.member.roles.has(c.id)) {
msg.delete(2000);
return message.channel.send('You are already in this role!').then(m => m.delete(3000));
}
message.member.addRole(c).catch(err => {
console.log(err);
return message.channel.send(`Error adding you to this role: **${err.message}**.`);
});
message.channel.send(`You have been added to the **${NightGaurdSimulator.name}** role!`).then(m => m.delete(3000));
msg.delete();
break;
}
}).catch(collected => {
return message.channel.send(`I couldn't add you to this role!`);
});
});
exports.help = {
name: 'roles'
};
}
}
Console error:
(node:38165) UnhandledPromiseRejectionWarning: TypeError: message.guild.roles.get is not a function
解决方案
好吧,这有一些问题,您正在使用message.awaitReactions
它会导致花费时间,因此它不会是永久性的。如果有任何事情,我建议你这样做Client#messageReactionAdd
。另外我注意到你有member.roles.has()
,在 v12 中,你需要在任何收集方法(例如 has)之前缓存,并添加一个角色member.roles.add()
。如果您需要更多 v11 -> v12,请查看 discord.js 指南:
https ://discordjs.guide/additional-info/changes-in-v12.html#before-you-start
推荐阅读
- curl - NGINX 代理从应用到另一台服务器的 curl POST 请求
- java - E/FirebaseInstanceId:主题同步或令牌检索因硬故障异常失败:FIS_AUTH_ERROR。不会重试操作
- javascript - 如何渲染在 APP 不同地方定义的 React 组件的同一个实例?
- azure - 通过 Microsoft Graph API 注册应用程序无法在 Azure 中的企业应用程序下显示它们
- python - pywhatkit.sendwhatmsg_to_group 不工作
- android - 获取电池温度 [KOTLIN]
- video - 有没有办法在ffmpeg的过滤器中使用当前帧和总帧作为变量?
- php - 本地 Wordpress 安装正在从 Wordpress 管理仪表板上的 URL 中删除“wp-admin”
- ruby-on-rails - 如何调用javascript函数
- iphone - 在 iPhone 上全屏