【问题标题】:How to make commands parameters case insensitive?如何使命令参数不区分大小写?
【发布时间】:2021-06-01 22:49:14
【问题描述】:

所以基本上我想使命令参数不区分大小写。例如:?role [成员] [角色]。因此,我不必键入成员和角色名称的全名或相同大小写。真的有可能吗?因为我已经尝试过 Dyno bot,而且似乎有可能。我试过这段代码,但它不起作用:

import discord
from discord.ext import commands
client = commands.Bot(command_prefix=("d", "D"), intents=intents, help_command=None, case_insensitive=True)

Like this,我没有输入完整的成员名称和相同大小写的角色名称。

【问题讨论】:

  • 您只是想要命令参数不区分大小写还是整个命令不区分大小写?前任。 !say True!saY True
  • @Ceres !saY True 如果我打开了case_insensitive 就可以工作,但我想让参数/参数不区分大小写。看看我发布的 imgur 链接。

标签: python discord discord.py


【解决方案1】:

如果只针对会员(如图),你可以指定参数为会员对象,然后你可以给出名字,提及会员或者给出会员的id .

一个例子是:

@commands.command(name="userinfo")
async def userinfo(self, ctx, Member : discord.Member):
    # Do your stuff

【讨论】:

  • 我这样做了,我想要的是不输入完整的成员名称,并且不要总是输入与成员名称/角色名称相同的大小写(因此机器人将选择最接近的成员/角色我在图片中输入的名称)。
【解决方案2】:

使用.lower()降低参数

@commands.command()
async def role(self, ctx, Member : discord.Member, Role):
     role = Role.lower() 

如果您希望首字母大写,请执行以下操作:

@commands.command()
async def role(self, ctx, Member : discord.Member, Role):
     role = Role.capitalize() 

【讨论】:

    【解决方案3】:

    你可以简单地使用discord的转换器

    @commands.command()
    async def role(self, ctx, member : discord.Member = None, Role: discord.role = None):
         if role is None or member is None:
             await ctx.send('you need to specify a member and a role')
         else:
            if role in member.roles():
               await member.remove_role(role)
            else:
               await member.add_role(role)
    
    

    参考资料:

    【讨论】:

    • 我已经尝试过您的代码,但它仍然无法正常工作,我不想输入完整的成员名称,并且不要总是输入与成员名称/角色名称相同的大小写(因此机器人会选择我在图像中键入的名称最接近的成员/角色)并且我的机器人不使用 cogs。有可能吗?
    • 如果 discord.py 的转换器不工作,你必须为你的情况制作你自己的转换器。 Read more about custom converters here。我想不出任何其他方法可以从部分名称中获取角色
    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2021-01-01
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多