diff options
Diffstat (limited to 'ATRI')
-rw-r--r-- | ATRI/plugins/bilibili_dynamic/__init__.py | 24 | ||||
-rw-r--r-- | ATRI/plugins/bilibili_dynamic/data_source.py | 11 |
2 files changed, 26 insertions, 9 deletions
diff --git a/ATRI/plugins/bilibili_dynamic/__init__.py b/ATRI/plugins/bilibili_dynamic/__init__.py index fa9f8c3..4c313a1 100644 --- a/ATRI/plugins/bilibili_dynamic/__init__.py +++ b/ATRI/plugins/bilibili_dynamic/__init__.py @@ -1,3 +1,7 @@ +from apscheduler.triggers.base import BaseTrigger +from apscheduler.triggers.combining import AndTrigger +from apscheduler.triggers.interval import IntervalTrigger + from ATRI.utils.apscheduler import scheduler from ATRI.utils import timestamp2datetime @@ -9,6 +13,7 @@ from nonebot import get_bot from .data_source import BilibiliDynamicSubscriptor import re from tabulate import tabulate +from datetime import datetime bilibili_dynamic = BilibiliDynamicSubscriptor().on_command( "/bilibili_dynamic", "b站动态订阅助手", aliases={"b站动态"} @@ -102,7 +107,7 @@ async def handle_uid(event: GroupMessageEvent, state: T_State = State()): print(success) success = success and ( await subscriptor.update_subscription_by_uid( - uid=uid, update_map={"nickname": up_name} + uid=uid, update_map={"nickname": up_name, "last_update": datetime.now()} ) ) elif sub_command == "取消订阅": @@ -129,11 +134,26 @@ from queue import Queue tq = Queue() +class BilibiliDynamicCheckEnabledTrigger(BaseTrigger): + # 自定义trigger 保证服务开启 + # 实现abstract方法 <get_next_fire_time> + def get_next_fire_time(self, previous_fire_time, now): + subscriptor = BilibiliDynamicSubscriptor() + config = subscriptor.load_service() + if config["enabled"] == False: + return None + else: + return now + + # 业务逻辑 # 每10s从任务队列中拉一个uid出来,调用api进行查询 # 当任务队列为空时,从数据库读取订阅列表,并塞入任务队列tq中 @scheduler.scheduled_job( - "interval", name="b站动态检查", seconds=10, max_instances=3, misfire_grace_time=60 + AndTrigger([IntervalTrigger(seconds=10), BilibiliDynamicCheckEnabledTrigger()]), + name="b站动态检查", + max_instances=3, + misfire_grace_time=60, ) async def _check_dynamic(): from ATRI.database.models import Subscription diff --git a/ATRI/plugins/bilibili_dynamic/data_source.py b/ATRI/plugins/bilibili_dynamic/data_source.py index 25c2d8d..49ffce7 100644 --- a/ATRI/plugins/bilibili_dynamic/data_source.py +++ b/ATRI/plugins/bilibili_dynamic/data_source.py @@ -335,16 +335,13 @@ class BilibiliDynamicSubscriptor(Service): return ret def generate_output(self, pattern: dict) -> (str, str): - text_part = """【UP名称】{name}\n【动态类型】{dynamic_type}\n【动态ID】{dynamic_id}\n【时间】{time}\n【UID】{uid}\n【当前阅读次数】{view}\n【当前转发次数】{repost}\n【当前点赞次数】{like}\n【内容摘要】{content}\n""".format( + # 限制摘要的字数 + abstractLimit = 40 + text_part = """【UP名称】{name}\n【动态类型】{dynamic_type}\n【时间】{time}\n【内容摘要】{content}\n""".format( name=pattern["name"], dynamic_type=pattern["type_zh"], - dynamic_id=pattern["dynamic_id"], time=pattern["time"], - uid=pattern["uid"], - view=pattern["view"], - repost=pattern["repost"], - like=pattern["like"], - content=pattern["content"], + content=pattern["content"][:abstractLimit], ) pic_part = pattern["pic"] return text_part, pic_part |