summaryrefslogtreecommitdiff
path: root/ATRI
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI')
-rw-r--r--ATRI/plugins/bilibili_dynamic/__init__.py42
-rw-r--r--ATRI/plugins/bilibili_dynamic/data_source.py25
2 files changed, 53 insertions, 14 deletions
diff --git a/ATRI/plugins/bilibili_dynamic/__init__.py b/ATRI/plugins/bilibili_dynamic/__init__.py
index 61333a4..75dfb68 100644
--- a/ATRI/plugins/bilibili_dynamic/__init__.py
+++ b/ATRI/plugins/bilibili_dynamic/__init__.py
@@ -11,7 +11,7 @@ from apscheduler.triggers.interval import IntervalTrigger
from nonebot import get_bot
from nonebot.matcher import Matcher
from nonebot.params import CommandArg, ArgPlainText
-from nonebot.permission import Permission
+from nonebot.permission import Permission, SUPERUSER
from nonebot.adapters.onebot.v11 import Message, GroupMessageEvent
from ATRI.log import logger as log
@@ -22,6 +22,9 @@ from ATRI.database import BilibiliSubscription
from .data_source import BilibiliDynamicSubscriptor
+_CONTENT_LIMIT: int = 0
+
+
add_sub = BilibiliDynamicSubscriptor().cmd_as_group("add", "添加b站up主订阅")
@@ -99,7 +102,7 @@ get_sub_list = BilibiliDynamicSubscriptor().cmd_as_group(
@get_sub_list.handle()
-async def _get_sub_list(event: GroupMessageEvent):
+async def _bd_get_sub_list(event: GroupMessageEvent):
group_id = event.group_id
sub = BilibiliDynamicSubscriptor()
@@ -118,6 +121,31 @@ async def _get_sub_list(event: GroupMessageEvent):
await get_sub_list.finish(output)
+limit_content = BilibiliDynamicSubscriptor().cmd_as_group(
+ "limit", "设置订阅内容字数限制", permission=SUPERUSER
+)
+
+
+@limit_content.handle()
+async def _bd_get_limit(matcher: Matcher, args: Message = CommandArg()):
+ msg = args.extract_plain_text()
+ if msg:
+ matcher.set_arg("bd_limit_int", args)
+
+
+@limit_content.got("bd_limit_int", "要限制内容在多少字以内呢?(默认200,0=不限制)")
+async def _td_deal_limit(
+ event: GroupMessageEvent, _limit: str = ArgPlainText("bd_limit_int")
+):
+ patt = r"^\d+$"
+ if not re.match(patt, _limit):
+ await limit_content.reject("请键入阿拉伯数字:")
+
+ global _CONTENT_LIMIT
+ _CONTENT_LIMIT = int(_limit)
+ await limit_content.finish(f"成功!订阅内容展示将限制在 {_CONTENT_LIMIT} 以内!")
+
+
tq = asyncio.Queue()
@@ -162,10 +190,18 @@ async def _check_bd():
for i in result:
i["name"] = m.up_nickname
if ts < i["timestamp"]:
- content = Message(sub.gen_output(i))
+ content = Message(sub.gen_output(i, _CONTENT_LIMIT))
+ pic = i.get("pic", None)
bot = get_bot()
await bot.send_group_msg(group_id=m.group_id, message=content)
+ if pic:
+ try:
+ await bot.send_group_msg(group_id=m.group_id, message=pic)
+ except Exception:
+ repo = "图片发送失败了..."
+ await bot.send_group_msg(group_id=m.group_id, message=repo)
+
await sub.update_sub(
m.uid,
m.group_id,
diff --git a/ATRI/plugins/bilibili_dynamic/data_source.py b/ATRI/plugins/bilibili_dynamic/data_source.py
index 3327179..64045e3 100644
--- a/ATRI/plugins/bilibili_dynamic/data_source.py
+++ b/ATRI/plugins/bilibili_dynamic/data_source.py
@@ -18,7 +18,6 @@ _OUTPUT_FORMAT = """
{up_nickname} 的{up_dy_type}更新了!
(限制 {limit_content} 字)
{up_dy_content}
-{up_dy_media}
链接: {up_dy_link}
""".strip()
@@ -38,21 +37,21 @@ class BilibiliDynamicSubscriptor(Service):
try:
async with DB() as db:
await db.add_sub(uid, group_id)
- except BilibiliDynamicError:
+ except Exception:
raise BilibiliDynamicError("添加订阅失败")
async def update_sub(self, uid: int, group_id: int, update_map: dict):
try:
async with DB() as db:
await db.update_sub(uid, group_id, update_map)
- except BilibiliDynamicError:
+ except Exception:
raise BilibiliDynamicError("更新订阅失败")
async def del_sub(self, uid: int, group_id: int):
try:
async with DB() as db:
await db.del_sub({"uid": uid, "group_id": group_id})
- except BilibiliDynamicError:
+ except Exception:
raise BilibiliDynamicError("删除订阅失败")
async def get_sub_list(self, uid: int = int(), group_id: int = int()) -> list:
@@ -64,14 +63,14 @@ class BilibiliDynamicSubscriptor(Service):
try:
async with DB() as db:
return await db.get_sub_list(query_map)
- except BilibiliDynamicError:
+ except Exception:
raise BilibiliDynamicError("获取订阅列表失败")
async def get_all_subs(self) -> list:
try:
async with DB() as db:
return await db.get_all_subs()
- except BilibiliDynamicError:
+ except Exception:
raise BilibiliDynamicError("获取全部订阅列表失败")
async def get_up_nickname(self, uid: int) -> str:
@@ -147,23 +146,27 @@ class BilibiliDynamicSubscriptor(Service):
result.append(pattern)
return sorted(result, key=itemgetter("timestamp"))
- def gen_output(self, data: dict, limit_content: int = 100) -> str:
+ def gen_output(self, data: dict, content_limit) -> str:
"""生成动态信息
Args:
data (dict): dict形式的动态数据.
- limit_content (int, optional): 内容字数限制. 默认 100.
+ limit_content (int, optional): 内容字数限制.
Returns:
str: 动态信息
"""
+ if not content_limit:
+ content = data["content"]
+ else:
+ content = data["content"][:content_limit]
+
return _OUTPUT_FORMAT.format(
up_nickname=data["name"],
up_dy_type=data["type_zh"],
- limit_content=limit_content,
- up_dy_content=str(data["content"][:limit_content])
+ limit_content=content_limit,
+ up_dy_content=str(content)
.replace("https://", str())
.replace("http://", str()),
- up_dy_media=MessageSegment.image(data["pic"]) if data.get("pic") else str(),
up_dy_link="https://t.bilibili.com/" + str(data["dynamic_id"]),
)