如何制作可@指定用户的Discord机器人?
解决Discord机器人无法@指定用户的问题
你当前代码里直接写@Someone只是普通文本,Discord不会把它识别为有效的@用户指令,所以没法触发@提醒。下面给几种实用的实现方式:
1. @发送指令的用户
如果要@触发这条命令的用户,直接用消息对象里的用户属性就行:
if message.channel.name == "general": if user_message.lower() == "do it jeff": await message.channel.send(f"My name is Jeff {message.author.mention}") return
message.author.mention会自动生成Discord能识别的@格式,直接@发消息的人。
2. @固定ID的指定用户
要是你想固定@某一个特定用户,先右键该用户复制ID(得先开启Discord的开发者模式),然后用下面的代码:
# 把这里的数字换成目标用户的真实ID target_user_id = 123456789012345678 if message.channel.name == "general": if user_message.lower() == "do it jeff": target_user = message.guild.get_member(target_user_id) if target_user: await message.channel.send(f"My name is Jeff {target_user.mention}") else: await message.channel.send("目标用户不在当前服务器里") return
先获取服务器里的成员对象,确认用户在服务器内,再用.mention生成@格式。
3. 通过用户名查找并@用户
如果想通过用户名(比如"Someone")匹配用户并@,可以这么写:
target_username = "Someone" if message.channel.name == "general": if user_message.lower() == "do it jeff": # 遍历服务器成员找匹配的用户名 target_user = next((member for member in message.guild.members if member.name == target_username), None) if target_user: await message.channel.send(f"My name is Jeff {target_user.mention}") else: await message.channel.send(f"找不到用户{target_username}") return
注意如果服务器里有同名用户,只会匹配第一个找到的。
内容的提问来源于stack exchange,提问作者Ozakir
相关产品推荐
相关产品推荐

