Add source
This commit is contained in:
72
web/utils/bot_client.py
Normal file
72
web/utils/bot_client.py
Normal file
@@ -0,0 +1,72 @@
|
||||
"""
|
||||
Utilities for interacting with bot from web interface
|
||||
"""
|
||||
import logging
|
||||
from typing import Optional
|
||||
from bot.modules.task_scheduler.executor import get_app_client
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def send_otp_to_user(user_id: int, code: str) -> bool:
|
||||
"""
|
||||
Send OTP code to user via Telegram bot
|
||||
|
||||
Args:
|
||||
user_id: User ID
|
||||
code: OTP code
|
||||
|
||||
Returns:
|
||||
True if successfully sent, False otherwise
|
||||
"""
|
||||
try:
|
||||
app_client = get_app_client()
|
||||
if not app_client:
|
||||
logger.warning(f"Bot client not available for sending OTP to user {user_id}")
|
||||
return False
|
||||
|
||||
# Check that client is started and connected
|
||||
try:
|
||||
if not hasattr(app_client, 'is_connected') or not app_client.is_connected:
|
||||
logger.warning(f"Bot client not connected for sending OTP to user {user_id}")
|
||||
return False
|
||||
except Exception as check_error:
|
||||
logger.warning(f"Failed to check bot connection status: {check_error}")
|
||||
# Continue sending attempt, client might be working
|
||||
|
||||
from shared.config import settings
|
||||
# Form URL for web interface
|
||||
if settings.WEB_HOST == "0.0.0.0":
|
||||
login_url = f"localhost:{settings.WEB_PORT}"
|
||||
else:
|
||||
login_url = f"{settings.WEB_HOST}:{settings.WEB_PORT}"
|
||||
|
||||
message = (
|
||||
f"🔐 **Ваш код для входа в веб-интерфейс:**\n\n"
|
||||
f"**`{code}`**\n\n"
|
||||
f"⏰ Код действителен 10 минут\n\n"
|
||||
f"🌐 Перейдите на http://{login_url}/admin/login и введите этот код"
|
||||
)
|
||||
|
||||
try:
|
||||
# Try to send message
|
||||
result = await app_client.send_message(user_id, message)
|
||||
logger.info(f"OTP code successfully sent to user {user_id}, message_id: {result.id if result else 'unknown'}")
|
||||
return True
|
||||
except Exception as send_error:
|
||||
error_msg = str(send_error)
|
||||
logger.error(f"Error sending message to user {user_id}: {error_msg}", exc_info=True)
|
||||
|
||||
# Check error type for more informative message
|
||||
if "chat not found" in error_msg.lower() or "user not found" in error_msg.lower():
|
||||
logger.error(f"User {user_id} not found or hasn't started dialog with bot")
|
||||
elif "flood" in error_msg.lower():
|
||||
logger.error(f"Message sending rate limit exceeded for user {user_id}")
|
||||
elif "unauthorized" in error_msg.lower():
|
||||
logger.error(f"Bot not authorized or stopped")
|
||||
|
||||
return False
|
||||
except Exception as e:
|
||||
logger.error(f"Critical error sending OTP to user {user_id}: {e}", exc_info=True)
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user