Telegram Bot используя Django 3.2.6, pyTelegramBotAPI 4.0.0. Apache 2.2.29. Проблема с register_next_step_handler
Cервер использует сертификат от Let’s Encrypt. Бот обрабатывает пошаговый обработчик, однако работоспособность заканчивается на первом шаге. По всей видимости это связанно с переменной:
user_dict = {}
После первого шага переменная становиться пустой и продолжение пошагового обработчика невозможно. Подскажите, пожалуйста как исправить это? Планирую пошаговый обработчик записывать в бд, однако как и запись в бд пошагово, также и отдельным классом не работает.
Файл views.py
from django.shortcuts import render
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
import requests
import telebot
from telebot import apihelper, types
import logging
logger = logging.getLogger(__name__)
WEBHOOK = 'https://exemple.com'
bot = telebot.TeleBot(settings.TOKEN, threaded=False, parse_mode='HTML')
@csrf_exempt
def index(request):
if request.method != 'POST':
return render(request, 'main/index.html')
if request.META.get('CONTENT_TYPE') != 'application/json':
return render(request, 'main/index.html')
json_string = request.body.decode('utf-8')
update = telebot.types.Update.de_json(json_string)
logger.info('Update: %s', update)
bot.process_new_updates([update])
return HttpResponse(status=200)
text_messages = {
'welcome':
'Привет! Для использования бота, требуется зарегистрироваться.\n\n<b>Как вы хотите зарегистрироваться?</b>',
'private_person':
'<b>Вы будете зарегистрированы как физическое лицо.</b>\nСледуйте инструкции ниже.',
'company':
'<b>Вы будете зарегистрированы как юридическое лицо.</b>\n Следуйте инструкции ниже.',
}
registration_messages = {
'first_name':
'Введите ваше имя.',
'last_name':
'Введите вашу фамилию.',
}
user_dict = {}
class UserReg:
def __init__(self, id_telegram):
self.id_telegram = id_telegram
self.first_name = None
self.last_name = None
def __repr__(self):
return f'id_telegram: {self.id_telegram} first_name: {self.first_name} last_name: {self.last_name}'
btn_private_person = types.InlineKeyboardButton(text='Физическое лицо', callback_data='private_person')
btn_company = types.InlineKeyboardButton(text='Юридическое лицо', callback_data='company')
@bot.message_handler(commands=['start'])
def start(message):
markup = types.InlineKeyboardMarkup()
markup.add(btn_private_person, btn_company)
bot.send_message(message.chat.id, text_messages['welcome'], reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def registration(call):
bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup='')
if call.data == 'private_person':
bot.send_message(call.message.chat.id, text_messages['private_person'])
elif call.data == 'company':
bot.send_message(call.message.chat.id, text_messages['company'])
msg = bot.send_message(call.message.chat.id, registration_messages['first_name'])
bot.register_next_step_handler(msg, first_step_reg_org)
def first_step_reg_org(message):
try:
chat_id = message.chat.id
user = UserReg(message.chat.id)
user_dict[chat_id] = user
user.first_name = message.text
msg = bot.send_message(message.chat.id, registration_messages['last_name'])
logger.warning('FIRST: %s', user_dict[chat_id])
bot.register_next_step_handler(msg, second_step_reg_org)
except Exception as e:
bot.reply_to(message, f'Что-то пошло не так! first\n{e}')
def second_step_reg_org(message):
try:
chat_id = message.chat.id
logger.warning('SECOND: %s',user_dict[chat_id])
user = user_dict[chat_id]
user.last_name = message.text
bot.send_message(message.chat.id, f'Результат: \n{user.first_name}\n{user.last_name}')
except Exception as e:
bot.reply_to(message, f'Что-то пошло не так! second\n{e}')
bot.enable_save_next_step_handlers(delay=1, filename="./.handlers-saves/step.save")
bot.load_next_step_handlers(filename="./.handlers-saves/step.save")
bot.set_webhook(url=WEBHOOK)
Файл logs.log
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: Starting new HTTPS connection (1): api.telegram.org:443
DATE: 19/09/2021 TIME: 10:41:54 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "GET /BOT.TOKEN/getWebhookInfo HTTP/1.1" 200 266
DATE: 19/09/2021 TIME: 10:41:54 AM
TYPE: INFO, LOCALIZATION: views
MESSAGE: WebHookInfo: {'url': 'https://exemple.com', 'has_custom_certificate': False, 'pending_update_count': 1, 'ip_address': '00.000.00.0', 'last_error_date': 1632024887, 'last_error_message': 'Wrong response from the webhook: 500 Internal Server Error', 'max_connections': 40, 'allowed_updates': None}
DATE: 19/09/2021 TIME: 10:41:54 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "POST /BOT.TOKEN/sendMessage?chat_id=ID_USER&text=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%21+%D0%94%D0%BB%D1%8F+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F+%D0%B1%D0%BE%D1%82%D0%B0%2C+%D1%82%D1%80%D0%B5%D0%B1%D1%83%D0%B5%D1%82%D1%81%D1%8F+%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F.%0A%0A%3Cb%3E%D0%9A%D0%B0%D0%BA+%D0%B2%D1%8B+%D1%85%D0%BE%D1%82%D0%B8%D1%82%D0%B5+%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F%3F%3C%2Fb%3E&reply_markup=%7B%22inline_keyboard%22%3A+%5B%5B%7B%22text%22%3A+%22%5Cu0424%5Cu0438%5Cu0437%5Cu0438%5Cu0447%5Cu0435%5Cu0441%5Cu043a%5Cu043e%5Cu0435+%5Cu043b%5Cu0438%5Cu0446%5Cu043e%22%2C+%22callback_data%22%3A+%22private_person%22%7D%2C+%7B%22text%22%3A+%22%5Cu042e%5Cu0440%5Cu0438%5Cu0434%5Cu0438%5Cu0447%5Cu0435%5Cu0441%5Cu043a%5Cu043e%5Cu0435+%5Cu043b%5Cu0438%5Cu0446%5Cu043e%22%2C+%22callback_data%22%3A+%22company%22%7D%5D%5D%7D&parse_mode=HTML HTTP/1.1" 200 1319
DATE: 19/09/2021 TIME: 10:41:54 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: Starting new HTTPS connection (1): api.telegram.org:443
DATE: 19/09/2021 TIME: 10:41:57 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "GET /BOT.TOKEN/getWebhookInfo HTTP/1.1" 200 266
DATE: 19/09/2021 TIME: 10:41:57 AM
TYPE: INFO, LOCALIZATION: views
MESSAGE: WebHookInfo: {'url': 'https://exemple.com', 'has_custom_certificate': False, 'pending_update_count': 1, 'ip_address': '00.000.00.0', 'last_error_date': 1632024887, 'last_error_message': 'Wrong response from the webhook: 500 Internal Server Error', 'max_connections': 40, 'allowed_updates': None}
DATE: 19/09/2021 TIME: 10:41:57 AM
TYPE: INFO, LOCALIZATION: views
MESSAGE: Update: {'update_id': 52392613, 'message': None, 'edited_message': None, 'channel_post': None, 'edited_channel_post': None, 'inline_query': None, 'chosen_inline_result': None, 'callback_query': {'id': '5231228019845620169', 'from_user': <telebot.types.User object at 0x7f4555420820>, 'message': <telebot.types.Message object at 0x7f455547b3d0>, 'inline_message_id': None, 'chat_instance': '-8056055160872487116', 'data': 'private_person', 'game_short_name': None}, 'shipping_query': None, 'pre_checkout_query': None, 'poll': None, 'poll_answer': None, 'my_chat_member': None, 'chat_member': None}
DATE: 19/09/2021 TIME: 10:41:57 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "POST /BOT.TOKEN/editMessageReplyMarkup?chat_id=ID_USER&message_id=2483 HTTP/1.1" 200 1044
DATE: 19/09/2021 TIME: 10:41:57 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "POST /BOT.TOKEN/sendMessage?chat_id=ID_USER&text=%3Cb%3E%D0%92%D1%8B+%D0%B1%D1%83%D0%B4%D0%B5%D1%82%D0%B5+%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D1%8B++%D0%BA%D0%B0%D0%BA+%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5+%D0%BB%D0%B8%D1%86%D0%BE.%3C%2Fb%3E%0A%D0%A1%D0%BB%D0%B5%D0%B4%D1%83%D0%B9%D1%82%D0%B5+%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8+%D0%BD%D0%B8%D0%B6%D0%B5.&parse_mode=HTML HTTP/1.1" 200 902
DATE: 19/09/2021 TIME: 10:41:57 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "POST /BOT.TOKEN/sendMessage?chat_id=ID_USER&text=%D0%92%D0%B2%D0%B5%D0%B4%D0%B8%D1%82%D0%B5+%D0%B2%D0%B0%D1%88%D0%B5+%D0%B8%D0%BC%D1%8F.&parse_mode=HTML HTTP/1.1" 200 547
DATE: 19/09/2021 TIME: 10:41:57 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: Starting new HTTPS connection (1): api.telegram.org:443
DATE: 19/09/2021 TIME: 10:42:04 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "GET /BOT.TOKEN/getWebhookInfo HTTP/1.1" 200 266
DATE: 19/09/2021 TIME: 10:42:05 AM
TYPE: INFO, LOCALIZATION: views
MESSAGE: WebHookInfo: {'url': 'https://exemple.com', 'has_custom_certificate': False, 'pending_update_count': 1, 'ip_address': '00.000.00.0', 'last_error_date': 1632024887, 'last_error_message': 'Wrong response from the webhook: 500 Internal Server Error', 'max_connections': 40, 'allowed_updates': None}
DATE: 19/09/2021 TIME: 10:42:05 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "POST /BOT.TOKEN/sendMessage?chat_id=ID_USER&text=%D0%92%D0%B2%D0%B5%D0%B4%D0%B8%D1%82%D0%B5+%D0%B2%D0%B0%D1%88%D1%83+%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8E.&parse_mode=HTML HTTP/1.1" 200 571
DATE: 19/09/2021 TIME: 10:42:05 AM
TYPE: WARNING, LOCALIZATION: views
MESSAGE: FIRST: id_telegram: ID_USER first_name: Andrey last_name: None
DATE: 19/09/2021 TIME: 10:42:05 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: Starting new HTTPS connection (1): api.telegram.org:443
DATE: 19/09/2021 TIME: 10:42:10 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "GET /BOT.TOKEN/getWebhookInfo HTTP/1.1" 200 266
DATE: 19/09/2021 TIME: 10:42:10 AM
TYPE: INFO, LOCALIZATION: views
MESSAGE: WebHookInfo: {'url': 'https://exemple.com', 'has_custom_certificate': False, 'pending_update_count': 1, 'ip_address': '00.000.00.0', 'last_error_date': 1632024887, 'last_error_message': 'Wrong response from the webhook: 500 Internal Server Error', 'max_connections': 40, 'allowed_updates': None}
DATE: 19/09/2021 TIME: 10:42:10 AM
TYPE: DEBUG, LOCALIZATION: connectionpool
MESSAGE: https://api.telegram.org:443 "POST /BOT.TOKEN/sendMessage?chat_id=ID_USER&text=%D0%A7%D1%82%D0%BE-%D1%82%D0%BE+%D0%BF%D0%BE%D1%88%D0%BB%D0%BE+%D0%BD%D0%B5+%D1%82%D0%B0%D0%BA%21+second%0AID_USER&reply_to_message_id=2488&parse_mode=HTML HTTP/1.1" 200 958
DATE: 19/09/2021 TIME: 10:42:10 AM