You need to enable JavaScript to run this app. Discord.js 机器人上线时如何在所有已加入服务器发送启动消息?
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js 机器人上线时如何在所有已加入服务器发送启动消息?

实现Discord机器人启动时全服务器同步版本更新日志的方案

现有代码的核心问题

  • 事件触发逻辑完全偏离需求:原有代码将推送逻辑绑定在message事件下,既不符合discord.js的事件绑定语法规范,也无法实现“机器人启动初始化完成、切换为在线状态时自动触发推送”的核心目标
  • 流程缺失:没有遍历机器人已加入所有服务器的逻辑,无法满足多服务器同步推送的要求
  • 语法错误:原有发送内容的字符串未正确闭合,直接运行会触发脚本报错

正确实现逻辑

  • 选用匹配需求的触发事件:使用discord.js内置的ready事件作为推送触发源,该事件会在机器人完成全量网关连接、资源加载、状态切换为在线时自动执行
  • 全量遍历接入服务器:通过客户端实例的guilds.cache属性获取当前所有已加入的公会列表
  • 权限适配:为每个服务器自动匹配具备发送权限的可推送频道(优先选择服务器自带的系统频道),规避权限不足导致的推送失败
  • 结构化推送内容:将版本基础信息、新增指令、移除指令、节点运行数据整合为统一格式的通知文本

可直接复用的示例代码

const { Client, GatewayIntentBits } = require('discord.js');
// 初始化客户端,加载运行必需的权限意图
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages
  ]
});

// 绑定机器人就绪触发事件
client.on('ready', async () => {
  // 组装更新日志通知内容
  const updateNotice = `
Bot Name: My Bot
Bot Version: 1.0.0
Owner: Rega!
---
本次版本更新内容:
[新增指令]
- /help 全量指令查询入口
- /ping 机器人响应延迟检测
[移除指令]
- 临时测试版 /echo 调试指令
配套运行数据:当前节点平均指令响应延迟210ms,内存占用126MB
  `;

  // 逐服务器执行推送
  for (const guild of client.guilds.cache.values()) {
    try {
      // 获取服务器默认系统频道
      const targetChannel = guild.systemChannel;
      // 跳过无目标频道的服务器
      if (!targetChannel) continue;
      // 校验机器人在当前频道的发送权限
      const sendPermission = targetChannel.permissionsFor(guild.members.me)?.has('SendMessages');
      if (!sendPermission) continue;
      // 发送更新通知
      await targetChannel.send(updateNotice);
    } catch (err) {
      console.log(`${guild.name} 推送失败:${err.message}`);
    }
  }
});

// 执行机器人登录
client.login('你的机器人鉴权Token');

内容的提问来源于stack exchange,提问作者Chaturya inc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 02:36:03