diff options
Diffstat (limited to 'ATRI/plugins/bilibili_dynamic')
| -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  | 
