ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Как сделать аргумент в операторе match, case | aiogram (https://forum.antichat.xyz/showthread.php?t=1479828)

shawtyglock. 13.06.2023 20:52

В общем-то зарегестрировал допустим несколько команд и перебираю на какой что отвечать боту с помощью оператора match, case, пример:

Python:





Код:

match message
.
text
:
case
'start'
:
await
message
.
answer
(
'Приветики'
)
case
'id'
# действия, но здесь оно получается примет только /id, а /id 31232 нет



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

CastelloFAM 13.06.2023 21:20

Цитата:

Сообщение от shawtyglock.

В общем-то зарегестрировал допустим несколько команд и перебираю на какой что отвечать боту с помощью оператора 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. 13.06.2023 21:51

Цитата:

Сообщение от ValeriyArtemenko

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:

https://forum.antichat.xyz/attachmen...697f0b3a3f.png

AugustTN 13.06.2023 22:11

Мне кажется это овер мозгоеб, почему не юзать дефолт способ?

И в аиограме вроде как существует message.text.arguments(не помню как, но в документации найдешь)

chapo 13.06.2023 22:27

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 13.06.2023 22:33

Цитата:

Сообщение от shawtyglock.

В общем-то зарегестрировал допустим несколько команд и перебираю на какой что отвечать боту с помощью оператора 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
:
# здесь обрабатывайте сообщения, которые не соответствуют ни одному из регулярных выражений


ukiru 14.06.2023 13:27

самый лучший вариант использовать отдельные хэндлеры, а не строить конструкции в одном

пример для второй версии https://github.com/aiogram/aiogram/t...rocess-updates

Python_newbie 14.06.2023 13:36

Можно без использования regex:

1:





Код:

message
=
message
.
text
.
split
(
' '
)
# split по пробелу
match message
:
case
[
'start'
]
:
await
message
.
answer
(
'Приветики'
)
case
'id'
,
id_number
if
id_number
.
isdigit
(
)
:
# code
.
.
.


st4xX 21.06.2023 21:23

Не надо так делать

Каждая команда - свой хендлер


Время: 03:11