Как сделать параметры команд нечувствительными к регистру?

Итак, в основном я хочу сделать так, чтобы параметры команд не учитывали регистр. Например: ?role [участник] [роль]. Таким образом, мне не нужно вводить полное имя или одинаковые заглавные буквы имени члена и роли. Это действительно возможно? Потому что я пробовал бота Dyno, и кажется, что это возможно. Я пробовал этот код, но он не работает:

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

Как и здесь, я не ввел полностью имя участника и имя роли с одинаковая капитализация.


person Daud    schedule 03.03.2021    source источник
comment
Вы просто хотите, чтобы аргументы команды были нечувствительны к регистру или чтобы вся команда была нечувствительна к регистру? Бывший. !say True и !saY True   -  person Ceres    schedule 03.03.2021
comment
@Ceres !saY True работает, если у меня включен case_insensitive, но я хочу сделать параметры/аргументы нечувствительными к регистру. Посмотрите на ссылку imgur, которую я разместил.   -  person Daud    schedule 03.03.2021


Ответы (3)


Если это только для членов (как на изображении), вы можете указать параметр как объект члена, затем вы можете указать имя, упомянуть члена или указать идентификатор члена.

Примером может быть:

@commands.command(name="userinfo")
async def userinfo(self, ctx, Member : discord.Member):
    # Do your stuff
person Krypton    schedule 03.03.2021
comment
Я сделал это, я хочу не вводить полное имя участника и не всегда вводить ту же заглавную букву, что и имя участника/роль (поэтому бот выберет ближайшего участника/роль с именем, которое я ввел, как на изображении ). - person Daud; 04.03.2021

Понизьте параметры с помощью .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() 
person levi    schedule 03.03.2021
comment
Это не работает. Можете ли вы уточнить? - person Daud; 04.03.2021
comment
Не могли бы вы показать мне свой код для него. - person levi; 08.03.2021

Вы можете просто использовать конвертер раздора

@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)

Рекомендации:

person Ceres    schedule 04.03.2021
comment
Я пробовал ваш код, но он все еще не работает, я хочу не вводить полное имя участника и не всегда вводить ту же заглавную букву, что и имя участника/роль (поэтому бот выберет ближайшего участника/роль с именем Я набрал как на картинке) и мой бот не использует винтики. Является ли это возможным? - person Daud; 04.03.2021
comment
Если конвертер discord.py не работает, вам нужно сделать свой собственный конвертер для вашего случая. Подробнее о пользовательских конвертерах читайте здесь. Я не могу придумать другого способа получить роль из частичного имени. - person Ceres; 05.03.2021