JS Discord 机器人获取角色

JS Discord Bot Get Role

我想在不使用消息的情况下获得一个角色,例如:

     const Discord = require('discord.js');
     const Bot = new Discord.Client();
     const Role = Discord.roles.find('name,'Exemple')

     Role.delete()

这样可以吗?

是的,你可以,但你需要有你想从中获得角色的公会 ID。另外,您应该将该部分放在 ready 事件中。

const discord = require("discord.js");
const client = new discord.Client();

client.on("ready", () => {
    console.log("Bot online!");
    const guild = client.guilds.get("The_server_id");
    const role = guild.roles.find("name", "Your_role_name");

    console.log(`Found the role ${role.name}`);
})

除非您在服务器上设置公会,否则公会无法使用。人们一直建议这样做,但您必须已经在您的 discord 服务器中设置了基础设施。

顺便说一句,Discord.JS 中 Collection#find("key", "value") 的使用方式已被弃用, 您应该改用 Collection#find(Obj => Obj.key == "value")

我尝试使用已发布的解决方案,但 client.guilds.get 未被识别为函数:

UnhandledPromiseRejectionWarning: TypeError: client.guilds.get is not a function at Client.

检查 client.guilds 的内容我发现 'cache' 对象:

GuildManager {
  cacheType: [Function: Collection],
  cache: Collection [Map] {
    '<discord server id>' => Guild {
      members: [GuildMemberManager],
      channels: [GuildChannelManager],
      (...)
     }
  }
}

解决方案是:

const Discord = require('discord.js');
const client = new Discord.Client();

client.once('ready', () => {
    const myGuild = client.guilds.cache.get('<discord server id>');
    const myRole = myGuild.roles.cache.find(role => role.name === '<role name>');
    console.log(`Found the role ${myRole.name}`);
});

const role = guild.roles.cache.get('role_id');

这似乎适用于最新的 API 版本。

为了获得特定角色,我使用此代码。 将 SERVER_ID 替换为您的服务器 ID,将 ROLE_NAME 替换为角色名称

const guild = client.guilds.cache.get("SERVER_ID");
const role = guild.roles.cache.find((r) => r.name === "ROLE_NAME");

console.log(`Found the role ${role.name}`);
console.log(`Found the role ${role.id}`);