diff options
author | Kyomotoi <[email protected]> | 2022-06-15 12:59:24 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2022-06-15 12:59:24 +0800 |
commit | 5469974df1fd38ef76f348cd8b134a1450f36f7d (patch) | |
tree | 0a8030e6948680acdc79a6acb06d9aff0c77e362 | |
parent | 635541092c4d0f8b6fc4a8f1a73bf0a5d63b15f0 (diff) | |
download | ATRI-5469974df1fd38ef76f348cd8b134a1450f36f7d.tar.gz ATRI-5469974df1fd38ef76f348cd8b134a1450f36f7d.tar.bz2 ATRI-5469974df1fd38ef76f348cd8b134a1450f36f7d.zip |
🚑️ 修复订阅时区问题、更新订阅时缺少必要性条件
-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() |