清理线程
This commit is contained in:
parent
61b73d0bef
commit
737249b0d7
@ -21,3 +21,8 @@ def startup():
|
|||||||
rlib.set_ghp(pconfig.github_token)
|
rlib.set_ghp(pconfig.github_token)
|
||||||
rlib.boot(str(Path.cwd()), "nonebot_plugin_sekai_update_notify", pconfig.assets_studio_path)
|
rlib.boot(str(Path.cwd()), "nonebot_plugin_sekai_update_notify", pconfig.assets_studio_path)
|
||||||
scheduler.add_job(sync, "interval", seconds=10, id="sekai_update_sync", replace_existing=True)
|
scheduler.add_job(sync, "interval", seconds=10, id="sekai_update_sync", replace_existing=True)
|
||||||
|
|
||||||
|
|
||||||
|
@driver.on_shutdown
|
||||||
|
def shutdown():
|
||||||
|
rlib.stop()
|
||||||
|
|||||||
14
lib.py
14
lib.py
@ -39,9 +39,13 @@ class SekaiSyncLib:
|
|||||||
self.lib.ghp.argtypes = [ctypes.c_char_p]
|
self.lib.ghp.argtypes = [ctypes.c_char_p]
|
||||||
self.lib.ghp.restype = None
|
self.lib.ghp.restype = None
|
||||||
|
|
||||||
# boot(cwd: *const c_char, name: *const c_char, as_path: *const c_char) -> i32
|
# boot(cwd: *const c_char, name: *const c_char, as_path: *const c_char) -> c_int
|
||||||
self.lib.boot.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p]
|
self.lib.boot.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p]
|
||||||
self.lib.boot.restype = ctypes.c_int32
|
self.lib.boot.restype = ctypes.c_int
|
||||||
|
|
||||||
|
# stop() -> c_int
|
||||||
|
self.lib.stop.argtypes = []
|
||||||
|
self.lib.stop.restype = ctypes.c_int
|
||||||
|
|
||||||
# fetch_data() -> *mut c_char
|
# fetch_data() -> *mut c_char
|
||||||
# ⚠️ 这里必须用 c_void_p,不能用 c_char_p,否则会丢失指针地址导致内存泄漏
|
# ⚠️ 这里必须用 c_void_p,不能用 c_char_p,否则会丢失指针地址导致内存泄漏
|
||||||
@ -77,6 +81,12 @@ class SekaiSyncLib:
|
|||||||
self._str_to_bytes(as_path)
|
self._str_to_bytes(as_path)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def stop(self) -> int:
|
||||||
|
"""
|
||||||
|
停止主循环与清理状态
|
||||||
|
"""
|
||||||
|
return self.lib.stop()
|
||||||
|
|
||||||
def fetch_data(self) -> Optional[FetchData]:
|
def fetch_data(self) -> Optional[FetchData]:
|
||||||
# 1. 获取裸指针
|
# 1. 获取裸指针
|
||||||
ptr = self.lib.fetch_data()
|
ptr = self.lib.fetch_data()
|
||||||
|
|||||||
31
sync.py
31
sync.py
@ -1,9 +1,11 @@
|
|||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from nonebot import get_bot
|
from nonebot import get_bot, logger
|
||||||
from nonebot.adapters.onebot.v11 import Message, MessageSegment
|
from nonebot.adapters.onebot.v11 import Message, MessageSegment, GroupMessageEvent
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot.internal.matcher import Matcher
|
||||||
|
from nonebot.permission import SUPERUSER
|
||||||
|
from nonebot.plugin.on import on_command
|
||||||
|
|
||||||
from .config import pconfig
|
from .config import pconfig
|
||||||
from .lib import rlib
|
from .lib import rlib
|
||||||
@ -33,7 +35,7 @@ async def sync():
|
|||||||
if data is None:
|
if data is None:
|
||||||
return
|
return
|
||||||
message = Message()
|
message = Message()
|
||||||
inner = [MessageSegment.text(f"活动 {data.event_id} 的卡牌更新了!\n")]
|
inner = [MessageSegment.text(f"活动 {data.event_id} 的卡牌更新了!")]
|
||||||
for item in data.card_paths:
|
for item in data.card_paths:
|
||||||
p = Path(item)
|
p = Path(item)
|
||||||
n = MessageSegment.image(file=item)
|
n = MessageSegment.image(file=item)
|
||||||
@ -49,5 +51,26 @@ async def sync():
|
|||||||
for group in enabled_groups:
|
for group in enabled_groups:
|
||||||
await get_bot().send_group_msg(message=message, group_id=group)
|
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更新")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user