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

Discord.js机器人运行卡住求助(JavaScript)

Discord.js 机器人运行后卡住无法正常工作的解决方法

你的代码存在核心逻辑错误,导致机器人运行后看似卡住,实际是静默失败:在客户端完成登录和缓存加载前,就尝试获取频道对象。

client.channels.cache.get()在client.login()执行前调用时,客户端还未连接到Discord服务器,频道缓存是空的,channel变量会是undefined。后续setInterval里调用channel.send()时,因为没有错误处理,程序不会报错但也无法执行发送操作,看起来就像卡住了。

修复步骤

  1. 将频道获取、定时任务的逻辑移到客户端的ready事件回调中,确保客户端完全就绪、缓存加载完成后再执行这些操作。
  2. 添加错误处理,捕获发送消息时的异常,方便排查后续可能出现的问题。

修复后的完整代码

const { Client } = require("discord.js");
const client = new Client({ intents: [32767] });
const prefix = "!";

// 监听客户端就绪事件
client.on('ready', () => {
    console.log(`已登录为 ${client.user.tag}`);
    
    // 此时缓存已加载,可正常获取频道
    const channel = client.channels.cache.get('你的频道ID');
    if (!channel) {
        console.error('无法找到指定频道,请检查频道ID是否正确或机器人是否有权限访问该频道');
        return;
    }

    const phrases = [
        "你的短语1",
        "你的短语2"
    ];

    // 设置定时发送任务
    setInterval(async () => {
        try {
            const randomPhrase = phrases[Math.floor(Math.random() * phrases.length)];
            await channel.send(randomPhrase);
            console.log(`已发送消息: ${randomPhrase}`);
        } catch (error) {
            console.error('发送消息时出错:', error);
        }
    }, 10800000); // 每3小时发送一次(单位:毫秒)
});

client.login("你的机器人令牌");

关键改动说明

  • client.on('ready', ...):只有当机器人成功登录Discord、所有必要缓存加载完成后,才会执行回调内的代码,这时候client.channels.cache才包含有效数据。
  • 增加了频道存在性检查:如果频道ID错误或机器人无权限访问,会直接在控制台输出错误提示,避免后续无意义的执行。
  • 添加try/catch包裹channel.send():捕获发送消息时的异常(比如机器人被禁言、频道已删除等),并输出错误信息,方便快速定位问题。

内容的提问来源于stack exchange,提问作者W A L M A R T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:42:44