使用bot.channels.get函数报错:Cannot read property 'get' of undefined求助
解决「Cannot read property 'get' of undefined」错误并发送测试消息
首先,咱们来拆解你遇到的问题,一步步帮你搞定:
错误的核心原因
- 变量名混淆:你创建的Discord机器人实例是
bots(var bots = new bot.Client(...)),但你尝试访问的是bot.channels——这里的bot是你导入的discord.io模块本身,而不是你初始化的机器人客户端,模块自然没有channels属性,所以会抛出「Cannot read property 'get' of undefined」。 - API使用错误:
discord.io的API和你可能见过的discord.js不一样,它没有channels.get()方法,也没有channel.send()方法;而且机器人需要完成连接、就绪后才能访问频道数据,不能在代码最外层直接获取频道。
修正后的代码示例
我帮你调整了代码,解决了这些问题,同时保留你原本的逻辑:
const DiscordIO = require('discord.io'); var logger = require('winston'); var auth = require('./auth.json'); const fs = require('fs'); var testfile = require('./testfile.txt') // 初始化机器人客户端,统一变量名为bot,避免和模块名混淆 var bot = new DiscordIO.Client({ token: auth.token, // 建议用auth里的token,不要硬编码 autorun: true }); // 监听机器人就绪事件——只有当机器人成功连接到Discord后,才能操作频道 bot.on('ready', function() { logger.info('机器人已就绪!'); const channelId = '[你的频道ID]'; // discord.io发送消息的方式是直接调用sendMessage,指定目标频道ID和消息内容 bot.sendMessage({ to: channelId, message: '这是一条测试消息!' }, function(err, res) { // 可选:处理发送结果,方便排查问题 if (err) { logger.error('发送消息失败:', err); } else { logger.info('消息发送成功!'); } }); }); // 可选:监听错误事件,快速定位连接或操作问题 bot.on('error', function(err) { logger.error(err); });
关键说明
- 变量名统一:把机器人实例的变量名改成
bot,同时把导入的模块改名为DiscordIO,彻底避免混淆。 - 等待就绪事件:必须在
ready事件回调里操作频道,因为机器人需要时间和Discord服务器建立连接、加载频道数据,提前操作会拿不到有效数据。 - 正确的消息发送方式:
discord.io使用bot.sendMessage()方法,参数是一个包含to(频道ID)和message(消息内容)的对象,还可以加回调函数处理发送结果。
如果之后你想切换到更流行、文档更完善的discord.js,那你原始思路里的channels.get() + channel.send()是完全可行的,但目前用discord.io就得遵循它的API规则哦。
内容的提问来源于stack exchange,提问作者Gridzbi Spudvetch
相关产品推荐
相关产品推荐

