我正在制作一个我在这个youtube video上看到的机器人这是我写的代码
@client.event
async def on_raw_reaction_add(payload):
message_id = payload.message_id
if message_id == [message id]:
guild_id = payload.guild_id
guild = discord.utils.find(lambda g :g.id == guild_id, client.guilds)
role = discord.utils.get(guild.roles, name=payload.emoji.name)
if role is not None:
member_user = discord.utils.find(lambda m : m.id == payload.member.id, guild.members)
if member_user is not None:
await member_user.add_roles(role)
print("Done")
else:
print("Member not Found")
print(member_user)
else:
print("Role not Found")但每次我做出反应时,控制台都会给我Member not Found和用户ID None。我是不是在获取用户ID方面做错了什么?或者问题完全出在别的地方?
第一次在python btw中编写任何代码。提前感谢:)
发布于 2021-01-27 20:43:57
如果你没有正确地设置你的Intents,你就不能使用guild.members,看起来你遵循的是过时的YouTube教程,我想你还没有。
创建commands.Bot实例时,传入intents,并启用members intent:
intents = discord.Intents.default()
intents.members = True
client = commands.Bot(command_prefix=..., intents=intents)之后,在机器人的仪表板上启用它们。有关如何执行此操作的信息,请参阅文档:https://discordpy.readthedocs.io/en/latest/intents.html#privileged-intents
发布于 2021-01-27 20:19:51
我们这样做是为了根据用户对欢迎消息的反应为他们分配一个角色。你可以试一下,看看它是否也适用于你的情况。
@bot.event
async def on_raw_reaction_add(payload):
guild = bot.get_guild(payload.guild_id)
rolesDict = {role.name : role for role in guild.roles}
member = guild.get_member(payload.user_id)
user = bot.get_user(payload.user_id)
if(payload.message_id == 769218692948295721):
for roleName in ["Role1", "Role2", "Role3"]:
await member.remove_roles(rolesDict.get(roleName))
if(str(payload.emoji) == "\U0001F986"):
role = rolesDict.get("Role1")
await member.add_roles(role)
elif(str(payload.emoji) == "?"):
role = rolesDict.get("Role2")
await member.add_roles(role)
elif(str(payload.emoji) == "?"):
role = rolesDict.get("Role3")
await member.add_roles(role)https://stackoverflow.com/questions/65918818
复制相似问题