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

