如何在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
相关产品推荐
相关产品推荐

