【问题标题】:How Do I Add Roles via Discord.js?如何通过 Discord.js 添加角色?
【发布时间】:2020-12-26 06:57:17
【问题描述】:

我目前正在通过 Discord.js 创建一个机器人,我希望有人能够发出命令以获得角色。但是,我一生都无法弄清楚这一点。 在我的 bot 文件夹中,我使用以下代码块创建了一个 addrole.js 文件:

const Discord = require("discord.js");
const roles = message.guild.roles.cache.map((role) => role);
const member = message.mentions.members.first();
const role = message.mentions.roles.first();
const colours = require("../colours.json");

module.exports.run = async (bot, message, args) => {
  if (!message.member.hasPermission(["MANAGE_ROLES", "ADMINISTRATOR"]))
    return message.channel.send(
      "Sorry, frog lover! :disappointed: :broken_heart: You don't have permission to perform this command!"
    );

  let rMember =
    message.mentions.members.first ||
    message.guild.members.cache.find((m) => m.user.tag === args[0]) ||
    message.guild.members;
  let role =
    message.guild.roles.cache.find((r) => r.name == args[1]) ||
    message.guild.roles.cache.find((r) => r.id == args[1]) ||
    message.mentions.roles.first();
  if (!role)
    return message.channel.send(
      "Which role do I give to this user, frog lover? :point_right: :point_left:"
    );

  if (!message.guild.me.hasPermission(["MANAGE_ROLES", "ADMINISTRATOR"]))
    return message.channel.send(
      "Sorry, friend :broken_heart: :shrug: I don't have permission to perform this command!"
    );

  if (rMember.roles.has(role.id)) {
    return message.channel.send(
      `$rMember.displayName), already has this role!`
    );
  } else {
    await rMember.roles.add(role.id).catch((e) => console.log(e.message));
    message.channel.send(
      `The role ${role.name} has been added to ${rMember.displayName}.`
    );
  }

  let embed = new Discord.RichEmbed()
    .setColor(colours.redlight)
    .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL)
    .addField("Moderation:", "Addrole")
    .addField("Mutee:", rMember.user.username)
    .addField("Reason:", reason)
    .addField("Date:", message.createdAt.toLocaleString());

  letsChannel = message.guild.channels.cache.find(
    (c) => c.name === "beans-the-frog"
  );
  sChannel.send(embedVariable);
};

module.exports.config = {
  name: "addrole",
  description: "Adds a role to a member of the guild!",
  usage: "beans addrole",
  accessableby: "Moderators",
  aliases: ["ar", "roleadd"],
};

我按照这个教程到达这里:https://www.youtube.com/watch?v=GCSbZ2UbriU

我已授予我的机器人 Manage_Roles 权限,并尝试同时声明“beans addrole (role) (user)”和“beans addrole (user) (role)”。我希望他甚至指定错误消息,或者更好的是,添加角色。但是,他甚至没有吐出错误消息,我的控制台也没有。其他一切正常,只是这个特定功能不起作用。任何输入/反馈都会有很大帮助。

【问题讨论】:

标签: javascript node.js discord discord.js


【解决方案1】:

你的问题主要体现在这几行:-

const roles = message.guild.roles.cache.map((role) => role);
const member = message.mentions.members.first();
const role = message.mentions.roles.first();

出现问题是因为在定义函数之前未定义 message。尝试在 run 函数中移动代码。

【讨论】:

    【解决方案2】:
    if (rMember.roles.cache.has(role.id)) {
        return message.channel.send(
            `$rMember.displayName), already has this role!`
        );
    } else {
        await rMember.roles.add(role.id).catch((e) => console.log(e));
        message.channel.send(
            `The role ${role.name} has been added to ${rMember.displayName}.`
        );
    }
    

    我使用这个 sn-p 让我的机器人添加角色。感谢上面的用户。我不得不添加缓存。在第一行。

    【讨论】:

      【解决方案3】:

      我在您的代码中发现了很多拼写错误,而且由于您将discord.js^11.xdiscord.js^12.x 混合在一起,所以它也存在一些问题。我在下面修复了您的代码,但请确保您的机器人具有您的命令所需的 ADMINISTRATOR 权限。

      const Discord = require("discord.js");
      // You defined the 3 lines here twice, which requires `message` to be defined.
      const colours = require("../colours.json");
      
      module.exports.run = async (bot, message, args) => {
        // `Member.hasPermissions()` is deprecated
        if (!message.member.permissions.has(["MANAGE_ROLES", "ADMINISTRATOR"]))
          return message.channel.send(
            "Sorry, frog lover! :disappointed: :broken_heart: You don't have permission to perform this command!"
          );
      
      
        let rMember =
          message.mentions.members.first() || // `.first()` is a function.
          message.guild.members.cache.find((m) => m.user.tag === args[0]) ||
          message.guild.members;
        let role =
          message.guild.roles.cache.find((r) => r.name == args[1]) ||
          message.guild.roles.cache.find((r) => r.id == args[1]) ||
          message.mentions.roles.first();
        if (!role)
          return message.channel.send(
            "Which role do I give to this user, frog lover? :point_right: :point_left:"
          );
      
        if (!message.guild.me.hasPermission(["MANAGE_ROLES", "ADMINISTRATOR"]))
          return message.channel.send(
            "Sorry, friend :broken_heart: :shrug: I don't have permission to perform this command!"
          );
      
        if (rMember.roles.has(role.id)) {
          return message.channel.send(
            `$rMember.displayName), already has this role!`
          );
        } else {
          await rMember.roles.add(role.id).catch((e) => console.log(e));
          message.channel.send(
            `The role ${role.name} has been added to ${rMember.displayName}.`
          );
        }
      
        let embed = new Discord.MessageEmbed()
          .setColor(colours.redlight)
          .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL())
          .addField("Moderation:", "Addrole")
          .addField("Mute:", rMember.user.username)
          .addField("Reason:", reason)
          .addField("Date:", message.createdAt); // `.toLocaleString()` isn't required, discord automatically coonverts it to string.
      
        let sChannel = message.guild.channels.cache.find(
          (c) => c.name === "beans-the-frog"
        );
        sChannel.send(embedVariable);
      };
      
      module.exports.config = {
        name: "addrole",
        description: "Adds a role to a member of the guild!",
        usage: "beans addrole",
        accessableby: "Moderators",
        aliases: ["ar", "roleadd"],
      };
      

      要了解更多信息,请尝试访问以下链接:

      【讨论】:

        猜你喜欢
        • 2021-05-03
        • 2021-04-10
        • 2021-01-28
        • 2021-08-02
        • 2020-11-30
        • 2023-03-15
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        相关资源
        最近更新 更多