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

如何接收Discord DMChannel中用户发送的消息?

获取DM频道中用户的消息并打印

一、批量拉取历史消息

在你创建DM并发送通知后,直接调用DM频道的history()方法就能获取已有的消息,遍历后筛选出用户发送的内容打印:

在await dm.send(embed=embed)之后添加这段代码:

# 拉取DM频道内最多100条消息(可修改limit值,设为None则获取全部)
async for msg in dm.history(limit=100):
    # 只打印目标用户发的消息,排除机器人自己的消息
    if msg.author == user:
        print(f"用户消息:{msg.content}")

二、实时监听新消息

如果需要实时获取用户后续发送的消息,分两种场景:

场景1:只等用户下一条消息

适合单次交互的场景,在创建DM后用wait_for等待:

import asyncio

try:
    # 等待用户在这个DM里发消息,超时时间设为10分钟(600秒)
    msg = await aclient.wait_for(
        'message',
        timeout=600,
        check=lambda m: m.channel == dm and m.author == user
    )
    print(f"用户实时消息:{msg.content}")
except asyncio.TimeoutError:
    print("等待用户消息超时")

注意:如果是在按钮交互里使用,记得先给交互发送响应(比如await interaction.response.send_message("已创建工单,请注意查收DM")),避免交互超时。

场景2:持续监听该用户的所有DM消息

如果要长期监听这个用户的DM,在你的客户端代码里加全局消息监听事件:

@aclient.event
async def on_message(message):
    # 判断消息是否是目标用户的DM
    if isinstance(message.channel, discord.DMChannel) and message.author.id == user.id:
        print(f"用户DM消息:{message.content}")
    # 如果你用了命令框架,别忘处理命令
    await aclient.process_commands(message)

关键注意点

  • 确保机器人开启了message_content权限:在Discord开发者平台的Bot设置里开启该权限,并且邀请机器人时带上这个权限。
  • 拉取历史消息时,limit不要盲目设为None,否则可能触发Discord的速率限制,建议按需设置数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:59:59