新增强制重生成日报指令,支持跳过缓存验证弹幕总结效果
1. 新增指令:#强制斗鱼弹幕日报(支持带日期参数)\n2. 强制指令执行时跳过日报缓存读取,直接重生成文本与图片并覆盖缓存\n3. _send_daily_reports 增加 force_regenerate 参数并向下传递\n4. 保留原 #斗鱼弹幕日报 行为不变,兼容既有使用方式\n5. 补充中文注释,说明强制重生成的用途与行为
This commit is contained in:
@@ -505,7 +505,8 @@ class DouyuPlugin(MessagePluginInterface):
|
|||||||
self.feature = self.register_feature()
|
self.feature = self.register_feature()
|
||||||
self.redis_manager: Optional[DouyuRedisManager] = None
|
self.redis_manager: Optional[DouyuRedisManager] = None
|
||||||
self._commands = ["斗鱼订阅", "取消斗鱼订阅", "斗鱼订阅列表", "斗鱼订阅提醒", "取消斗鱼订阅提醒",
|
self._commands = ["斗鱼订阅", "取消斗鱼订阅", "斗鱼订阅列表", "斗鱼订阅提醒", "取消斗鱼订阅提醒",
|
||||||
"订阅鱼吧", "取消订阅鱼吧", "鱼吧订阅列表", "#斗鱼弹幕日报", "斗鱼弹幕日报"]
|
"订阅鱼吧", "取消订阅鱼吧", "鱼吧订阅列表",
|
||||||
|
"#斗鱼弹幕日报", "斗鱼弹幕日报", "#强制斗鱼弹幕日报", "强制斗鱼弹幕日报"]
|
||||||
self._api_template = "https://www.douyu.com/betard/{room_id}"
|
self._api_template = "https://www.douyu.com/betard/{room_id}"
|
||||||
self._yuba_api = "https://yuba.douyu.com/wgapi/yubanc/api/feed/getUserFeedList"
|
self._yuba_api = "https://yuba.douyu.com/wgapi/yubanc/api/feed/getUserFeedList"
|
||||||
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._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"
|
||||||
@@ -741,6 +742,32 @@ class DouyuPlugin(MessagePluginInterface):
|
|||||||
await self.bot.send_text_message(roomid, f"暂无可发送的斗鱼弹幕日报:{anchor_day}", sender)
|
await self.bot.send_text_message(roomid, f"暂无可发送的斗鱼弹幕日报:{anchor_day}", sender)
|
||||||
return True, "暂无日报"
|
return True, "暂无日报"
|
||||||
|
|
||||||
|
if first_token in {"#强制斗鱼弹幕日报", "强制斗鱼弹幕日报"}:
|
||||||
|
if not roomid:
|
||||||
|
await self.bot.send_text_message(sender, "请在群聊中使用该命令", sender)
|
||||||
|
return True, "仅支持群聊"
|
||||||
|
parts = content.split()
|
||||||
|
anchor_day = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
|
||||||
|
if len(parts) >= 2:
|
||||||
|
day_text = parts[1].strip()
|
||||||
|
try:
|
||||||
|
anchor_day = datetime.strptime(day_text, "%Y-%m-%d").strftime("%Y-%m-%d")
|
||||||
|
except Exception:
|
||||||
|
await self.bot.send_text_message(roomid, "日期格式错误,请使用:#强制斗鱼弹幕日报 2026-04-07", sender)
|
||||||
|
return True, "日期格式错误"
|
||||||
|
# 这里明确提示“强制重生成”,便于群内区分普通日报和回归测试操作。
|
||||||
|
await self.bot.send_text_message(roomid, f"⏳ 正在强制重生成斗鱼弹幕日报:{anchor_day}", sender)
|
||||||
|
delivered = await self._send_daily_reports(
|
||||||
|
anchor_day,
|
||||||
|
target_group_id=roomid,
|
||||||
|
force=True,
|
||||||
|
force_regenerate=True,
|
||||||
|
)
|
||||||
|
if delivered:
|
||||||
|
return True, f"斗鱼弹幕日报已强制重生成并发送:{anchor_day}"
|
||||||
|
await self.bot.send_text_message(roomid, f"暂无可发送的斗鱼弹幕日报:{anchor_day}", sender)
|
||||||
|
return True, "暂无日报"
|
||||||
|
|
||||||
return False, None
|
return False, None
|
||||||
|
|
||||||
async def _scheduled_check_job(self):
|
async def _scheduled_check_job(self):
|
||||||
@@ -1908,8 +1935,17 @@ class DouyuPlugin(MessagePluginInterface):
|
|||||||
)
|
)
|
||||||
return self._build_fallback_daily_report(payload)
|
return self._build_fallback_daily_report(payload)
|
||||||
|
|
||||||
async def _get_or_create_daily_report_result(self, room_id: str, anchor_day: str, payload: Dict[str, Any]) -> Dict[str, Any]:
|
async def _get_or_create_daily_report_result(
|
||||||
cached = self._load_daily_report_cache(room_id, anchor_day) or {}
|
self,
|
||||||
|
room_id: str,
|
||||||
|
anchor_day: str,
|
||||||
|
payload: Dict[str, Any],
|
||||||
|
*,
|
||||||
|
force_regenerate: bool = False,
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
# force_regenerate=True 时,跳过本地缓存读取,直接重新生成文本/图片并覆盖缓存。
|
||||||
|
# 这样可以在模型提示词或模板变更后,通过命令立即验证最新效果。
|
||||||
|
cached = {} if force_regenerate else (self._load_daily_report_cache(room_id, anchor_day) or {})
|
||||||
cached_image = self._resolve_existing_report_image(cached.get("report_image"))
|
cached_image = self._resolve_existing_report_image(cached.get("report_image"))
|
||||||
cached_text = str(cached.get("report_text") or "").strip()
|
cached_text = str(cached.get("report_text") or "").strip()
|
||||||
cached_version = int(cached.get("cache_version", 0) or 0)
|
cached_version = int(cached.get("cache_version", 0) or 0)
|
||||||
@@ -1942,6 +1978,7 @@ class DouyuPlugin(MessagePluginInterface):
|
|||||||
anchor_day: str,
|
anchor_day: str,
|
||||||
target_group_id: Optional[str] = None,
|
target_group_id: Optional[str] = None,
|
||||||
force: bool = False,
|
force: bool = False,
|
||||||
|
force_regenerate: bool = False,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
rooms = (
|
rooms = (
|
||||||
set(self.redis_manager.list_group_rooms(target_group_id))
|
set(self.redis_manager.list_group_rooms(target_group_id))
|
||||||
@@ -1972,7 +2009,12 @@ class DouyuPlugin(MessagePluginInterface):
|
|||||||
f"sessions={len(sessions)}, min_messages={self._daily_report_min_messages}"
|
f"sessions={len(sessions)}, min_messages={self._daily_report_min_messages}"
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
report_result = await self._get_or_create_daily_report_result(room_id, anchor_day, payload)
|
report_result = await self._get_or_create_daily_report_result(
|
||||||
|
room_id,
|
||||||
|
anchor_day,
|
||||||
|
payload,
|
||||||
|
force_regenerate=force_regenerate,
|
||||||
|
)
|
||||||
report_text = str(report_result.get("report_text") or "").strip()
|
report_text = str(report_result.get("report_text") or "").strip()
|
||||||
report_image = self._resolve_existing_report_image(report_result.get("report_image"))
|
report_image = self._resolve_existing_report_image(report_result.get("report_image"))
|
||||||
groups = [target_group_id] if target_group_id else self.redis_manager.groups_for_room(room_id)
|
groups = [target_group_id] if target_group_id else self.redis_manager.groups_for_room(room_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user