首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Discord.py机器人,当用户添加反应时分配角色

Discord.py机器人,当用户添加反应时分配角色
EN

Stack Overflow用户
提问于 2021-01-27 20:05:58
回答 2查看 90关注 0票数 1

我正在制作一个我在这个youtube video上看到的机器人这是我写的代码

代码语言:javascript
运行
复制
@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中编写任何代码。提前感谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-27 20:43:57

如果你没有正确地设置你的Intents,你就不能使用guild.members,看起来你遵循的是过时的YouTube教程,我想你还没有。

创建commands.Bot实例时,传入intents,并启用members intent:

代码语言:javascript
运行
复制
intents = discord.Intents.default()
intents.members = True
client = commands.Bot(command_prefix=..., intents=intents)

之后,在机器人的仪表板上启用它们。有关如何执行此操作的信息,请参阅文档:https://discordpy.readthedocs.io/en/latest/intents.html#privileged-intents

票数 1
EN

Stack Overflow用户

发布于 2021-01-27 20:19:51

我们这样做是为了根据用户对欢迎消息的反应为他们分配一个角色。你可以试一下,看看它是否也适用于你的情况。

代码语言:javascript
运行
复制
    @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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65918818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档