diff options
-rw-r--r-- | ATRI/plugins/bilibili_dynamic/__init__.py | 7 | ||||
-rw-r--r-- | ATRI/plugins/bilibili_dynamic/data_source.py | 4 | ||||
-rw-r--r-- | ATRI/plugins/rss/rss_mikanan/__init__.py | 14 | ||||
-rw-r--r-- | ATRI/plugins/rss/rss_rsshub/__init__.py | 40 | ||||
-rw-r--r-- | ATRI/plugins/thesaurus/__init__.py | 8 | ||||
-rw-r--r-- | ATRI/plugins/thesaurus/data_source.py | 7 | ||||
-rw-r--r-- | ATRI/plugins/twitter/__init__.py | 27 | ||||
-rw-r--r-- | ATRI/utils/__init__.py | 21 |
8 files changed, 67 insertions, 61 deletions
diff --git a/ATRI/plugins/bilibili_dynamic/__init__.py b/ATRI/plugins/bilibili_dynamic/__init__.py index c47feed..7c30193 100644 --- a/ATRI/plugins/bilibili_dynamic/__init__.py +++ b/ATRI/plugins/bilibili_dynamic/__init__.py @@ -1,8 +1,7 @@ import re -import pytz import asyncio from tabulate import tabulate -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone as tz from apscheduler.triggers.base import BaseTrigger from apscheduler.triggers.combining import AndTrigger @@ -106,7 +105,7 @@ async def _bd_get_sub_list(event: GroupMessageEvent): subs = list() for i in query_result: raw_tm = ( - i.last_update.replace(tzinfo=pytz.timezone("Asia/Shanghai")) + i.last_update.replace(tzinfo=tz(timedelta(hours=8))) + timedelta(hours=8) ).timestamp() tm = datetime.fromtimestamp(raw_tm).strftime("%m-%d %H:%M:%S") @@ -192,7 +191,7 @@ async def _(): m.uid, m.group_id, { - "last_update": TimeDealer(float(i["timestamp"])).to_datetime(), + "last_update": TimeDealer(float(i["timestamp"]), tz(timedelta(hours=8))).to_datetime(), }, ) if _pic: diff --git a/ATRI/plugins/bilibili_dynamic/data_source.py b/ATRI/plugins/bilibili_dynamic/data_source.py index 2bdfee9..1308d0f 100644 --- a/ATRI/plugins/bilibili_dynamic/data_source.py +++ b/ATRI/plugins/bilibili_dynamic/data_source.py @@ -1,5 +1,5 @@ import json -from datetime import datetime +from datetime import datetime, timedelta, timezone as tz from operator import itemgetter from ATRI.message import MessageBuilder @@ -95,7 +95,7 @@ class BilibiliDynamicSubscriptor: pattern["like"] = desc["like"] pattern["dynamic_id"] = desc["dynamic_id"] pattern["timestamp"] = desc["timestamp"] - pattern["time"] = TimeDealer(float(desc["timestamp"])).to_datetime() + pattern["time"] = TimeDealer(float(desc["timestamp"]), tz(timedelta(hours=8))).to_datetime() pattern["type_zh"] = str() # alternative 部分 diff --git a/ATRI/plugins/rss/rss_mikanan/__init__.py b/ATRI/plugins/rss/rss_mikanan/__init__.py index fb4b23c..cf4463b 100644 --- a/ATRI/plugins/rss/rss_mikanan/__init__.py +++ b/ATRI/plugins/rss/rss_mikanan/__init__.py @@ -1,7 +1,6 @@ -import pytz import asyncio from tabulate import tabulate -from datetime import timedelta, datetime +from datetime import datetime, timedelta, timezone as tz from apscheduler.triggers.base import BaseTrigger from apscheduler.triggers.combining import AndTrigger @@ -136,10 +135,11 @@ async def _(): data: RssMikananiSubcription = tq.get_nowait() log.info(f"准备查询 Mikan: {data.title} 的动态, 队列剩余 {tq.qsize()}") - raw_ts = data.update_time.replace( - tzinfo=pytz.timezone("Asia/Shanghai") - ) + timedelta(hours=8) - ts = raw_ts.timestamp() + # raw_ts = data.update_time.replace( + # tzinfo=pytz.timezone("Asia/Shanghai") + # ) + timedelta(hours=8) + # ts = raw_ts.timestamp() + ts = data.update_time.timestamp() info = await sub.get_mikan_info(data.rss_link) if not info: @@ -167,5 +167,5 @@ async def _(): bot = get_bot() await bot.send_group_msg(group_id=data.group_id, message=repo) await sub.update_sub( - data._id, data.group_id, {"update_time": TimeDealer(m_t).to_datetime()} + data._id, data.group_id, {"update_time": TimeDealer(m_t, tz(timedelta(hours=8))).to_datetime()} ) diff --git a/ATRI/plugins/rss/rss_rsshub/__init__.py b/ATRI/plugins/rss/rss_rsshub/__init__.py index 137ec88..284ddb5 100644 --- a/ATRI/plugins/rss/rss_rsshub/__init__.py +++ b/ATRI/plugins/rss/rss_rsshub/__init__.py @@ -1,7 +1,7 @@ -import pytz +# from dateutil import tz import asyncio from tabulate import tabulate -from datetime import timedelta, datetime +from datetime import datetime, timedelta, timezone as tz from apscheduler.triggers.base import BaseTrigger from apscheduler.triggers.combining import AndTrigger @@ -17,6 +17,7 @@ from ATRI.log import log from ATRI.service import Service from ATRI.permission import ADMIN from ATRI.utils import TimeDealer +from ATRI.message import MessageBuilder from ATRI.utils.apscheduler import scheduler from ATRI.database import RssRsshubSubcription @@ -97,7 +98,10 @@ async def _(event: GroupMessageEvent): subs = list() for i in query_result: - subs.append([i.update_time, i.title]) + t = i.update_time.replace( + tzinfo=tz(timedelta(hours=8)) + ) + subs.append([t, i.title]) output = "本群的 RSSHub 订阅列表如下~\n" + tabulate( subs, headers=["最后更新时间", "标题"], tablefmt="plain" @@ -135,10 +139,12 @@ async def _(): m: RssRsshubSubcription = tq.get_nowait() log.info(f"准备查询 RssHub: {m.rss_link} 的动态, 队列剩余 {tq.qsize()}") - raw_ts = m.update_time.replace( - tzinfo=pytz.timezone("Asia/Shanghai") - ) + timedelta(hours=8) - ts = raw_ts.timestamp() + # raw_ts = m.update_time.replace( + # tzinfo=pytz.timezone("Asia/Shanghai") + # ) + timedelta(hours=8) + # ts = raw_ts.timestamp() + ts = m.update_time.timestamp() + log.info(f"db time: {ts}") info: dict = await sub.get_rsshub_info(m.rss_link) if not info: @@ -148,21 +154,27 @@ async def _(): t_time = info["item"][0]["pubDate"] time_patt = "%a, %d %b %Y %H:%M:%S GMT" - raw_t = datetime.strptime(t_time, time_patt) + timedelta(hours=8) - ts_t = raw_t.timestamp() + # raw_t = datetime.strptime(t_time, time_patt) + timedelta(hours=8) + # ts_t = raw_t.timestamp() + log.info(f"rsshub time: {t_time}") + ts_t = datetime.strptime(t_time, time_patt).timestamp() + log.info(f"rsshub time: {ts_t}") if ts < ts_t: item = info["item"][0] title = item["title"] link = item["link"] - repo = f"""本群订阅的 RssHub 更新啦! - {title} - {link} - """ + repo = ( + MessageBuilder("本群订阅的 RssHub 更新啦!") + .text(f"标题: {title}") + .text( + f"链接: {link}".replace("https://", str()).replace("http://", str()) + ) + ) bot = get_bot() await bot.send_group_msg(group_id=m.group_id, message=repo) await sub.update_sub( - m._id, m.group_id, {"update_time": TimeDealer(ts_t).to_datetime()} + m._id, m.group_id, {"update_time": TimeDealer(ts_t, tz(timedelta(hours=0))).to_datetime()} ) diff --git a/ATRI/plugins/thesaurus/__init__.py b/ATRI/plugins/thesaurus/__init__.py index 5b6af44..f1860c9 100644 --- a/ATRI/plugins/thesaurus/__init__.py +++ b/ATRI/plugins/thesaurus/__init__.py @@ -1,5 +1,5 @@ -import pytz from tabulate import tabulate +from datetime import timedelta, timezone as tz from nonebot.matcher import Matcher from nonebot.params import ArgPlainText, CommandArg, ArgStr @@ -710,7 +710,7 @@ async def _info_normal_get_item_info( operator=item_info.operator, operator_id=item_info.operator_id, update_time=item_info.update_time.replace( - tzinfo=pytz.timezone("Asia/Shanghai") + tzinfo=tz(timedelta(hours=8)) ), is_vote="是" if item_info.is_vote else "否", vote_list=item_info.vote_list, @@ -752,7 +752,7 @@ async def _info_global_get_item_info(_id: str = ArgPlainText("info_global_item_i operator=item_info.operator, operator_id=item_info.operator_id, update_time=item_info.update_time.replace( - tzinfo=pytz.timezone("Asia/Shanghai") + tzinfo=tz(timedelta(hours=8)) ), is_vote="是" if item_info.is_vote else "否", vote_list=item_info.vote_list, @@ -798,7 +798,7 @@ async def _info_vote_get_item_info( operator=item_info.operator, operator_id=item_info.operator_id, update_time=item_info.update_time.replace( - tzinfo=pytz.timezone("Asia/Shanghai") + tzinfo=tz(timedelta(hours=8)) ), is_vote="是" if item_info.is_vote else "否", vote_list=item_info.vote_list, diff --git a/ATRI/plugins/thesaurus/data_source.py b/ATRI/plugins/thesaurus/data_source.py index 8c12b16..4f99b2c 100644 --- a/ATRI/plugins/thesaurus/data_source.py +++ b/ATRI/plugins/thesaurus/data_source.py @@ -1,5 +1,4 @@ -import pytz -from datetime import datetime +from datetime import datetime, timedelta, timezone as tz from ATRI.message import MessageBuilder from ATRI.exceptions import ThesaurusError @@ -123,7 +122,7 @@ class ThesaurusManager: "group_id": group_id, "operator": operator, "operator_id": operator_id, - "update_time": datetime.now(pytz.timezone("Asia/Shanghai")), + "update_time": datetime.now(tz(timedelta(hours=8))), "is_vote": is_vote, "vote_list": vote_list, } @@ -158,7 +157,7 @@ class ThesaurusManager: group_id, { "vote_list": vote_list, - "update_time": datetime.now(pytz.timezone("Asia/Shanghai")), + "update_time": datetime.now(tz(timedelta(hours=8))), }, ) diff --git a/ATRI/plugins/twitter/__init__.py b/ATRI/plugins/twitter/__init__.py index 6e69cc1..f80ed4d 100644 --- a/ATRI/plugins/twitter/__init__.py +++ b/ATRI/plugins/twitter/__init__.py @@ -1,8 +1,7 @@ import re -import pytz import asyncio from tabulate import tabulate -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone as tz from apscheduler.triggers.base import BaseTrigger from apscheduler.triggers.combining import AndTrigger @@ -104,12 +103,10 @@ async def _td_get_sub_list(event: GroupMessageEvent): subs = list() for i in query_result: - raw_tm = ( - i.last_update.replace(tzinfo=pytz.timezone("Asia/Shanghai")) - + timedelta(hours=8, minutes=8) + t = ( + i.last_update.replace(tzinfo=tz(timedelta(hours=8))) ).timestamp() - tm = datetime.fromtimestamp(raw_tm).strftime("%m-%d %H:%M:%S") - subs.append([i.name, tm]) + subs.append([i.name, t]) output = "本群订阅的推主列表如下~\n" + tabulate( subs, headers=["推主", "最后更新时间"], tablefmt="plain" @@ -183,10 +180,11 @@ async def _check_td(): log.info(f"准备查询推主 {m.name}@{m.screen_name} 的动态,队列剩余 {tq.qsize()}") - raw_ts = m.last_update.replace( - tzinfo=pytz.timezone("Asia/Shanghai") - ) + timedelta(hours=8, minutes=8) - ts = raw_ts.timestamp() + # raw_ts = m.last_update.replace( + # tzinfo=pytz.timezone("Asia/Shanghai") + # ) + timedelta(hours=8, minutes=8) + # ts = raw_ts.timestamp() + ts = m.last_update.timestamp() info: dict = await sub.get_twitter_user_info(m.screen_name) if not info.get("status", list()): @@ -196,8 +194,9 @@ async def _check_td(): t_time = info["status"]["created_at"] time_patt = "%a %b %d %H:%M:%S +0000 %Y" - raw_t = datetime.strptime(t_time, time_patt) + timedelta(hours=8) - ts_t = raw_t.timestamp() + # raw_t = datetime.strptime(t_time, time_patt) + timedelta(hours=8) + # ts_t = raw_t.timestamp() + ts_t = datetime.strptime(t_time, time_patt).timestamp() if ts < ts_t: raw_media = info["status"]["entities"].get("media", dict()) @@ -215,7 +214,7 @@ async def _check_td(): log.warning("推信息发送失败") await sub.update_sub( - m.tid, m.group_id, {"last_update": TimeDealer(ts_t).to_datetime()} + m.tid, m.group_id, {"last_update": TimeDealer(ts_t, tz(timedelta(hours=0))).to_datetime()} ) if _pic: pic = Message(MessageSegment.image(_pic)) diff --git a/ATRI/utils/__init__.py b/ATRI/utils/__init__.py index 9ce3735..693de6c 100644 --- a/ATRI/utils/__init__.py +++ b/ATRI/utils/__init__.py @@ -1,7 +1,6 @@ import os import re import json -import pytz import string import asyncio import aiofiles @@ -18,38 +17,36 @@ def gen_random_str(k: int) -> str: class TimeDealer: - def __init__(self, timestamp: float): + def __init__(self, timestamp: float, timezone): """对时间进行处理 Args: - timestamp (int): _description_ + timestamp (float): 时间戳 + timezone (_type_): 时区 (datetime.timezone) """ self.timestamp = timestamp + self.timezone = timezone def to_str( - self, tz=pytz.timezone("Asia/Shanghai"), format: str = "%Y-%m-%d %H:%M:%S" + self, format: str = "%Y-%m-%d %H:%M:%S" ) -> str: """将时间戳转换为格式化形式 Args: - tz: 时区. 默认: `pytz.timezone("Asia/Shanghai")`. format: 时间格式. 默认: `"%Y-%m-%d %H:%M:%S"`. Returns: str: 格式化后的时间戳 """ - return datetime.fromtimestamp(self.timestamp, tz).strftime(format) + return datetime.fromtimestamp(self.timestamp, self.timezone).strftime(format) - def to_datetime(self, tz=pytz.timezone("Asia/Shanghai")) -> datetime: + def to_datetime(self) -> datetime: """将时间戳转化成 datetime 类型 - Args: - tz: 时区. 默认: `pytz.timezone("Asia/Shanghai")`. - Returns: datetime: 转换后的 datetime 类型 """ - return datetime.fromtimestamp(self.timestamp, tz) + return datetime.fromtimestamp(self.timestamp, self.timezone) def int_now(self) -> float: """将时间戳转换为一天中整数的时间. @@ -58,7 +55,7 @@ class TimeDealer: Returns: float: 转换后的整数时间 """ - time = datetime.fromtimestamp(self.timestamp) + time = datetime.fromtimestamp(self.timestamp, self.timezone) return time.hour + time.minute / 60 |