diff --git a/LichessClientTG_bot/admin_bot.py b/LichessClientTG_bot/admin_bot.py index 2ef08d4..7836c1a 100644 --- a/LichessClientTG_bot/admin_bot.py +++ b/LichessClientTG_bot/admin_bot.py @@ -84,6 +84,22 @@ class AdminBot: """Set admin chat ID in database""" self.db.set_admin_chat_id(chat_id) + async def _call_tts_service(self, text: str): + """Call TTS service with given text""" + try: + import urllib.parse + import aiohttp + encoded_text = urllib.parse.quote(text) + tts_url = f"http://192.168.8.111:7901/TTS?text={encoded_text}" + async with aiohttp.ClientSession() as session: + async with session.get(tts_url, timeout=aiohttp.ClientTimeout(total=5)) as response: + if response.status == 200: + logger.info(f"TTS service called successfully: {text}") + else: + logger.warning(f"TTS service returned status {response.status}") + except Exception as e: + logger.error(f"Failed to call TTS service: {e}") + async def notify_new_user(self, user_id: int, username: Optional[str], first_name: Optional[str]): """Send notification about new Telegram user""" username_text = f"@{username}" if username else "без username" @@ -96,8 +112,20 @@ class AdminBot: f"Имя: {name_text}" ) await self.send_notification(message) + + # Call TTS service with user count + try: + import sqlite3 + with sqlite3.connect(self.db.db_path) as conn: + cursor = conn.cursor() + cursor.execute("SELECT COUNT(*) FROM telegram_users") + total_users = cursor.fetchone()[0] + tts_text = f"Появился новый пользователь {total_users}" + await self._call_tts_service(tts_text) + except Exception as e: + logger.error(f"Failed to call TTS for new user: {e}") - async def notify_new_player(self, player_username: str, added_by_user_id: int, added_by_username: Optional[str]): + async def notify_new_player(self, player_username: str, added_by_user_id: int, added_by_username: Optional[str], is_new_gamer: bool = False): """Send notification about new tracked player""" added_by_text = f"@{added_by_username}" if added_by_username else f"ID: {added_by_user_id}" lichess_url = f"https://lichess.org/@/{player_username}" @@ -108,6 +136,19 @@ class AdminBot: f"Добавил: {added_by_text}" ) await self.send_notification(message) + + # Call TTS service if this is a new gamer + if is_new_gamer: + try: + import sqlite3 + with sqlite3.connect(self.db.db_path) as conn: + cursor = conn.cursor() + cursor.execute("SELECT COUNT(DISTINCT username) FROM gamers") + total_gamers = cursor.fetchone()[0] + tts_text = f"Добавлен новый игрок {total_gamers}" + await self._call_tts_service(tts_text) + except Exception as e: + logger.error(f"Failed to call TTS for new gamer: {e}") async def status(self, update: Update, context: ContextTypes.DEFAULT_TYPE): """Status command - show statistics""" diff --git a/LichessClientTG_bot/bot.py b/LichessClientTG_bot/bot.py index 7119894..8e39dcf 100644 --- a/LichessClientTG_bot/bot.py +++ b/LichessClientTG_bot/bot.py @@ -43,7 +43,7 @@ class LichessBot: self.application = None # Will be set when application is created self.counters = MessageCounters() # Message counters - async def _notify_admin_new_player(self, player_username: str, added_by_user_id: int, added_by_username: Optional[str]): + async def _notify_admin_new_player(self, player_username: str, added_by_user_id: int, added_by_username: Optional[str], is_new_gamer: bool = False): """Notify admin about newly linked player (always try to send).""" try: admin_bot = get_admin_bot() @@ -52,7 +52,8 @@ class LichessBot: await admin_bot.notify_new_player( player_username=player_username, added_by_user_id=added_by_user_id, - added_by_username=added_by_username + added_by_username=added_by_username, + is_new_gamer=is_new_gamer ) return except Exception as e: @@ -355,7 +356,7 @@ class LichessBot: try: user_obj = update.effective_user await self._notify_admin_new_player( - username, user_id, user_obj.username if user_obj else None + username, user_id, user_obj.username if user_obj else None, is_new_gamer ) except Exception as e: logger.error(f"Admin notify failed after adding gamer with token: {e}") @@ -440,7 +441,7 @@ class LichessBot: try: user_obj = update.effective_user await self._notify_admin_new_player( - username, user_id, user_obj.username if user_obj else None + username, user_id, user_obj.username if user_obj else None, is_new_gamer ) logger.info(f"Admin notification processed for player {username}") except Exception as e: