You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用bot.channels.get函数报错:Cannot read property 'get' of undefined求助

解决「Cannot read property 'get' of undefined」错误并发送测试消息

首先,咱们来拆解你遇到的问题,一步步帮你搞定:

错误的核心原因

  1. 变量名混淆:你创建的Discord机器人实例是bots(var bots = new bot.Client(...)),但你尝试访问的是bot.channels——这里的bot是你导入的discord.io模块本身,而不是你初始化的机器人客户端,模块自然没有channels属性,所以会抛出「Cannot read property 'get' of undefined」。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:23:23