Telethon – Как вызвать УНИКАЛЬНОЕ событие «events.NewMessage», нажав встроенную кнопку?Python

Программы на Python
Ответить
Anonymous
 Telethon – Как вызвать УНИКАЛЬНОЕ событие «events.NewMessage», нажав встроенную кнопку?

Сообщение Anonymous »

Python 3.8.5 (tags/v3.8.5:580fbb0, 20 июля 2020 г., 15:57:54) [MSC v.1924 64 бит (AMD64)] на win32
/ telethon '1.38.1'
Я учусь этому делу, делаю бота. Имеет три

Код: Выделить всё

NewMessage
[/b] обработчики:

Код: Выделить всё

@client.on(events.NewMessage(pattern='/start'))
[/b] — который отправляет кнопку

Код: Выделить всё

Button.inline('Click and send a music artist name...', b'send_name_button')
;

Код: Выделить всё

@client.on(events.NewMessage(pattern='/delete))
[/b] — удаляет все сообщения

Код: Выделить всё

@client.on(events.NewMessage(pattern=r'^((?!\/start|\/delete).)*$))
[/b] - который должен обрабатывать сообщения, отличные от '/start' или '/delete'
У меня есть встроенная кнопка < сильный>

Код: Выделить всё

data=b'send_name_button'
, и после щелчка по нему уникальный

Код: Выделить всё

@client.on(events.NewMessage)
[/b], который находится внутри этого обратного вызова, должен быть запущен и только после нажатия этой кнопки.
Это весь код:

Код: Выделить всё

try:
@client.on(events.NewMessage(pattern='/start'))
async def respond_start(event):
user = await event.get_sender() # name = utils.get_display_name(sender) ?

msg = await event.respond(
f'Hello, {user.first_name} ☘️!\nThis bot will send 🎁 you a chosen song ' \
'(mp3 file) from a songs list of an artist you chose ' \
'🔊 (from .........)',
buttons=[
Button.inline('Click and send a music artist name...', b'send_name_button')
]
)
append_msg_id(msg_ids, msg.id)

except Exception as ex:
print(f'Ecxception: respond_start: {ex}')

try:
@client.on(events.NewMessage(pattern='/delete'))
async def delete_dialog(event):
append_msg_id(msg_ids, event.id)
await client.delete_messages(event.chat_id, msg_ids)

clean_msg_ids(msg_ids)
except Exception as ex:
print(f'Exception: delete_messages: {ex}')

# not /start and not /delete
try:
@client.on(events.NewMessage(pattern=r'^((?!\/start|\/delete).)*$'))
async def respond_else(event):
append_msg_id(msg_ids, event.id)

msg = await event.respond('Try [/start](/start)...')
append_msg_id(msg_ids, msg.id)

except Exception as ex:
print(f'Exception: respond_else: {ex}')
Это обработчик кнопки

Код: Выделить всё

@client.on(events.CallbackQuery(data=b'send_name_button'))
async def handler_send_name_button(event):
msg = await event.respond(f'Type the name of a musician. After that the bot will' \
' send the list of tracks of the chosen musician...' )

functions.append_msg_id(msg_ids, event.id)
functions.append_msg_id(msg_ids, msg.id)

@client.on(events.NewMessage):
async def handler_a_name_is_chosen_after_clicking_send_name_button(event):
pass # THIS HANDLER MUST BE TRIGGERED ONLY AFTER THE BUTTON OF data=b'send_name_button' IS CLICKED
Проблема в том, что нажатие кнопки и отправка сообщения ПОСЛЕ ЭТОГО должны вызвать вложенный обработчик handler_a_name_is_chosen_after_clicking_send_name_button (ВОТ ЧТО МНЕ НУЖНО) но при этом активируются три вышеперечисленных.
Как сделать ссылку между нажатием кнопки data=b'send_name_button' и вызов обработчика handler_a_name_is_chosen_after_clicking_send_name_button?
весь код: https://pastebin.com/EVMYPL7J

Подробнее здесь: https://stackoverflow.com/questions/792 ... ine-button
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»