Как сделать аргумент в операторе match, case | aiogram

shawtyglock.

Активный
Автор темы
188
63
В общем-то зарегестрировал допустим несколько команд и перебираю на какой что отвечать боту с помощью оператора match, case, пример:
Python:
match message.text:
    case 'start':
        await message.answer('Приветики')
    case 'id'
        # действия, но здесь оно получается примет только /id, а /id 31232 нет

а в одном нужно вводить аргумент, например /id 123, по сути здесь наверное и нужны регулярки но я вообще не врубаюсь как их сюда подключить
 

CastelloFAM

Активный
201
59
В общем-то зарегестрировал допустим несколько команд и перебираю на какой что отвечать боту с помощью оператора match, case, пример:
Python:
match message.text:
    case 'start':
        await message.answer('Приветики')
    case 'id'
        # действия, но здесь оно получается примет только /id, а /id 31232 нет

а в одном нужно вводить аргумент, например /id 123, по сути здесь наверное и нужны регулярки но я вообще не врубаюсь как их сюда подключить
import re

match message.text:
case 'start':
await message.answer('Приветики')
case re.match(r'^id \d+$', message.text):
argument = message.text.split()[1] # Извлекаем аргумент после "id"
await message.answer(f'Вы ввели аргумент: {argument}')
case _:
await message.answer('Неизвестная команда')
 

shawtyglock.

Активный
Автор темы
188
63
import re

match message.text:
case 'start':
await message.answer('Приветики')
case re.match(r'^id \d+$', message.text):
argument = message.text.split()[1] # Извлекаем аргумент после "id"
await message.answer(f'Вы ввели аргумент: {argument}')
case _:
await message.answer('Неизвестная команда')
выводит этo:
1686678669760.png
 

chapo

чопа сребдс // TG/IG: @moujeek
Модератор
9,028
11,865
Python:
import re

text = '/id 1'
commandData = re.search('^/(\w+)(\s+(.+))?$', text)
if commandData:
    command, arg = commandData.group(0, 2)
    match command:
        case 'start':
            print('питон говно')
        case 'id':
            print(f'Питон говно, кста ты ввел {arg}' if arg else 'Слышь, кретин, тебе же сказали ввести число после команды. Ну почему я работаю с идиотами...')
 

feraza

Потрачен
2
2
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В общем-то зарегестрировал допустим несколько команд и перебираю на какой что отвечать боту с помощью оператора match, case, пример:
Python:
match message.text:
    case 'start':
        await message.answer('Приветики')
    case 'id'
        # действия, но здесь оно получается примет только /id, а /id 31232 нет

а в одном нужно вводить аргумент, например /id 123, по сути здесь наверное и нужны регулярки но я вообще не врубаюсь как их сюда подключить
1:
import re

message_text = message.text

if re.match(r'^/start$', message_text):
    await message.answer('Приветики')
elif re.match(r'^/id(?:\s+\d+)?$', message_text):
    id_number = re.search(r'\d+', message_text)
    if id_number:
        id_number = int(id_number.group())
        # здесь выполняйте действия с id_number
    else:
        # здесь выполняйте действия, если нет аргумента после /id
else:
    # здесь обрабатывайте сообщения, которые не соответствуют ни одному из регулярных выражений