我需要在命令中的角色中添加@

时间:2019-06-12 14:44:45

标签: discord.js

如果我使用这样的命令,那么它将不起作用: 角色@ Nick#0000 @角色 我该如何解决?

我尝试使用 message.mentions.members.first() ,但我认为我做错了

const Discord = require("discord.js");

module.exports.run = async (bot, message, args) => {

  if(!message.member.hasPermission("MANAGE_MEMBERS")) return message.reply();
  let rMember = message.guild.member(message.mentions.users.first()) || message.guild.members.get(args[0]);
  if(!rMember) return message.reply("nope.");
  let role = args.join(" @").slice(22);
  if(!role) return message.reply("nope!");
  let gRole = message.guild.roles.find(`name`, role);
  if(!gRole) return message.reply("nope.");
  if(rMember.roles.has(gRole.id)) return message.reply("nope.");
  await(rMember.removeRoles(['id', 'id']));
  await(rMember.addRole(gRole.id));

  try{
    await rMember.send(`nope ${gRole.name}!`)
  }catch(e){
  }
}

module.exports.help = {
  name: "role"
}

所以我现在没有任何结果。

1 个答案:

答案 0 :(得分:0)

免责声明::我是此答案中使用的npm软件包的作者。我将其包含在内,以介绍我​​看到的最简单,最简单的解决方案。这个答案无意以任何方式推广软件包本身。

要检查是否提及某个参数或字符串并提取成员/角色/渠道,可以使用discord-mentions

const getMention = require('discord-mentions');

try {
  if (!args[1]) return await message.reply('Please provide a user.');
  if (!args[2]) return await message.reply('Please provide a role.');

  let member;
  if (getMention(args[1])) member = getMention(args[1], message.guild).member;
  else member = message.guild.members.find(m => m.user.tag === args[1]);

  if (!member) return await message.reply('Invalid user.');

  let role;
  if (getMention(args[2])) role = getMention(args[2], message.guild).role;
  else role = message.guild.roles.find(r => r.name === args[2]);

  if (!role) return await message.reply('Invalid role.');

  // Continue on... 'member' is a GuildMember, 'role' is a Role.
} catch(err) {
  console.error(err);
}