import json from pathlib import Path from nonebot import get_bot, logger from nonebot.adapters.onebot.v11 import Message, MessageSegment, GroupMessageEvent from nonebot.internal.matcher import Matcher from nonebot.permission import SUPERUSER from nonebot.plugin.on import on_command from .config import pconfig from .lib import rlib group_file = Path("config") / "nonebot_sekai_update_notify" / "group.json" group_file.parent.mkdir(parents=True, exist_ok=True) if not group_file.exists(): group_file.write_text("[]") enabled_groups = json.loads(group_file.read_text()) def add_group(group_id: int): if group_id not in enabled_groups: enabled_groups.append(group_id) group_file.write_text(json.dumps(enabled_groups)) def remove_group(group_id: int): if group_id in enabled_groups: enabled_groups.remove(group_id) group_file.write_text(json.dumps(enabled_groups)) async def sync(): data = rlib.fetch_data() if data is None: return message = Message() inner = [MessageSegment.text(f"活动 {data.event_id} 的卡牌更新了!")] for item in data.card_paths: p = Path(item) n = MessageSegment.image(file=item) n.data["summary"] = f"[{p.name}]" inner.append(n) for node in inner: message.append(MessageSegment.node_custom( user_id=int(get_bot().self_id), nickname=pconfig.nickname, content=Message([node]) )) for group in enabled_groups: try: await get_bot().send_group_msg(message=message, group_id=group) except Exception as e: logger.error(f"发送消息到群组 {group} 失败: {e}") for path in data.card_paths: try: Path(path).unlink() except Exception as e: logger.error(f"删除文件 {path} 失败: {e}") subscribe = on_command("订阅烤leak", permission=SUPERUSER) unsubscribe = on_command("退订烤leak", permission=SUPERUSER) @subscribe.handle() async def _(event: GroupMessageEvent, matcher: Matcher): group_id = event.group_id add_group(group_id) await matcher.send(f"已订阅烤leak更新") @unsubscribe.handle() async def _(event: GroupMessageEvent, matcher: Matcher): group_id = event.group_id remove_group(group_id) await matcher.send(f"已退订烤leak更新")