78 lines
3.3 KiB
Python
78 lines
3.3 KiB
Python
"""
|
||
Утилиты для работы с 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
|
||
|