使用 lower() 进行不区分大小写的字典检查
Case-insensitive dictionary check with lower()
我正在尝试使用 lower()
,因此角色名称不区分大小写。因此,如果用户键入 lol
而不是 LoL
,它将不会通过 if 语句 if not role_id:
我就是这样做的:
@commands.command()
@commands.check(lambda ctx: ctx.channel.id in [555844758778544160])
async def add(self, ctx, *, rolename):
author = ctx.message.author
role_dict = {
"Members":557212810468392970,
"PS4":568761643916328960,
"LoL":559792606364565505}
role_id = role_dict.get(rolename.lower())
if not role_id:
await ctx.send("I cannot find the role {}.".format(rolename))
return
role = discord.utils.get(ctx.message.guild.roles, id = role_id)
message = '{} added the role **{}**'.format(author.display_name, role.name)
embed = discord.Embed(description=message.format(author.display_name, role.name), colour=0xff0000)
await author.add_roles(role)
await ctx.send("Role Added")
这里的这一行 role_id = role_dict.get(rolename.lower())
是我添加角色 !add lol
而不是 LoL
的罪魁祸首这就是我得到的:
非常感谢帮助。
问题是您将小写字母 rolename
与非小写字母的字典键进行比较。对于不区分大小写的检查,rolename
和字典键都应为小写。
手动将字典键更改为小写:
role_dict = {
"members":557212810468392970,
"ps4":568761643916328960,
"lol":559792606364565505}
或者使用字典理解以编程方式创建它,并检查 rolename.lower()
是否在小写字典中:
role_dict = {
"Members":557212810468392970,
"PS4":568761643916328960,
"LoL":559792606364565505}
lowercase_dict = {k.lower():v for k,v in role_dict.items()}
role_id = lowercase_dict.get(rolename.lower())
if not role_id:
await ctx.send("I cannot find the role {}.".format(rolename))
return
我正在尝试使用 lower()
,因此角色名称不区分大小写。因此,如果用户键入 lol
而不是 LoL
,它将不会通过 if 语句 if not role_id:
我就是这样做的:
@commands.command()
@commands.check(lambda ctx: ctx.channel.id in [555844758778544160])
async def add(self, ctx, *, rolename):
author = ctx.message.author
role_dict = {
"Members":557212810468392970,
"PS4":568761643916328960,
"LoL":559792606364565505}
role_id = role_dict.get(rolename.lower())
if not role_id:
await ctx.send("I cannot find the role {}.".format(rolename))
return
role = discord.utils.get(ctx.message.guild.roles, id = role_id)
message = '{} added the role **{}**'.format(author.display_name, role.name)
embed = discord.Embed(description=message.format(author.display_name, role.name), colour=0xff0000)
await author.add_roles(role)
await ctx.send("Role Added")
这里的这一行 role_id = role_dict.get(rolename.lower())
是我添加角色 !add lol
而不是 LoL
的罪魁祸首这就是我得到的:
非常感谢帮助。
问题是您将小写字母 rolename
与非小写字母的字典键进行比较。对于不区分大小写的检查,rolename
和字典键都应为小写。
手动将字典键更改为小写:
role_dict = {
"members":557212810468392970,
"ps4":568761643916328960,
"lol":559792606364565505}
或者使用字典理解以编程方式创建它,并检查 rolename.lower()
是否在小写字典中:
role_dict = {
"Members":557212810468392970,
"PS4":568761643916328960,
"LoL":559792606364565505}
lowercase_dict = {k.lower():v for k,v in role_dict.items()}
role_id = lowercase_dict.get(rolename.lower())
if not role_id:
await ctx.send("I cannot find the role {}.".format(rolename))
return