77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
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:
|
|
await get_bot().send_group_msg(message=message, group_id=group)
|
|
|
|
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更新")
|