HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.06.2023, 20:52
shawtyglock.
Участник форума
Регистрация: 20.06.2022
Сообщений: 188
С нами: 2053174

Репутация: 33
По умолчанию

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

Python:





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


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

  #2  
Старый 13.06.2023, 21:20
CastelloFAM
Участник форума
Регистрация: 21.05.2020
Сообщений: 228
С нами: 3148192

Репутация: 98
По умолчанию

Цитата:
Сообщение от 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('Неизвестная команда')
 
Ответить с цитированием

  #3  
Старый 13.06.2023, 21:51
shawtyglock.
Участник форума
Регистрация: 20.06.2022
Сообщений: 188
С нами: 2053174

Репутация: 33
По умолчанию

Цитата:
Сообщение от 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:

 
Ответить с цитированием

  #4  
Старый 13.06.2023, 22:11
AugustTN
Познавший АНТИЧАТ
Регистрация: 14.06.2021
Сообщений: 1,354
С нами: 2587494

Репутация: 88


По умолчанию

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

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

  #5  
Старый 13.06.2023, 22:27
chapo
Флудер
Регистрация: 10.10.2016
Сообщений: 9,228
С нами: 5046982

Репутация: 183


По умолчанию

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
'Слышь, кретин, тебе же сказали ввести число после команды. Ну почему я работаю с идиотами...'
)
 
Ответить с цитированием

  #6  
Старый 13.06.2023, 22:33
feraza
Новичок
Регистрация: 16.07.2013
Сообщений: 2
С нами: 6749526

Репутация: 53
По умолчанию

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

  #7  
Старый 14.06.2023, 13:27
ukiru
Новичок
Регистрация: 23.11.2019
Сообщений: 14
С нами: 3407463

Репутация: 53
По умолчанию

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

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

  #8  
Старый 14.06.2023, 13:36
Python_newbie
Новичок
Регистрация: 07.06.2023
Сообщений: 0
С нами: 1546818

Репутация: 0
По умолчанию

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

1:





Код:
message
=
message
.
text
.
split
(
' '
)
# split по пробелу
match message
:
case
[
'start'
]
:
await
message
.
answer
(
'Приветики'
)
case
'id'
,
id_number
if
id_number
.
isdigit
(
)
:
# code
.
.
.
 
Ответить с цитированием

  #9  
Старый 21.06.2023, 21:23
st4xX
Познающий
Регистрация: 24.04.2013
Сообщений: 72
С нами: 6869402

Репутация: 63
По умолчанию

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

Каждая команда - свой хендлер
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.