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

如何在discord.py中实现获取发送给Bot的私信(DM)消息流功能

实现方案

discord.py 的 on_message 事件默认会接收所有 Bot 有权限查看的消息,包含公域频道消息、私信消息,你只需要新增判断筛选出私信类型的消息即可。

方案1:在原有 on_message 事件中新增过滤逻辑

你可以通过判断 message.guild 是否为 None 来识别私信消息:公域频道消息属于某个服务器,message.guild 会返回对应服务器对象,私信不属于任何服务器,该值为 None。
代码示例:

@client.event
async def on_message(message):
    # 过滤掉 Bot 自己发送的消息,避免循环触发
    if message.author == client.user:
        return
    # 筛选私信消息
    if message.guild is None:
        print(f"私信发送者: {message.author}")
        print(f"私信内容: {message.content}")
    # 原有公域消息的处理逻辑可以保留在下方
    # else:
    #     print(message.author)
    #     print(message.content)

方案2:使用专用的私信事件监听(discord.py v2.0+ 支持)

你也可以直接监听 on_private_message 事件,该事件只会在收到私信时触发:

@client.event
async def on_private_message(message):
    if message.author == client.user:
        return
    print(f"私信发送者: {message.author}")
    print(f"私信内容: {message.content}")

注意事项

  • 你需要在 Discord 开发者后台给 Bot 开启 Message Content Intent 权限,否则无法读取消息内容,不管是公域还是私信都不生效。
  • 代码里加 message.author == client.user 的判断是为了避免 Bot 响应自己发的消息,触发死循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 01:15:02