summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ATRI/plugins/bilibili_dynamic/__init__.py7
-rw-r--r--ATRI/plugins/bilibili_dynamic/data_source.py4
-rw-r--r--ATRI/plugins/rss/rss_mikanan/__init__.py14
-rw-r--r--ATRI/plugins/rss/rss_rsshub/__init__.py40
-rw-r--r--ATRI/plugins/thesaurus/__init__.py8
-rw-r--r--ATRI/plugins/thesaurus/data_source.py7
-rw-r--r--ATRI/plugins/twitter/__init__.py27
-rw-r--r--ATRI/utils/__init__.py21
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