diff options
Diffstat (limited to 'ATRI')
-rw-r--r-- | ATRI/plugins/bilibili_dynamic/__init__.py | 4 | ||||
-rw-r--r-- | ATRI/plugins/bilibili_dynamic/data_source.py | 4 | ||||
-rw-r--r-- | ATRI/plugins/rss/rss_mikanan/__init__.py | 4 | ||||
-rw-r--r-- | ATRI/plugins/rss/rss_rsshub/__init__.py | 4 | ||||
-rw-r--r-- | ATRI/plugins/status.py | 14 | ||||
-rw-r--r-- | ATRI/plugins/twitter/__init__.py | 4 | ||||
-rw-r--r-- | ATRI/utils/__init__.py | 67 |
7 files changed, 59 insertions, 42 deletions
diff --git a/ATRI/plugins/bilibili_dynamic/__init__.py b/ATRI/plugins/bilibili_dynamic/__init__.py index 7459a15..c47feed 100644 --- a/ATRI/plugins/bilibili_dynamic/__init__.py +++ b/ATRI/plugins/bilibili_dynamic/__init__.py @@ -16,8 +16,8 @@ from nonebot.adapters.onebot.v11 import Message, MessageSegment, GroupMessageEve from ATRI.log import log from ATRI.service import Service +from ATRI.utils import TimeDealer from ATRI.permission import MASTER, ADMIN -from ATRI.utils import timestamp2datetime from ATRI.utils.apscheduler import scheduler from ATRI.database import BilibiliSubscription @@ -192,7 +192,7 @@ async def _(): m.uid, m.group_id, { - "last_update": timestamp2datetime(i["timestamp"]), + "last_update": TimeDealer(float(i["timestamp"])).to_datetime(), }, ) if _pic: diff --git a/ATRI/plugins/bilibili_dynamic/data_source.py b/ATRI/plugins/bilibili_dynamic/data_source.py index 26ebf50..2bdfee9 100644 --- a/ATRI/plugins/bilibili_dynamic/data_source.py +++ b/ATRI/plugins/bilibili_dynamic/data_source.py @@ -3,7 +3,7 @@ from datetime import datetime from operator import itemgetter from ATRI.message import MessageBuilder -from ATRI.utils import timestamp2datetime +from ATRI.utils import TimeDealer from ATRI.exceptions import BilibiliDynamicError from .db import DB @@ -95,7 +95,7 @@ class BilibiliDynamicSubscriptor: pattern["like"] = desc["like"] pattern["dynamic_id"] = desc["dynamic_id"] pattern["timestamp"] = desc["timestamp"] - pattern["time"] = timestamp2datetime(desc["timestamp"]) + pattern["time"] = TimeDealer(float(desc["timestamp"])).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 2c577ee..fb4b23c 100644 --- a/ATRI/plugins/rss/rss_mikanan/__init__.py +++ b/ATRI/plugins/rss/rss_mikanan/__init__.py @@ -17,7 +17,7 @@ from ATRI.log import log from ATRI.service import Service from ATRI.permission import ADMIN from ATRI.message import MessageBuilder -from ATRI.utils import timestamp2datetime +from ATRI.utils import TimeDealer from ATRI.utils.apscheduler import scheduler from ATRI.database import RssMikananiSubcription @@ -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": timestamp2datetime(m_t)} + data._id, data.group_id, {"update_time": TimeDealer(m_t).to_datetime()} ) diff --git a/ATRI/plugins/rss/rss_rsshub/__init__.py b/ATRI/plugins/rss/rss_rsshub/__init__.py index 969fe0a..137ec88 100644 --- a/ATRI/plugins/rss/rss_rsshub/__init__.py +++ b/ATRI/plugins/rss/rss_rsshub/__init__.py @@ -16,7 +16,7 @@ from nonebot.adapters.onebot.v11 import Message, GroupMessageEvent from ATRI.log import log from ATRI.service import Service from ATRI.permission import ADMIN -from ATRI.utils import timestamp2datetime +from ATRI.utils import TimeDealer from ATRI.utils.apscheduler import scheduler from ATRI.database import RssRsshubSubcription @@ -164,5 +164,5 @@ async def _(): 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": timestamp2datetime(ts_t)} + m._id, m.group_id, {"update_time": TimeDealer(ts_t).to_datetime()} ) diff --git a/ATRI/plugins/status.py b/ATRI/plugins/status.py index e7ed842..d6a5682 100644 --- a/ATRI/plugins/status.py +++ b/ATRI/plugins/status.py @@ -11,6 +11,7 @@ from ATRI.log import log from ATRI.service import Service from ATRI.message import MessageBuilder from ATRI.exceptions import GetStatusError +from ATRI.utils import Limiter from ATRI.utils.apscheduler import scheduler @@ -35,7 +36,10 @@ async def _(): await status.finish(msg) [email protected]_job("interval", name="状态检查", minutes=15, misfire_grace_time=15) +limiter = Limiter(5, 21600) + + [email protected]_job("interval", name="状态检查", minutes=30, misfire_grace_time=15) async def _(): log.info("检查资源消耗中...") msg, stat = get_status() @@ -46,8 +50,12 @@ async def _(): bot = get_bot() except Exception: bot = None - - if bot: await plugin.send_to_master(msg) + if not limiter.check("114514"): + try: + if bot: await plugin.send_to_master(msg) + limiter.increase("114514") + except Exception: + return else: log.info("资源消耗正常") diff --git a/ATRI/plugins/twitter/__init__.py b/ATRI/plugins/twitter/__init__.py index 2cbdb1b..6e69cc1 100644 --- a/ATRI/plugins/twitter/__init__.py +++ b/ATRI/plugins/twitter/__init__.py @@ -17,7 +17,7 @@ from nonebot.adapters.onebot.v11 import Message, MessageSegment, GroupMessageEve from ATRI.log import log from ATRI.service import Service from ATRI.permission import ADMIN -from ATRI.utils import timestamp2datetime +from ATRI.utils import TimeDealer from ATRI.utils.apscheduler import scheduler from ATRI.permission import MASTER from ATRI.database import TwitterSubscription @@ -215,7 +215,7 @@ async def _check_td(): log.warning("推信息发送失败") await sub.update_sub( - m.tid, m.group_id, {"last_update": timestamp2datetime(ts_t)} + m.tid, m.group_id, {"last_update": TimeDealer(ts_t).to_datetime()} ) if _pic: pic = Message(MessageSegment.image(_pic)) diff --git a/ATRI/utils/__init__.py b/ATRI/utils/__init__.py index a1a7f3b..9ce3735 100644 --- a/ATRI/utils/__init__.py +++ b/ATRI/utils/__init__.py @@ -2,8 +2,6 @@ import os import re import json import pytz -import yaml -import time import string import asyncio import aiofiles @@ -15,42 +13,53 @@ from collections import defaultdict from aiofiles.threadpool.text import AsyncTextIOWrapper -def timestamp2datetimestr(timestamp: int) -> str: - format = "%Y-%m-%d %H:%M:%S" - tt = time.localtime(timestamp) - dt = time.strftime(format, tt) - return dt +def gen_random_str(k: int) -> str: + return str().join(sample(string.ascii_letters + string.digits, k)) -def timestamp2datetime(value: float) -> datetime: - tz = pytz.timezone("Asia/Shanghai") - return datetime.fromtimestamp(value, tz=tz) +class TimeDealer: + def __init__(self, timestamp: float): + """对时间进行处理 + Args: + timestamp (int): _description_ + """ + self.timestamp = timestamp -def now_time() -> float: - """获取当前时间的整数.""" - now_ = datetime.now() - hour = now_.hour - minute = now_.minute - now = hour + minute / 60 - return now + def to_str( + self, tz=pytz.timezone("Asia/Shanghai"), format: str = "%Y-%m-%d %H:%M:%S" + ) -> str: + """将时间戳转换为格式化形式 + Args: + tz: 时区. 默认: `pytz.timezone("Asia/Shanghai")`. + format: 时间格式. 默认: `"%Y-%m-%d %H:%M:%S"`. -def load_yml(file: Path, encoding="utf-8") -> dict: - """打开 yaml 格式的文件.""" - with open(file, "r", encoding=encoding) as f: - data = yaml.safe_load(f) - return data + Returns: + str: 格式化后的时间戳 + """ + return datetime.fromtimestamp(self.timestamp, tz).strftime(format) + def to_datetime(self, tz=pytz.timezone("Asia/Shanghai")) -> datetime: + """将时间戳转化成 datetime 类型 -def safe_string(value): - if isinstance(value, bytes): - return value.decode() - return str(value) + Args: + tz: 时区. 默认: `pytz.timezone("Asia/Shanghai")`. + Returns: + datetime: 转换后的 datetime 类型 + """ + return datetime.fromtimestamp(self.timestamp, tz) -def gen_random_str(k: int) -> str: - return str().join(sample(string.ascii_letters + string.digits, k)) + def int_now(self) -> float: + """将时间戳转换为一天中整数的时间. + e.g. 9:30 > 9.50 + + Returns: + float: 转换后的整数时间 + """ + time = datetime.fromtimestamp(self.timestamp) + return time.hour + time.minute / 60 class ListDealer: @@ -241,7 +250,7 @@ class Limiter: loop = asyncio.get_running_loop() loop.call_later(self.down_time, self.reset) return False - + return True def increase(self, key: str, times: int = 1) -> None: |