#!/usr/bin/python # This example shows how to implement session creation and retrieval based on user id with middleware handler. # # Note: For the sake of simplicity of this example no extra library is used. However, it is recommended to use # in-memory or on-disk storage implementations (redis, mysql, postgres and etc) for storing and retrieving structures. # This is not a working, production-ready sample and it is highly recommended not to use it in production. # # In this example let's imagine we want to create a session for each user who communicates with the bot to store # different kind of temporary data while session is active. As an example we want to track the state of the user # with the help of this session. So, we need a way to store this session data somewhere globally to enable other # message handler functions to be able to use it. # The middleware session is explained: import telebot from telebot import apihelper apihelper.ENABLE_MIDDLEWARE = True INFO_STATE = 'ON_INFO_MENU' MAIN_STATE = 'ON_MAIN_MENU' SESSIONS = { -10000: { 'state': INFO_STATE }, -11111: { 'state': MAIN_STATE } } def get_or_create_session(user_id): try: return SESSIONS[user_id] except KeyError: SESSIONS[user_id] = {'state': MAIN_STATE} return SESSIONS[user_id] bot = telebot.TeleBot('TOKEN') @bot.middleware_handler(update_types=['message']) def set_session(bot_instance, message): bot_instance.session = get_or_create_session(message.from_user.id) @bot.message_handler(commands=['start']) def start(message): bot.session['state'] = MAIN_STATE bot.send_message(message.chat.id, bot.session['state']) @bot.message_handler(commands=['info']) def start(message): bot.session['state'] = INFO_STATE bot.send_message(message.chat.id, bot.session['state']) bot.infinity_polling()