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

无需事件监听器 调用Discord API向用户发送DM的方法

实现方案

Discord 频道Webhook本身不支持发送私信(DM),你不需要维持长连接、挂载事件监听器,直接调用Discord官方REST API即可完成DM发送,逻辑和普通POST接口调用完全一致。

前置准备

  • 前往Discord开发者门户创建应用与Bot账号,获取Bot的Token
  • 将Bot邀请进你和目标接收用户共同所在的服务器,给Bot分配基础的发送消息权限
  • 确认目标用户没有关闭「服务器成员可发送私信」的开关

实现逻辑

整个流程只需要两次普通HTTP POST请求,无需常驻进程、无需连接Discord网关:

  1. 调用创建DM会话接口,获取和目标用户的专属私信通道ID
  2. 调用通道消息发送接口,向拿到的私信通道推送消息内容

整个过程不需要启动Bot客户端、不需要维持WebSocket长连接,和你之前调用Webhook的使用逻辑完全一致,业务事件触发时直接执行对应请求即可

代码实现

直接用requests库即可实现,和你之前写Webhook调用的逻辑类似:

import requests

BOT_TOKEN = "替换为你的Bot Token"
TARGET_USER_ID = "替换为接收消息的用户Discord ID"

# 构造通用鉴权请求头
headers = {
    "Authorization": f"Bot {BOT_TOKEN}",
    "Content-Type": "application/json"
}

# 第一步:创建和目标用户的DM会话
dm_channel_resp = requests.post(
    "https://discord.com/api/v10/users/@me/channels",
    headers=headers,
    json={"recipient_id": TARGET_USER_ID}
)
dm_channel_resp.raise_for_status()
dm_channel_id = dm_channel_resp.json()["id"]

# 第二步:向DM通道发送消息
send_msg_resp = requests.post(
    f"https://discord.com/api/v10/channels/{dm_channel_id}/messages",
    headers=headers,
    json={"content": "Hello World,这是一条私信通知"}
)
send_msg_resp.raise_for_status()
print("私信发送成功")

注意事项

  • 你可以把创建DM通道拿到的dm_channel_id缓存起来,不用每次发消息都重新创建会话,减少接口调用次数
  • 接口调用需要遵守Discord的速率限制规则,短时间大量请求会被临时拦截
  • 如果接口返回403错误,优先检查Bot是否和目标用户在共同服务器、目标用户是否开放了服务器成员私信权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:57:15