diff --git a/plugins/douyu/main.py b/plugins/douyu/main.py index ded2d3a..1a73bd4 100644 --- a/plugins/douyu/main.py +++ b/plugins/douyu/main.py @@ -9,9 +9,13 @@ from typing import Dict, Any, List, Optional, Tuple, Set import aiohttp from loguru import logger import ssl -import websocket import zlib +try: + import websocket +except ImportError: + websocket = None + from base.plugin_common.message_plugin_interface import MessagePluginInterface from base.plugin_common.plugin_interface import PluginStatus from db.connection import DBConnectionManager @@ -34,6 +38,7 @@ class DouyuDanmuRecorder: self._buffer_limit = 50 self._buffer_date: Optional[str] = None self._lock = threading.Lock() + self._websocket_available = websocket is not None def _encode(self, msg: str) -> bytes: content = msg.encode("utf-8") + b"\x00" @@ -137,6 +142,9 @@ class DouyuDanmuRecorder: logger.info(f"斗鱼弹幕连接关闭({self.room_id}): {code} {msg}") def _run(self): + if not self._websocket_available: + logger.error(f"websocket-client 未安装,无法记录弹幕({self.room_id})") + return try: websocket.enableTrace(False) ws_urls = [ @@ -540,7 +548,10 @@ class DouyuPlugin(MessagePluginInterface): logger.error(f"斗鱼定时任务异常: {e}") async def _notify_groups_live(self, room_id: str, nickname: str, room_name: str, thumb_url: str): - # self._start_danmu_record(room_id) + try: + self._start_danmu_record(room_id) + except Exception as e: + logger.error(f"启动斗鱼弹幕记录失败({room_id}): {e}") groups = self.redis_manager.groups_for_room(room_id) text = f"🚀 斗鱼开播通知 \n🎤 {nickname} 正在直播中!\n 📌 房间标题:{room_name} \n 👉 点击观看:https://www.douyu.com/{room_id}" xml_content = DOUYU_MESSAGE_XML.format(title=room_name, liver=nickname, roomid=room_id, thumburl=thumb_url) @@ -558,7 +569,10 @@ class DouyuPlugin(MessagePluginInterface): continue async def _notify_groups_offline(self, room_id: str, nickname: str, room_name: str, is_loop: bool = False): - # self._stop_danmu_record(room_id) + try: + self._stop_danmu_record(room_id) + except Exception as e: + logger.error(f"停止斗鱼弹幕记录失败({room_id}): {e}") groups = self.redis_manager.groups_for_room(room_id) text = f"🔔 斗鱼提醒:{nickname} 下播啦~\n 🏷️ {room_name}" if is_loop: diff --git a/requirements.txt b/requirements.txt index 26c78c2..1cd0876 100644 --- a/requirements.txt +++ b/requirements.txt @@ -50,4 +50,5 @@ Glances~=4.3.1 aiofiles~=24.1.0 undetected-chromedriver~=3.5.5 urllib3~=2.5.0 -websockets~=15.0.1 \ No newline at end of file +websockets~=15.0.1 +websocket-client~=1.8.0 \ No newline at end of file