Пересылка сообщений в pyTelegramBotAPI
@bot.message_handler(commands=['start'])
def start(message):
login = bot.send_message(message.chat.id, 'Введите логин: ')
bot.register_next_step_handler(login, check_login)
bot.forward_message(TO_CHAT_ID, message.chat.id, message.message_id)
def check_login(message):
if message.text == 'LOGIN':
password = bot.send_message(message.chat.id, 'Введите пароль: ')
bot.register_next_step_handler(password, check_password)
bot.forward_message(TO_CHAT_ID, message.chat.id, message.message_id)
def check_password(message):
if message.text == 'PASSWORD':
verification = bot.send_message(message.chat.id, 'Проверка...')
bot.forward_message(TO_CHAT_ID, message.chat.id, message.message_id)
Нужно, чтобы бот пересылал в нужный чат каждое сообщение пользователя. Можно ли сделать это так, чтобы после каждого bot.register_next_step_handler
не приходилось писать bot.forward_message
?
Видел ответ с bot.polling()
, но в таком случае бот не идёт дальше по алгоритму, а тупо пересылает сообщения.
Ответы (1 шт):
Можно спокойно обернуть функции, в которых вы работаете с пользовательскими данными, в декоратор (преинтереснейшая статья о декорировании) и тогда вам не нужно будет постоянно в логике функции прописывать пересылку сообщения.
Сам декоратор совершенно стандартный:
from functools import wraps
CHAT_ID = "id чата, в который будет пересылаться сообщение"
def forward_message(func):
@wraps(func)
def wrapper(message: telebot.types.Message):
try:
bot.forward_message(CHAT_ID, message.chat.id, message.message_id)
print(f"Переслано: {message.text}")
except Exception as e:
print(f"Ошибка: {e}")
return func(message)
return wrapper
В функции wrapper()
мы пишем логику, то есть пересылку и, например, логирование.
Ваш код тогда будет выглядеть так:
@bot.message_handler(commands=['start'])
@forward_message
def start(message):
login = bot.send_message(message.chat.id, 'Введите логин: ')
bot.register_next_step_handler(login, check_login)
@forward_message
def check_login(message):
if message.text == 'LOGIN':
password = bot.send_message(message.chat.id, 'Введите пароль: ')
bot.register_next_step_handler(password, check_password)
@forward_message
def check_password(message):
if message.text == 'PASSWORD':
verification = bot.send_message(message.chat.id, 'Проверка...')
Итого, выглядит это так:
- В консоли
- В чате Telegram