繁体   English   中英

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}")

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

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

如果 rolename = Regular Member 我希望能够使用.addrole user RegULAR MeMBER - 等等,无论大小写风格如何。

我尝试做的替代方法是遍历所有角色,但这也不起作用,因为我无法将 r 迭代为更低。 我最后的想法是使用 for 循环,将每个出现的事件转换为 dict 并使用 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()]

在您的主 function 中使用 function 后

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 }")

PS:最好通过将 addrole 更改为addrole来使您的add_role的名称更易于阅读

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM