Для создания телеграм-бота на 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-адресом, и он предложит вам кнопки для