diff options
| -rw-r--r-- | ATRI/plugins/bilibili_dynamic/__init__.py | 42 | ||||
| -rw-r--r-- | ATRI/plugins/bilibili_dynamic/data_source.py | 25 | 
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"]),          ) | 
