Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как изменит телеграм бота на python telebot, чтобы он мог работать с несколькими пользователями одновременно?

Алексей Макаров Ученик (209), открыт 1 неделю назад
Ситуация такова: я делал бота для записи, к примеру в стоматологию, а на конечном этапе разработки сообразил, что он не может работать с 2мя пользователями одновременно. Переводить бота на aiogram или создавать список с кучей вложенных списков для хранения информации очень сложно, код 800+ строк. Лажанул знатно, можете не писать. Есть хоть какие-то варианты, как разделить запросы пользователей и при этом не переписывать всего бота с 0?
2 ответа
Александр Подюков Ученик (188) 1 неделю назад
Чтобы ваш бот на telebot мог работать с несколькими пользователями одновременно, достаточно разделять пользовательские данные на основе их chat_id. Вы можете хранить данные каждого пользователя в отдельном словаре или использовать более продвинутые методы, например, базу данных.

Вот основные шаги для модификации:

Используйте словарь для хранения состояний пользователей.
Ключом словаря будет chat_id пользователя, а значением — данные или текущее состояние.

Разделите логику обработки на основе chat_id.
При получении сообщения проверяйте chat_id и текущий контекст пользователя.

Пример доработки вашего бота:

python
Копировать код
import telebot

# Ваш токен
TOKEN = "ВАШ_ТОКЕН"
bot = telebot.TeleBot(TOKEN)

# Словарь для хранения данных пользователей
user_data = {}

# Пример команды start
@bot.message_handler(commands=['start'])
def start_handler(message):
chat_id = message.chat.id
if chat_id not in user_data:
user_data[chat_id] = {} # Создаем отдельное пространство данных для пользователя
bot.send_message(chat_id, "Добро пожаловать! Как вас зовут?")
user_data[chat_id]['state'] = 'waiting_for_name' # Состояние пользователя

# Обработка текстовых сообщений
@bot.message_handler(func=lambda message: True)
def message_handler(message):
chat_id = message.chat.id
if chat_id not in user_data:
user_data[chat_id] = {} # Создаем данные, если пользователь новый

state = user_data[chat_id].get('state', None) # Получаем текущее состояние

if state == 'waiting_for_name':
user_data[chat_id]['name'] = message.text # Сохраняем имя
bot.send_message(chat_id, f"Приятно познакомиться, {message.text}! Какую услугу вы хотите?")
user_data[chat_id]['state'] = 'waiting_for_service'

elif state == 'waiting_for_service':
user_data[chat_id]['service'] = message.text # Сохраняем выбранную услугу
bot.send_message(chat_id, f"Вы выбрали: {message.text}. Мы свяжемся с вами для подтверждения!")
user_data[chat_id]['state'] = None # Сбрасываем состояние

else:
bot.send_message(chat_id, "Напишите /start, чтобы начать.")

# Запуск бота
bot.polling()
Что изменилось?
Словарь user_data:
Хранит данные пользователей и их состояния отдельно.

Состояния (state):
Каждому пользователю назначается индивидуальное состояние, чтобы бот знал, на каком этапе находится взаимодействие.

Минимальные изменения:
Вам не нужно переписывать весь код. Просто добавьте словарь и логику для работы с состояниями.
Сергей Диордий Профи (598) 6 дней назад
сделай словарь, где ключем будет id пользователя, а значением состояние. Скорее всего для этого есть готовые библиотеки - гугли
Похожие вопросы