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

如何用Discord Bot向用户发消息?需配置哪些网关意图?

问题解答:内部触发Discord Bot发私信的网关意图配置

核心结论

仅通过内部函数调用主动给用户发送私信,不需要配置任何网关意图。

原因说明

网关意图的作用是让Bot接收Discord推送的服务器/用户事件(比如新消息通知、成员加入),而主动调用users.fetch获取用户、user.send发送消息属于REST API请求,不需要依赖网关的事件监听能力,因此无需配置任何意图。

你的代码问题及修正

你的代码存在一个关键问题:每次调用sendMessage都执行client.login(),这会导致重复登录,引发连接冲突,是消息发送失败的主要原因之一。以下是修正后的代码:

const { Client } = require('discord.js');

// 初始化客户端,无需配置任何网关意图
const client = new Client({ intents: [] });

// 仅执行一次登录操作,确保Bot处于在线状态
client.login('你的Bot令牌')
  .then(() => console.log('Bot登录成功'))
  .catch(err => console.error('登录失败:', err));

async function sendMessage(page, messageURL) {
  const userID = '644643045622415366';
  
  try {
    // 等待Bot完全登录就绪
    if (!client.isReady()) {
      await new Promise(resolve => client.once('ready', resolve));
    }
    
    // 获取目标用户
    const user = await client.users.fetch(userID);
    // 发送私信
    await user.send(messageURL);
    console.log('消息发送成功');
  } catch (err) {
    console.error('发送消息失败:', err);
  }
}

额外注意事项

  • 互动权限限制:Discord不允许Bot主动给从未互动过的用户发私信。必须满足以下条件之一:
    • 用户之前给Bot发过私信
    • Bot和用户在同一个服务器(且Bot有权限查看该用户)
  • 令牌正确性:确保使用的是Bot的有效令牌,而非用户账号令牌
  • 避免重复登录:登录操作只需执行一次,重复登录会断开现有连接,导致功能不稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:06:12