""" Utility functions for the Telegram bot """ import urllib.parse from typing import Dict, Any, Optional def generate_deep_link(bot_username: str, param_type: str, value: str = "") -> str: """ Generate deep link for the bot Args: bot_username: Telegram bot username (without @) param_type: Type of parameter (reward, quiz, shop, reward_item) value: Value for the parameter (e.g., reward amount, quiz ID) Returns: Deep link URL """ if param_type == "shop": startapp = "shop" elif param_type == "reward": startapp = f"reward_{value}" elif param_type == "quiz": startapp = f"quiz_{value}" elif param_type == "reward_item": startapp = f"reward_{value}" else: startapp = "" if startapp: return f"https://t.me/{bot_username}?startapp={startapp}" else: return f"https://t.me/{bot_username}" def generate_qr_content(deep_link: str) -> str: """ Generate content for QR code Args: deep_link: The deep link to encode in QR Returns: QR content (URL encoded) """ return urllib.parse.quote(deep_link) def parse_startapp_parameter(startapp: str) -> Dict[str, Any]: """ Parse startapp parameter from deep link Args: startapp: The startapp parameter from Telegram Returns: Dictionary with parsed data """ if not startapp: return {"type": "main"} if startapp.startswith("reward_"): try: amount = int(startapp.split("_")[1]) return {"type": "reward", "amount": amount} except (IndexError, ValueError): return {"type": "main"} elif startapp.startswith("quiz_"): quiz_id = startapp.split("_")[1] return {"type": "quiz", "quiz_id": quiz_id} elif startapp == "shop": return {"type": "shop"} elif startapp.startswith("reward_"): reward_id = startapp.split("_")[1] return {"type": "reward_item", "reward_id": reward_id} else: return {"type": "main"} def get_welcome_message(param_data: Dict[str, Any]) -> str: """ Get welcome message based on parsed parameter Args: param_data: Parsed parameter data Returns: Welcome message text """ param_type = param_data.get("type", "main") messages = { "main": ( "🌟 Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Π—Π²Ρ‘Π·Π΄Π½Ρ‹Π΅ Π’ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹!\n\n" "ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚Π΅ Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹, сканируйтС QR-ΠΊΠΎΠ΄Ρ‹ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΠΉΡ‚Π΅ Π·Π²Ρ‘Π·Π΄Ρ‹, " "ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠ·Ρ‹!" ), "reward": ( f"🎁 ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ! Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ {param_data.get('amount', 0)} ⭐\n\n" "ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΌΠΈΠ½ΠΈ-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои Π·Π²Ρ‘Π·Π΄Ρ‹!" ), "quiz": ( "🧠 Π“ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свои знания?\n\n" "ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρƒ ΠΈ Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ!" ), "shop": ( "πŸ›’ Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½ ΠΏΡ€ΠΈΠ·ΠΎΠ²!\n\n" "ΠžΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΠΉΡ‚Π΅ Π·Π²Ρ‘Π·Π΄Ρ‹ Π½Π° Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Ρ‹!" ), "reward_item": ( "🎁 Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ· ΠΆΠ΄Π΅Ρ‚ вас!\n\n" "ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΌΠ°Π³Π°Π·ΠΈΠ½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ подробности!" ) } return messages.get(param_type, messages["main"]) def validate_reward_amount(amount: int) -> bool: """ Validate reward amount Args: amount: Reward amount to validate Returns: True if valid, False otherwise """ return isinstance(amount, int) and amount > 0 and amount <= 1000 def validate_quiz_id(quiz_id: str) -> bool: """ Validate quiz ID Args: quiz_id: Quiz ID to validate Returns: True if valid, False otherwise """ return isinstance(quiz_id, str) and len(quiz_id) > 0 and quiz_id.isalnum()