创建Discord机器人时触发TypeError:无法读取undefined的GUILDS属性
Discord机器人报错:TypeError: Cannot read properties of undefined (reading 'GUILDS') 解决方法
问题描述
我正在开发一个可将数据发送至Airtable的Discord机器人,该机器人会在用户加入服务器时发送用户信息。运行代码时持续报错:
TypeError: Cannot read properties of undefined (reading 'GUILDS')at Object.
原代码如下:
const { Intents } = require('discord.js'); const Discord = require('discord.js'); const Airtable = require('airtable'); const client = new Discord.Client({ token: 'TOKEN_ID', intents: [Intents.GUILDS, Intents.GUILD_MEMBERS] }); Airtable.configure({ apiKey: 'API_KEY' }); const base = Airtable.base('BASE_ID'); client.on('guildMemberAdd', member => { base('New Members').create({ 'Username': member.user.username, 'Time Joined': new Date().toISOString() }, function(err, record) { if (err) { console.error(err); return; } console.log(`Added new record with ID ${record.getId()}`); }); }); client.login();
错误原因
- Discord.js v14版本中,
Intents的访问方式变更,不再支持Intents.GUILDS这种写法,需改用GatewayIntentBits来获取意图标识。 - 创建
Client实例时,配置对象不能直接传入token,token必须放在client.login()方法中作为参数传入。 GUILD_MEMBERS意图属于特权网关意图,需要在Discord开发者后台手动开启,否则机器人无法触发guildMemberAdd事件。
修复后的代码
const { Client, GatewayIntentBits } = require('discord.js'); const Airtable = require('airtable'); // 初始化Discord客户端 const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers ] }); Airtable.configure({ apiKey: 'API_KEY' }); const base = Airtable.base('BASE_ID'); client.on('guildMemberAdd', member => { base('New Members').create({ 'Username': member.user.username, 'Time Joined': new Date().toISOString() }, function(err, record) { if (err) { console.error(err); return; } console.log(`Added new record with ID ${record.getId()}`); }); }); // 传入机器人token完成登录 client.login('TOKEN_ID');
必要操作
- 打开Discord开发者门户,找到你的机器人应用,进入「Privileged Gateway Intents」页面,开启
Server Members Intent权限。 - 确保Discord.js版本为v14及以上,若版本过低,执行命令更新:
npm install discord.js@latest
内容的提问来源于stack exchange,提问作者Manuelmaccou
相关产品推荐
相关产品推荐

