from telegram.ext import Updater, CommandHandler, MessageHandler, Filters import random # Создаем список операторов operators = ['@user', '@user1'] #тут был список операторов # Создаем словарь для хранения пользователей и их операторов users = {} # Создаем словарь для хранения заблокированных пользователей blocked_users = {} # Функция для обработки команды /start def start(update, context): # Получаем id пользователя user_id = update.message.chat_id # Проверяем, является ли пользователь заблокированным if user_id in blocked_users: update.message.reply_text('Вы заблокированы и не можете использовать бота.') return # Выбираем оператора с наименьшим количеством пользователей operator = get_operator_with_min_users() # Сохраняем пользователя и его оператора в словарь users[user_id] = operator # Отправляем приветственное сообщение пользователю update.message.reply_text('Добро пожаловать! Вы связаны с оператором. ' 'Для отправки сообщения оператору просто введите текст.') # Функция для обработки сообщений от пользователей def message(update, context): # Получаем id пользователя user_id = update.message.chat_id # Проверяем, является ли пользователь заблокированным if user_id in blocked_users: update.message.reply_text('Вы заблокированы и не можете отправлять сообщения оператору.') return # Получаем имя пользователя user_name = update.message.chat.first_name # Получаем оператора пользователя из словаря operator = users.get(user_id) # Если оператор найден, пересылаем сообщение от пользователя оператору if operator: # Формируем сообщение для оператора с указанием пользователя message_to_operator = f'{user_name}: {update.message.text}' context.bot.send_message(chat_id=operator, text=message_to_operator) else: update.message.reply_text('Вы еще не получили оператора. Пожалуйста, дождитесь назначения оператора.') # Функция для обработки сообщений от операторов def operator_message(update, context): # Получаем id оператора operator_id = update.message.chat_id # Получаем все пользователей, назначенных на этого оператора assigned_users = [user for user, operator in users.items() if operator == operator_id] # Пересылаем сообщение от оператора каждому пользователю for user_id in assigned_users: # Формируем сообщение для пользователя message_to_user = update.message.text context.bot.send_message(chat_id=user_id, text=message_to_user) # Функция для получения оператора с наименьшим количеством пользователей def get_operator_with_min_users(): # Создаем словарь для подсчета количества пользователей у кажд # Создаем словарь для подсчета количества пользователей у каждого оператора operator_users = {operator: 0 for operator in operators} # Подсчитываем количество пользователей у каждого оператора for user_operator in users.values(): operator_users[user_operator] += 1 # Находим оператора с наименьшим количеством пользователей min_users = min(operator_users.values()) operators_with_min_users = [operator for operator, users_count in operator_users.items() if users_count == min_users] # Выбираем случайного оператора с наименьшим количеством пользователей return random.choice(operators_with_min_users) # Функция для отказа оператора от пользователя def reject_operator(update, context): # Получаем id пользователя user_id = update.message.chat_id # Проверяем, есть ли пользователь в словаре if user_id in users: # Удаляем пользователя из словаря del users[user_id] update.message.reply_text('Вы отказались от оператора.') else: update.message.reply_text('Вы не имеете оператора.') # Функция для блокировки пользователя def ban_user(update, context): # Получаем id пользователя user_id = update.message.chat_id # Проверяем, является ли пользователь оператором if user_id in operators: update.message.reply_text('Оператор не может быть заблокирован.') return # Добавляем пользователя в словарь заблокированных пользователей blocked_users[user_id] = True update.message.reply_text('Вы заблокированы и не можете использовать бота.') # Создаем объект Updater и передаем ему токен бота updater = Updater('токен', use_context=True) # Получаем диспетчер для регистрации обработчиков dispatcher = updater.dispatcher # Регистрируем обработчики команд и сообщений dispatcher.add_handler(CommandHandler('start', start)) dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, message)) dispatcher.add_handler(CommandHandler('deny', reject_operator)) dispatcher.add_handler(CommandHandler('ban', ban_user)) dispatcher.add_handler(MessageHandler(Filters.text & Filters.user(operators), operator_message)) # Запускаем бота updater.start_polling()