[英]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.