【问题标题】:Adding/Removing Roles is not working (sometimes)添加/删除角色不起作用(有时)
【发布时间】:2019-06-12 17:48:05
【问题描述】:

在某些 Discord 服务器上,我的代码用于添加/删除角色,但在某些服务器上却没有。我检查了一下,他们都有正确的权限,所以我有点难过。

每当我运行 >addrole>removerole 命令时,我总是会收到相同的 Discord 错误消息。它是 ":x: 找不到静音角色。请确保您没有打错字(角色也区分大小写!)"。当用户在输入他们想要添加的角色时出现拼写错误时,我将其设置为。

命令格式如下:

addrole [@User] [RoleName] removerole [@User] [RoleName]

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

exports.run = async(bot, message, args) => {
  if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send(":x: Insufficient permission.").then(msg => msg.delete(4000));
  let rolemember = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
  if (!rolemember) return message.channel.send(":x: Could not find user.").then(msg => msg.delete(4000));
  let role = args.join(" ").slice(22);

  if (!role) return mesage.reply(":x: Specify a role.");
  let gRole = message.guild.roles.find(`name`, role);
  if (!gRole) return message.channel.send(":x: Couldn't find mute role. Make sure you didn't make a typo (roles are case-sensitive too!)");

  if (!rolemember.roles.has(gRole.id)) return message.channel.send(`:x: User does not have role "${gRole.name}".`).then(msg => msg.delete(4000));
  await (rolemember.removeRole(gRole.id));

  try {
    rolemember.send(`:white_check_mark: Your role "${gRole.name}" in`, message.guild.name, "has been removed :confused:.");
  } catch (e) {
    message.channel.send(`:white_check_mark: ${rolemember} Your role "${gRole.name}" has been removed :confused:.`);
  }
  let removeroleEmbed = new Discord.RichEmbed()
    .setDescription("Role Changes")
    .setColor("RANDOM")
    .addField("Role Removed", gRole)
    .addField("Removed From", rolemember)
    .addField("Removed By", message.author);

  let logChannel = message.guild.channels.find(`name`, "logs-reports");
  if (!logChannel) return message.channel.send(":x: Couldn't find logs channel.").then(msg => msg.delete(4000));
  logChannel.send(removeroleEmbed);
}

exports.help = {
  name: "removerole"
}

我希望应该添加该角色,但事实并非如此,而且我每次都会收到相同的错误消息。

【问题讨论】:

  • 您能否分享一下输入不和谐命令时的样子。例如:“!removerole ...”
  • 完成。格式现在显示在帖子开头附近。
  • args 的值是多少?尝试在let role = args.join(" ").slice(22); 之后记录role 的值,看看是否正确。

标签: javascript discord discord.js


【解决方案1】:

.find('name', 'name') 已弃用。您使用的那个东西可能不起作用.. 相反,使用let gRole = message.guild.roles.find(r => r.name === role)。我是这个社区的新手。所以,如果我做错了什么,请多多包涵。

尝试替换 let gRole = message.guild.roles.find("name", role); with let gRole = message.guild.roles.find(r => r.name === role) 这应该可以工作,因为它应该是这样的,抱歉我不太擅长解释

注意: Collection.find() 并未完全弃用,只是格式 Collection.find("name", "yourName") 已弃用!

【讨论】:

  • 我不认为Collection.find() 已被弃用?可能是错的,但请参阅heremessage.guild.roles.find(r => r[a] === role) 应该与 message.guild.roles.find(a, role) 相同
  • 等等,我不明白这如何为我提供了一种方法来引用代码中找到的角色。你能解释一下吗?
  • Collection.find() 并未完全弃用:将其与属性和值一起使用的方式(例如:Collection.find("name", "yourNameHere"))已弃用。话虽如此,使用它的 wya 仍然有效,因此它不能成为代码中任何错误的根源。您会注意到的唯一一件事是它在控制台中记录了 DeprecationWarning
  • 是的,Collection.find() 并未完全弃用。只有Collection.find("name", "yourNameHere") 是。尝试将let gRole = message.guild.roles.find("name", role); 替换为let gRole = message.guild.roles.find(r => r.name === role) 这应该可以,因为它应该是这样的,抱歉我不太擅长解释。
  • @freddyrobinson 是的,Collection.find() 没有被弃用。如果您正确阅读了我的答案。仅不推荐使用 Collection.find("name", "yourName") 格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 2020-07-13
  • 2022-10-24
  • 2014-10-22
相关资源
最近更新 更多