diff options
| -rw-r--r-- | ATRI/plugins/twitter/__init__.py | 21 | ||||
| -rw-r--r-- | ATRI/plugins/twitter/data_source.py | 8 | ||||
| -rw-r--r-- | ATRI/plugins/twitter/db.py | 6 | 
3 files changed, 24 insertions, 11 deletions
| diff --git a/ATRI/plugins/twitter/__init__.py b/ATRI/plugins/twitter/__init__.py index 76dc81e..de92788 100644 --- a/ATRI/plugins/twitter/__init__.py +++ b/ATRI/plugins/twitter/__init__.py @@ -51,6 +51,7 @@ async def _td_deal_add_sub(      await sub.add_sub(tid, group_id)      await sub.update_sub(          tid, +        group_id,          {              "name": t_name,              "screen_name": t_screen_name, @@ -149,7 +150,7 @@ async def _check_td():          m: TwitterSubscription = tq.get_nowait()          log.info(f"准备查询推主 {m.name}@{m.screen_name} 的动态,队列剩余 {tq.qsize()}") -        ts = int(m.last_update.timestamp()) +        ts = m.last_update.timestamp()          info: dict = await sub.get_twitter_user_info(m.screen_name)          if not info.get("status", list()):              log.warning(f"无法获取推主 {m.name}@{m.screen_name} 的动态") @@ -159,17 +160,27 @@ async def _check_td():          t_time = info["status"]["created_at"]          time_patt = "%a %b %d %H:%M:%S +0000 %Y" -        ts_t = datetime.strptime(t_time, time_patt).timestamp() +        raw_t = datetime.strptime(t_time, time_patt) + timedelta(hours=8) +        ts_t = raw_t.timestamp()          if ts < ts_t: + +            raw_media = info["status"]["entities"].get("media", dict()) +            if raw_media: +                pic = raw_media[0]["media_url"] +                url = raw_media[0]["url"] +            else: +                pic = str() +                url = str() +              data = {                  "name": info["name"],                  "content": info["status"]["text"], -                "pic": info["status"]["media"]["media_url"], -                "s_id": info["status"]["id"], +                "pic": pic, +                "to_url": url,              }              content = sub.gen_output(data)              bot = get_bot()              await bot.send_group_msg(group_id=m.group_id, message=content) -            await sub.update_sub(tid, {"group_id": m.group_id, "last_update": ts_t}) +            await sub.update_sub(tid, m.group_id, {"last_update": raw_t}) diff --git a/ATRI/plugins/twitter/data_source.py b/ATRI/plugins/twitter/data_source.py index 1695820..0ea7231 100644 --- a/ATRI/plugins/twitter/data_source.py +++ b/ATRI/plugins/twitter/data_source.py @@ -37,10 +37,10 @@ class TwitterDynamicSubscriptor(Service):          except TwitterDynamicError:              raise TwitterDynamicError("添加订阅失败") -    async def update_sub(self, tid: int, update_map: dict): +    async def update_sub(self, tid: int, group_id: int, update_map: dict):          try:              async with DB() as db: -                await db.update_sub(tid, update_map) +                await db.update_sub(tid, group_id, update_map)          except TwitterDynamicError:              raise TwitterDynamicError("更新订阅失败") @@ -81,7 +81,7 @@ class TwitterDynamicSubscriptor(Service):          screen_name = data.get("screen_name", None)          return _name, screen_name -    async def gen_output(self, data: dict, limit_content: int = 100) -> str: +    def gen_output(self, data: dict, limit_content: int = 100) -> str:          """生成动态信息          Args: @@ -98,7 +98,7 @@ class TwitterDynamicSubscriptor(Service):              .replace("https://", str())              .replace("http://", str()),              t_dy_media=MessageSegment.image(data["pic"]) if data.get("pic") else str(), -            t_dy_link="twitter.com/nihui/status/" + data["s_id"], +            t_dy_link=str(data["to_url"]).replace("https://", str()),          ) diff --git a/ATRI/plugins/twitter/db.py b/ATRI/plugins/twitter/db.py index 52bedd5..69c4611 100644 --- a/ATRI/plugins/twitter/db.py +++ b/ATRI/plugins/twitter/db.py @@ -11,8 +11,10 @@ class DB:      async def add_sub(self, tid: int, group_id: int):          await TwitterSubscription.create(tid=tid, group_id=group_id) -    async def update_sub(self, tid: int, update_map: dict): -        await TwitterSubscription.filter(tid=tid).update(**update_map) +    async def update_sub(self, tid: int, group_id: int, update_map: dict): +        await TwitterSubscription.filter(tid=tid, group_id=group_id).update( +            **update_map +        )      async def del_sub(self, query_map: dict):          await TwitterSubscription.filter(**query_map).delete() | 
