diff options
| author | Kyomotoi <kyomotoiowo@gmail.com> | 2022-06-22 20:28:16 +0800 | 
|---|---|---|
| committer | Kyomotoi <kyomotoiowo@gmail.com> | 2022-06-22 20:28:16 +0800 | 
| commit | e676d6e6d4d42db55a4c6811e102747eee401f6a (patch) | |
| tree | 0041923362e66518dfa8f1520767c22514ba9cf5 /ATRI | |
| parent | 679393f4f65701012da2160e72b2fda3584272ca (diff) | |
| download | ATRI-e676d6e6d4d42db55a4c6811e102747eee401f6a.tar.gz ATRI-e676d6e6d4d42db55a4c6811e102747eee401f6a.tar.bz2 ATRI-e676d6e6d4d42db55a4c6811e102747eee401f6a.zip | |
🚸🎨 提高用户体验, 优化代码
Diffstat (limited to 'ATRI')
| -rw-r--r-- | ATRI/plugins/bilibili_dynamic/__init__.py | 87 | ||||
| -rw-r--r-- | ATRI/plugins/bilibili_dynamic/data_source.py | 33 | 
2 files changed, 71 insertions, 49 deletions
| diff --git a/ATRI/plugins/bilibili_dynamic/__init__.py b/ATRI/plugins/bilibili_dynamic/__init__.py index cbbeead..8a6a007 100644 --- a/ATRI/plugins/bilibili_dynamic/__init__.py +++ b/ATRI/plugins/bilibili_dynamic/__init__.py @@ -45,55 +45,49 @@ async def _bd_deal_add_sub(      __id = int(_id)      group_id = event.group_id -    sub = BilibiliDynamicSubscriptor() - -    up_nickname = await sub.get_up_nickname(__id) -    if not up_nickname: -        await add_sub.finish(f"无法获取id为 {_id} 的up主信息...操作失败了") -    query_result = await sub.get_sub_list(__id, group_id) -    if len(query_result): -        await add_sub.finish(f"该up主[{up_nickname}]已在本群订阅列表中啦!") - -    await sub.add_sub(__id, group_id) -    await sub.update_sub( -        __id, group_id, {"up_nickname": up_nickname, "last_update": datetime.utcnow()} -    ) -    await add_sub.finish(f"成功订阅名为[{up_nickname}]up主的动态~!") +    result = await BilibiliDynamicSubscriptor().add_sub(__id, group_id) +    await add_sub.finish(result)  del_sub = BilibiliDynamicSubscriptor().cmd_as_group("del", "删除b站up主订阅")  @del_sub.handle() -async def _bd_del_sub(matcher: Matcher, args: Message = CommandArg()): -    msg = args.extract_plain_text() -    if msg: -        matcher.set_arg("bd_del_sub_id", args) +async def _bd_del_sub(event: GroupMessageEvent): +    group_id = event.group_id +    sub = BilibiliDynamicSubscriptor() +    query_result = await sub.get_sub_list(group_id=group_id) +    if not query_result: +        await del_sub.finish("本群还未订阅任何up主呢...") -@del_sub.got("bd_del_sub_id", "up主id呢?速速") +    subs = list() +    for i in query_result: +        subs.append([i.up_nickname, i.uid]) + +    output = "本群订阅的up列表如下~\n" + tabulate( +        subs, headers=["up主", "uid"], tablefmt="plain", showindex=True +    ) +    await del_sub.send(output) + + +@del_sub.got("bd_del_sub_id", "取消订阅的up主uid呢?速速\n(键入 1 以取消)")  async def _bd_deal_del_sub(      event: GroupMessageEvent, _id: str = ArgPlainText("bd_del_sub_id")  ):      patt = r"^\d+$"      if not re.match(patt, _id): -        await add_sub.reject("这似乎不是id呢,请重新输入:") +        await add_sub.reject("这似乎不是uid呢,请重新输入:") + +    if _id == "1": +        await del_sub.finish("已取消操作~")      __id = int(_id)      group_id = event.group_id -    sub = BilibiliDynamicSubscriptor() - -    up_nickname = await sub.get_up_nickname(__id) -    if not up_nickname: -        await add_sub.finish(f"无法获取id为 {__id} 的up主信息...操作失败了") -    query_result = await sub.get_sub_list(__id, group_id) -    if not query_result: -        await del_sub.finish(f"取消订阅失败...该up主[{up_nickname}]并不在本群订阅列表中") - -    await sub.del_sub(__id, group_id) -    await del_sub.finish(f"成功取消该up主[{up_nickname}]的订阅~") +    result = await BilibiliDynamicSubscriptor().del_sub(__id, group_id) +    await del_sub.finish(result)  get_sub_list = BilibiliDynamicSubscriptor().cmd_as_group( @@ -112,11 +106,15 @@ async def _bd_get_sub_list(event: GroupMessageEvent):      subs = list()      for i in query_result: -        tm = i.last_update.replace(tzinfo=pytz.timezone("Asia/Shanghai")) -        subs.append([i.up_nickname, i.uid, tm + timedelta(hours=8)]) +        raw_tm = ( +            i.last_update.replace(tzinfo=pytz.timezone("Asia/Shanghai")) +            + timedelta(hours=8) +        ).timestamp() +        tm = datetime.fromtimestamp(raw_tm).strftime("%m-%d %H:%M:%S") +        subs.append([i.up_nickname, tm])      output = "本群订阅的up列表如下~\n" + tabulate( -        subs, headers=["up主", "uid", "最后更新时间"], tablefmt="plain", showindex=True +        subs, headers=["up主", "最后更新时间"], tablefmt="plain", showindex=True      )      await get_sub_list.finish(output) @@ -176,15 +174,15 @@ async def _check_bd():              await tq.put(i)      else:          m: BilibiliSubscription = tq.get_nowait() -        log.info(f"准备查询up主[{m.up_nickname}]的动态,队列剩余 {tq.qsize()}") +        log.info(f"准备查询up主 {m.up_nickname} 的动态,队列剩余 {tq.qsize()}") -        ts = int(m.last_update.timestamp()) +        ts = m.last_update.timestamp()          info: dict = await sub.get_up_recent_dynamic(m.uid)          result = list()          if info.get("cards", list()):              result = sub.extract_dyanmic(info["cards"])          if not result: -            log.warning(f"无法获取up主[{m.up_nickname}]的动态") +            log.warning(f"无法获取up主 {m.up_nickname} 的动态")              return          for i in result: @@ -195,14 +193,6 @@ async def _check_bd():                  bot = get_bot()                  await bot.send_group_msg(group_id=m.group_id, message=content) -                if _pic: -                    pic = Message(MessageSegment.image(_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, @@ -210,4 +200,11 @@ async def _check_bd():                          "last_update": timestamp2datetime(i["timestamp"]),                      },                  ) +                if _pic: +                    pic = Message(MessageSegment.image(_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)                  break diff --git a/ATRI/plugins/bilibili_dynamic/data_source.py b/ATRI/plugins/bilibili_dynamic/data_source.py index 64045e3..780f41c 100644 --- a/ATRI/plugins/bilibili_dynamic/data_source.py +++ b/ATRI/plugins/bilibili_dynamic/data_source.py @@ -1,8 +1,8 @@  import json +from datetime import datetime  from operator import itemgetter  from nonebot.permission import SUPERUSER -from nonebot.adapters.onebot.v11 import MessageSegment  from nonebot.adapters.onebot.v11 import GROUP_OWNER, GROUP_ADMIN  from ATRI.service import Service @@ -33,7 +33,7 @@ class BilibiliDynamicSubscriptor(Service):              main_cmd="/bd",          ) -    async def add_sub(self, uid: int, group_id: int): +    async def __add_sub(self, uid: int, group_id: int):          try:              async with DB() as db:                  await db.add_sub(uid, group_id) @@ -47,7 +47,7 @@ class BilibiliDynamicSubscriptor(Service):          except Exception:              raise BilibiliDynamicError("更新订阅失败") -    async def del_sub(self, uid: int, group_id: int): +    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}) @@ -73,7 +73,7 @@ class BilibiliDynamicSubscriptor(Service):          except Exception:              raise BilibiliDynamicError("获取全部订阅列表失败") -    async def get_up_nickname(self, uid: int) -> str: +    async def __get_up_nickname(self, uid: int) -> str:          api = API(uid)          resp = await api.get_user_info()          data = resp.get("data", dict()) @@ -170,3 +170,28 @@ class BilibiliDynamicSubscriptor(Service):              .replace("http://", str()),              up_dy_link="https://t.bilibili.com/" + str(data["dynamic_id"]),          ) + +    async def add_sub(self, uid: int, group_id: int) -> str: +        up_nickname = await self.__get_up_nickname(uid) +        if not up_nickname: +            return f"无法获取id为 {uid} 的up主信息...操作失败了" + +        query_result = await self.get_sub_list(uid, group_id) +        if query_result: +            return f"该up主 {up_nickname} 已在本群订阅列表中啦!" + +        await self.__add_sub(uid, group_id) +        await self.update_sub( +            uid, +            group_id, +            {"up_nickname": up_nickname, "last_update": datetime.utcnow()}, +        ) +        return f"成功订阅名为 {up_nickname} up主的动态~!" + +    async def del_sub(self, uid: int, group_id: int) -> str: +        query_result = await self.get_sub_list(uid, group_id) +        if not query_result: +            return f"该uid: {uid} 未在本群订阅列表中啦!" + +        await self.__del_sub(uid, group_id) +        return f"成功取消订阅uid为 {uid} up主的动态~!" | 
