加入斗鱼开播下播提醒

This commit is contained in:
liuwei
2026-01-26 08:48:32 +08:00
parent 367d25242e
commit 4aa1ca450d

View File

@@ -53,6 +53,22 @@ class DouyuRedisManager:
res.append(gid)
return res
def add_group_subscriber(self, group_id: str, user_id: str) -> bool:
key = f"{self.prefix}group:{group_id}:subscribers"
return self.redis.sadd(key, user_id) >= 0
def remove_group_subscriber(self, group_id: str, user_id: str) -> bool:
key = f"{self.prefix}group:{group_id}:subscribers"
return self.redis.srem(key, user_id) >= 0
def list_group_subscribers(self, group_id: str) -> List[str]:
key = f"{self.prefix}group:{group_id}:subscribers"
subs = self.redis.smembers(key) or set()
result = []
for s in subs:
result.append(s.decode("utf-8") if isinstance(s, bytes) else s)
return sorted(result)
def get_room_status(self, room_id: str) -> Optional[Dict[str, Any]]:
key = f"{self.prefix}room_status:{room_id}"
data = self.redis.get(key)
@@ -111,7 +127,7 @@ class DouyuPlugin(MessagePluginInterface):
self.bot: WechatAPIClient = None
self.feature = self.register_feature()
self.redis_manager: Optional[DouyuRedisManager] = None
self._commands = ["斗鱼订阅", "取消斗鱼订阅", "斗鱼订阅列表"]
self._commands = ["斗鱼订阅", "取消斗鱼订阅", "斗鱼订阅列表", "斗鱼订阅提醒"]
self._api_template = "https://www.douyu.com/betard/{room_id}"
self._user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
self._check_interval = 5
@@ -122,7 +138,9 @@ class DouyuPlugin(MessagePluginInterface):
dbm = DBConnectionManager.get_instance()
self.redis_manager = DouyuRedisManager(dbm)
cfg = self._config.get("Douyu", {})
self._commands = cfg.get("command", self._commands)
cfg_cmds = cfg.get("command", [])
if isinstance(cfg_cmds, list) and cfg_cmds:
self._commands = list(dict.fromkeys(cfg_cmds + self._commands))
self._api_template = cfg.get("api_url_template", self._api_template)
self._user_agent = cfg.get("user_agent", self._user_agent)
self._check_interval = int(cfg.get("check_interval_minutes", self._check_interval))
@@ -164,6 +182,13 @@ class DouyuPlugin(MessagePluginInterface):
text = "当前订阅的斗鱼房间:\n" + "\n".join(rooms)
await self.bot.send_text_message(roomid or sender, text, sender)
return True, "列表已发送"
if first_token == "斗鱼订阅提醒":
if not roomid:
await self.bot.send_text_message(sender, "请在群聊中使用该命令", sender)
return True, "仅支持群聊"
ok = self.redis_manager.add_group_subscriber(roomid, sender)
await self.bot.send_at_message(roomid, "已加入斗鱼订阅提醒名单", [sender])
return True, "加入提醒名单成功" if ok else "加入提醒名单失败"
if first_token == "斗鱼订阅":
parts = content.split()
if len(parts) < 2:
@@ -251,7 +276,11 @@ class DouyuPlugin(MessagePluginInterface):
for gid in groups:
if GroupBotManager.get_group_permission(gid, self.feature) == PermissionStatus.ENABLED:
try:
await self.bot.send_text_message(gid, text)
subs = self.redis_manager.list_group_subscribers(gid)
if subs:
await self.bot.send_at_message(gid, text, subs)
else:
await self.bot.send_text_message(gid, text)
await self.bot.send_link_xml_message(xml_content, gid)
except Exception as e:
logger.error(f"发送斗鱼开播提醒失败: {e}")
@@ -265,7 +294,11 @@ class DouyuPlugin(MessagePluginInterface):
for gid in groups:
if GroupBotManager.get_group_permission(gid, self.feature) == PermissionStatus.ENABLED:
try:
await self.bot.send_text_message(gid, text)
subs = self.redis_manager.list_group_subscribers(gid)
if subs:
await self.bot.send_at_message(gid, text, subs)
else:
await self.bot.send_text_message(gid, text)
except Exception as e:
logger.error(f"发送斗鱼下播提醒失败: {e}")
continue