@AlexSn2020

Как реализовать одновременное использование Telegram бота несколькими пользователями?

Учусь писать ботов на Python. Для примера выбрал бот-обменник для биржи exmo. Когда обращаюсь к боту один, всё работает нормально, но когда с нескольких акков одновременно, бот путает переменные и выдаёт неверные данные, помогите, кто может)
import config
import mail
import exmo_exchange
import telebot
from telebot import types
from random import randint

bot=telebot.TeleBot(config.token)

keyboard1=telebot.types.ReplyKeyboardMarkup(True)
keyboard1.row('EXMO')
keyboard2=telebot.types.ReplyKeyboardMarkup(True)
keyboard2.row('Да',' Нет')
keyboard3=telebot.types.ReplyKeyboardMarkup(True)
keyboard3.row('Я ОПЛАТИЛ')

summi_coda_i_plati=[]

@bot.message_handler(commands=['start'])
def start_messages(message):
    msg=bot.send_message(message.chat.id, 'Привет, что хотите обменять?: ',reply_markup=keyboard1)

@bot.message_handler(content_types=["text"])
def send_text(message):
    try:
        if message.text.lower()=='exmo':
            msg=bot.send_message(message.chat.id,'Введите сумму в EXMO')
        elif message.text.lower()=='btc':
            msg=bot.send_message(message.chat.id,'Введите сумму в BTC')
        bot.register_next_step_handler(msg, send_digit)
    except Exception as e:
        bot.reply_to(message,'Чтобы начать сначала нажмите "/start"')

@bot.message_handler(content_types=["text"])
def send_digit (message):
    summ=message.text
    if summ.isdigit():
        summi_coda_i_plati.append(int(summ))
        summ2=int(summ)*1.10
        summ3=int(summ2)+randint(-3,+9)
        summi_coda_i_plati.append(str(summ3))
        otvet=str(summ3)+' рублей на карту'
        msg=bot.send_message(message.chat.id,otvet)
        msg=bot.send_message(message.chat.id,' Готов?',reply_markup=keyboard2)
        bot.register_next_step_handler(msg, send_number)
    else:
        msg=bot.send_message(message.chat.id,'Вы ввели некорректные данные. Чтобы начать сначала, нажмите "/start"')
        bot.register_next_step_handler(msg, start_messages)
    
@bot.message_handler(content_types=["text"])
def send_number (message):
    if message.text.lower()=='да':
        number='5536 9137 7601 0502'
        otvet='Переведите на номер карты "Тинькофф ": '+number+''' указанную выше сумму.
        После оплаты нажмите ОДИН РАЗ "Я ОПЛАТИЛ" и ждите получения кода.
        Как только средства поступят, бот выдаст код. Не нужно жать кнопку несколько раз.
        ПЕРЕВОДИТЕ ТОЧНО ТУ СУММУ, ЧТО УКАЗАНА БОТОМ, ИНАЧЕ ВОЗНИКНУТ СЛОЖНОСТИ С ВЫДАЧЕЙ КОДА'''
        msg=bot.send_message(message.chat.id, otvet,reply_markup=keyboard3 )
        bot.register_next_step_handler(msg, send_code)
    else:
        msg=bot.send_message(message.chat.id, 'Чтобы начать сначала нажмите "/start" ')
        bot.register_next_step_handler(msg, start_messages)
    
@bot.message_handler(content_types=["text"])
def send_code(message):
    if message.text.lower()=='я оплатил':
        user_id=message.from_user.id
        name_of_user=message.from_user.username
        excode_to_send=mail.email_check(summi_coda_i_plati[0],summi_coda_i_plati[1])
        msg=bot.send_message(message.chat.id,excode_to_send)
        
bot.polling()
  • Вопрос задан
  • 1640 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Hukyl
Попробуй обернуть весь код в ООП, тогда скорее всего не будет проблем с перекрыванием переменных
Ответ написан
@AlexSn2020 Автор вопроса
Создать переменные через отдельный класс или что вы имеете в виду?:)
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
Так вы постоянно обращаетесь к одним и тем же данным. Кто первый записал сюда данные - те данные и возвращаются.
excode_to_send=mail.email_check(summi_coda_i_plati[0],summi_coda_i_plati[1])


Так же уберите хэндлеры лишние, зачем вам четыре декоратора одинковых
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы