Как создать вайтлист на языке Python и добавить в телеграмм-бот кнопки для принятия или отклонения заявок?

Как создать свой белый список в Python, чтобы я мог добавлять пользователей в него через бота, который будет отправлять мне IP-адрес и предоставлять кнопки для принятия или отклонения запроса?
  • 3 апреля 2025 г. 14:55
Ответы на вопрос 2
Для создания телеграм-бота на Python с функциональностью вайтлиста (белого списка) и кнопками для принятия или отклонения заявок вам потребуется использовать библиотеку `python-telegram-bot`. Я опишу основные шаги для реализации.

### Шаги по реализации

1. **Установите необходимые библиотеки**:
   Для начала установите библиотеку `python-telegram-bot`:
   ```bash
   pip install python-telegram-bot
   ```

2. **Создайте бота и получите токен**:
   Создайте своего бота у [BotFather](https://t.me/botfather) и получите токен.

3. **Создайте основной файл Python**:
   В этом файле вы будете реализовывать логику бота.

### Пример кода

```python
import logging
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackQueryHandler, CallbackContext

# Настройка логирования
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

# Список разрешенных (вайтлист)
whitelist = set()

# Команда /start
def start(update: Update, context: CallbackContext) -> None:
    update.message.reply_text('Привет! Жди заявки, я добавлю тебя в белый список.')

# Обработка текстовых сообщений (заявки на добавление с IP)
def handle_message(update: Update, context: CallbackContext) -> None:
    ip_address = update.message.text
    if validate_ip(ip_address):  # Предположим, у вас есть функция для валидации IP
        keyboard = [
            [
                InlineKeyboardButton("Принять", callback_data=f'accept_{ip_address}'),
                InlineKeyboardButton("Отклонить", callback_data=f'deny_{ip_address}'),
            ]
        ]
        reply_markup = InlineKeyboardMarkup(keyboard)
        update.message.reply_text(f"Заявка на добавление IP: {ip_address}", reply_markup=reply_markup)

# Обработка кнопок
def button(update: Update, context: CallbackContext) -> None:
    query = update.callback_query
    query.answer()

    action, ip_address = query.data.split('_')
    
    if action == 'accept':
        whitelist.add(ip_address)
        query.edit_message_text(text=f"IP адрес {ip_address} добавлен в белый список.")
    elif action == 'deny':
        query.edit_message_text(text=f"Заявка на IP адрес {ip_address} отклонена.")

# Функция для валидации IP (например, простая валидация через регулярное выражение)
def validate_ip(ip):
    import re
    pattern = re.compile(r'^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$')
    return pattern.match(ip) is not None

def main():
    # Создание Updater и передача ему токена бота
    updater = Updater("YOUR_TOKEN", use_context=True)

    # Получение диспетчера для регистрации обработчиков
    dp = updater.dispatcher

    # Регистрация обработчиков команд и сообщений
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_message))
    dp.add_handler(CallbackQueryHandler(button))

    # Запуск бота
    updater.start_polling()
    
    # Ожидание завершения работы
    updater.idle()

if __name__ == '__main__':
    main()
```

### Объяснение кода:

1. **Импорт библиотек**: Импортируем необходимые классы и функции из библиотеки `telegram`.

2. **Создание основного функционала**:
   - `start()`: Обработчик команды `/start`.
   - `handle_message()`: Обрабатывает текстовые сообщения от пользователей, отправляя запросы на добавление IP-адреса в вайтлист.
   - `button()`: Обрабатывает нажатия на кнопки "Принять" и "Отклонить".
   - `validate_ip()`: Функция для проверки корректности IP-адреса.

3. **Настройка и запуск бота**: В функции `main()` мы создаём и настраиваем бота, регистрируем обработчики и запускаем его.

### Тестирование
Замените `"YOUR_TOKEN"` на токен, полученный от BotFather, и запустите файл. Отправьте боту текст с IP-адресом, и он предложит вам кнопки для
1. Подумать 
2. Сделать
Похожие вопросы