summaryrefslogtreecommitdiff
path: root/ATRI
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI')
-rw-r--r--ATRI/plugins/bilibili_dynamic/__init__.py24
-rw-r--r--ATRI/plugins/bilibili_dynamic/data_source.py11
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