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


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.etc中添加了case_incitise=True(,但这似乎不起作用——然后我尝试使用.lower((,但除非大小写匹配,否则我仍然无法将用户添加到角色中。

如果rolename=常规成员无论大小写风格如何,我都希望能够使用.addrole用户RegULAR MeMBER等。

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

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

非常感谢您的帮助:(

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

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

附言:最好将addrole更改为add_role,使函数名称更易于阅读

最新更新