summaryrefslogtreecommitdiff
path: root/ATRI
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI')
-rw-r--r--ATRI/plugins/bilibili_dynamic/__init__.py4
-rw-r--r--ATRI/plugins/bilibili_dynamic/data_source.py4
-rw-r--r--ATRI/plugins/rss/rss_mikanan/__init__.py4
-rw-r--r--ATRI/plugins/rss/rss_rsshub/__init__.py4
-rw-r--r--ATRI/plugins/status.py14
-rw-r--r--ATRI/plugins/twitter/__init__.py4
-rw-r--r--ATRI/utils/__init__.py67
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: