Александр Подюков
Ученик
(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):
Каждому пользователю назначается индивидуальное состояние, чтобы бот знал, на каком этапе находится взаимодействие.
Минимальные изменения:
Вам не нужно переписывать весь код. Просто добавьте словарь и логику для работы с состояниями.