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

Python开发Discord机器人如何提取Warn命令后的@用户信息

首先,discord.py 中的 message.content 本身就是字符串类型,不需要额外做格式转换,你要提取@的用户可以参考以下两种实现方案:

方案1:切除前缀提取提及内容

如果你仅需要拿到原始的<@用户ID>格式的字符串,可以直接用字符串切片或removeprefix方法实现前缀移除:

if message.content.startswith('Warn '):
    # 方法1:字符串切片,切掉长度为5的'Warn '前缀
    mentioned_content = message.content[5:]
    # 方法2:Python 3.9及以上版本可用的removeprefix方法,可读性更高
    mentioned_content = message.content.removeprefix('Warn ')

以上代码就能拿到你需要的被@用户的字符串内容。如果你后续要给用户发送私信,更推荐使用discord.py内置的提及对象解析功能,不需要自己手动处理字符串。

方案2:直接获取被@的用户对象(更推荐)

discord.py已经默认帮你解析了消息中的提及内容,直接调用message.mentions属性即可拿到被@的用户对象列表,不需要自己做字符串解析:

import discord

# ... 你的机器人初始化代码

if message.content.startswith('Warn '):
    # 先校验是否有@的用户
    if not message.mentions:
        await message.channel.send("请在指令后@你要警告的用户")
        return
    # 取第一个被@的用户作为警告对象
    target_user = message.mentions[0]
    # 发送私信逻辑
    try:
        await target_user.send("你收到了一条来自服务器的警告,请遵守服务器规则")
        await message.channel.send(f"已成功向 {target_user.mention} 发送警告私信")
    except discord.Forbidden:
        await message.channel.send(f"无法向 {target_user.mention} 发送私信,对方可能关闭了陌生人私信权限")

这种方案不需要处理字符串,也能避免用户输入格式错误导致的解析异常,稳定性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:54:03