首页 > 解决方案 > 为什么我在 Discord.js 中尝试获得公会时得到未定义?

问题描述

我对使用 Discord 机器人还很陌生,但我正在尝试为 Discord 创建一个机器人,让所有成员都加入一个公会,以便以后可以使用它们。但是每次我尝试用它的 ID 获取公会时,它都会返回一个未定义的结果,即使我知道我输入了正确的 ID。

const Discord = require("discord.js");
const client = new Discord.Client();
const members = client.guilds.cache.get("guildID");

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', msg => {
    console.log(members);
});

client.login('token');

难道我做错了什么?

标签: javascriptdiscord.js

解决方案


你说的不是很清楚。你说你希望你的机器人让所有成员加入一个公会,但你却继续获得一个公会 ID。

假设您想让所有成员加入公会。您需要的第一件事是在您的机器人中启用并在您的代码中实现的特权网关意图。

第 1 步:启用 Intent

  1. 转到您的Bot App Dev
  2. 选择你的机器人
  3. 前往Bot机器人部分并向下滚动,直到看到“Privileged Gateway Intents”并选择“PRESENCE INTENT”和“SERVER MEMBERS INTENT”

例子

图片

第 2 步:在代码中实现

const Discord = require('discord.js');
const client = new Discord.Client({ ws: { intents: new Discord.Intents(Discord.Intents.ALL) }});
                                          ^^^^^^^
                             This is what is making you access all server members within a guild

获取所有服务器成员的代码:

// If prefix not set: do this: const prefix = "!"; whatever you want
const prefix = "!";
// Usernames
const members = message.guild.members.cache.map(member => member.user.tag);
// ID's
const members = message.guild.members.cache.map(member => member.user.id);

if(message.content.startsWith(prefix + "test")){ // Gets all members usernames within the guild this message was sent on.
console.log(members) // Logs all each members username
}

深入,但我希望它有所帮助。


推荐阅读