Discord(rewrite) Python - 角色和区分大小写

Discord(rewrite) Python - Roles and case sensitivity

      async def addrole(self, ctx, username: discord.Member, *, role):
            member = username
            rolename = discord.utils.get(ctx.guild.roles, name=role)
            await member.add_roles(rolename)
            await ctx.send(f"Successfully added {member} to {rolename}")

我一直在尝试制作一个简单的命令来将用户添加到不和谐服务器中的角色。我要解决的问题是区分大小写的问题。

我已经搜索了这个问题的答案,并且我已将 case_insensitive=True 添加到我的 bot = commands.etc。等),但这似乎对此不起作用 - 然后我尝试使用 .lower() 但我仍然无法将用户添加到该角色,除非大小写匹配。

If rolename = 普通会员 我希望能够使用 .addrole 用户 RegULAR MeMBER - 等等,而不考虑大小写样式。

我尝试做的替代方法是遍历所有角色,但这也不起作用,因为我无法将 r 迭代为更低。我最后的想法是使用 for 循环,将每次出现的内容转换为字典并使用 lower。我相信这可能会奏效,但我不得不想象有一种更有效的方法。

for r ctx.guild.roles
      if r.lower() == role.lower()

非常感谢任何帮助:)

您可以从 ctx.guild.roles 中创建一个字典,将降低的名称作为键,将原始名称作为值。

def convert_role(roles, role):
  roles_dict = {}
  for discord_role in roles:
    roles_dict[discord_role.lower()] = discord_role
  return roles_dict[role.lower()]

在您的主函数中使用该函数后

async def add_role(self, ctx, username: discord.Member, *, role):
  member = username
  role_name = convert_role(roles=ctx.guild.roles, role=role)
  await member.add_roles(role_name)
  await ctx.send(f"Successfully added {member} to {role_name }")

P.S.: 希望通过将 addrole 更改为 add_role

使您的函数名称更易于阅读