uchill/backend/apps/users/telegram_utils.py

78 lines
3.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Утилиты для работы с Telegram Bot API.
"""
from django.conf import settings
import requests
import logging
logger = logging.getLogger(__name__)
def get_telegram_bot_username() -> tuple[str, str]:
"""
Получение имени бота из токена через Telegram Bot API.
Returns:
Кортеж (username, error_message):
- username: Имя бота без символа @, или пустая строка в случае ошибки
- error_message: Сообщение об ошибке, или пустая строка если успешно
"""
bot_token = settings.TELEGRAM_BOT_TOKEN
if not bot_token:
error_msg = "TELEGRAM_BOT_TOKEN не установлен в настройках Django"
logger.warning(error_msg)
return '', error_msg
if not bot_token.strip():
error_msg = "TELEGRAM_BOT_TOKEN пустой"
logger.warning(error_msg)
return '', error_msg
try:
# Получаем информацию о боте через Telegram Bot API
url = f"https://api.telegram.org/bot{bot_token}/getMe"
logger.info(f"Requesting Telegram bot info from: {url[:30]}...")
response = requests.get(url, timeout=10)
logger.info(f"Telegram API response status: {response.status_code}")
if response.status_code == 200:
data = response.json()
logger.info(f"Telegram API response data: {data}")
if data.get('ok') and data.get('result'):
username = data['result'].get('username', '')
if username:
logger.info(f"Telegram bot username retrieved: {username}")
return username, ''
else:
error_msg = "Telegram API вернул пустое имя пользователя"
logger.error(error_msg)
return '', error_msg
else:
error_msg = f"Telegram API вернул ошибку: {data.get('description', 'Unknown error')}"
logger.error(error_msg)
return '', error_msg
elif response.status_code == 401:
error_msg = "Неверный токен Telegram бота. Проверьте правильность TELEGRAM_BOT_TOKEN"
logger.error(error_msg)
return '', error_msg
else:
error_msg = f"Ошибка при запросе к Telegram API: HTTP {response.status_code}"
logger.error(f"{error_msg}. Response: {response.text[:200]}")
return '', error_msg
except requests.exceptions.Timeout:
error_msg = "Таймаут при запросе к Telegram API. Проверьте интернет-соединение"
logger.error(error_msg)
return '', error_msg
except requests.exceptions.RequestException as e:
error_msg = f"Ошибка сети при запросе к Telegram API: {str(e)}"
logger.error(error_msg)
return '', error_msg
except Exception as e:
error_msg = f"Неожиданная ошибка при получении информации о боте: {str(e)}"
logger.error(error_msg, exc_info=True)
return '', error_msg