Как можно решить проблему с авторизацией в скрипте?

В краткой форме объясню. Я разрабатываю свой скрипт и задумался о реализации авторизации по MAC-адресу. Мой замысел заключается в том, что при входе должен проверяться MAC-адрес: если он есть в базе данных, пользователя допускают к скрипту; если его нет, отправляется запрос на одобрение в Telegram-бот. <br/> <br/> Проблема: <br/> Когда я нажимаю кнопку "Разрешить", ничего не происходит, хотя по логике скрипта MAC-адрес должен записываться в текстовый файл. <br/> <br/> Код: <br/> import requests <br/> import json <br/> import os <br/> <br/> AUTHORIZED_MACS_FILE = "authorized_macs.txt" <br/> BOT_TOKEN = '-' <br/> CHAT_ID = '-' <br/> <br/> def mac_allowed(mac): <br/> if os.path.exists(AUTHORIZED_MACS_FILE): <br/> with open(AUTHORIZED_MACS_FILE, "r") as file: <br/> macs = file.read().splitlines() <br/> return mac in macs <br/> return False <br/> <br/> def add_mac(mac): <br/> with open(AUTHORIZED_MACS_FILE, "a") as file: <br/> file.write(mac + "\n") <br/> <br/> def notification(mac): <br/> message = f"MAC-адрес {mac} хочет авторизоваться в SMOKE TOOL." <br/> keyboard = { <br/> "inline_keyboard": [ <br/> [{"text": "Разрешить", "callback_data": f"allow:{mac}"}, <br/> {"text": "Отклонить", "callback_data": f"deny:{mac}"}] <br/> ] <br/> } <br/> url = f" <a href="https://api.telegram.org/bot%7BBOT_TOKEN%7D/sendMessage" rel="nofollow">https://api.telegram.org/bot{BOT_TOKEN}/sendMessage</a> " <br/> data = {"chat_id": CHAT_ID, "text": message, "reply_markup": json.dumps(keyboard)} <br/> try: <br/> requests.post(url, json=data) <br/> except Exception as e: <br/> print(f"Ошибка при отправке уведомления в Telegram: {e}") <br/> <br/> def handle_telegram_response(callback_data): <br/> action, mac = callback_data.split(":") <br/> if action == "allow":
  • 22 января 2025 г. 19:04
Ответы на вопрос 1
Ваша идея использовать MAC-адрес для авторизации — интересное решение. Основная проблема, о которой вы упоминаете, связана с тем, что по нажатию кнопки "Разрешить" вы не наблюдаете ожидаемого поведения (добавление MAC-адреса в файл). Давайте разберёмся, как можно улучшить ваш код, чтобы решение проблемы стало возможным.

1. **Отправка уведомления в Telegram**: Убедитесь, что вы правильно обрабатываете ссылку для API Telegram внутри функции `notification`. Проверьте правильность добавления токена и идентификатора чата.

2. **Обработка нажатий кнопок**: Когда пользователь нажимает кнопку, Telegram отправляет callback-запрос на ваш сервак (или URL). Вам нужно создать механизм для обработки этих запросов. Обычно это делается через веб-хук или периодический опрос (polling).

Вот пример общего подхода:

### 1. Убедитесь, что вы правильно обрабатываете callback-запросы:

```python
from flask import Flask, request

app = Flask(__name__)

# Ваш код...

@app.route('/callback', methods=['POST'])
def handle_callback():
    data = request.get_json()
    if 'callback_query' in data:
        callback_data = data['callback_query']['data']
        # Обработка нажатия кнопки
        handle_telegram_response(callback_data)
    return '', 200
```

### 2. Обработчик callback:
Измените вашу функцию `handle_telegram_response`, чтобы в ней добавлялся MAC-адрес в файл.

```python
def handle_telegram_response(callback_data):
    action, mac = callback_data.split(":")
    if action == "allow":
        add_mac(mac)  # Добавляем MAC-адрес в файл
        # Отправка подтверждения в Telegram
        message = f"MAC-адрес {mac} был разрешен."
        send_confirmation_message(message)

    elif action == "deny":
        # Обработка отказа
        message = f"MAC-адрес {mac} был отклонен."
        send_confirmation_message(message)

def send_confirmation_message(message):
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
    data = {"chat_id": CHAT_ID, "text": message}
    requests.post(url, json=data)
```

### 3. Настройка вебхуков:
Не забудьте настроить вебхуки для Telegram, чтобы он знал, куда отправлять запросы после нажатия на кнопку. Это можно сделать с помощью запроса к Telegram API:

```python
url = f"https://api.telegram.org/bot{BOT_TOKEN}/setWebhook?url=https://<ваш_домен>/callback"
requests.get(url)
```

### 4. Запуск сервера:
Запустите Flask сервер, чтобы он мог принимать запросы от Telegram.

```python
if __name__ == "__main__":
    app.run(port=5000)  # или любой другой порт
```

### 5. Проверьте наличие ошибок:
После внесения всех изменений проведите отладку кода, чтобы убедиться, что нет ошибок, и вы обрабатываете события корректно.

Эти шаги помогут реализовать авторизацию по MAC-адресу, а также корректно обрабатывать нажатия кнопок в вашем Telegram-боте.
Похожие вопросы