summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyomotoi <[email protected]>2022-03-20 09:06:49 +0800
committerKyomotoi <[email protected]>2022-03-20 09:08:14 +0800
commit9ebeff70994191abe6052e53bb58541f08917f5a (patch)
treee0374902efeb615e0b2f2d78bc36d243d3b727a9
parent019b69003719f90a1c687bdb41e6b395d338d3fa (diff)
downloadATRI-9ebeff70994191abe6052e53bb58541f08917f5a.tar.gz
ATRI-9ebeff70994191abe6052e53bb58541f08917f5a.tar.bz2
ATRI-9ebeff70994191abe6052e53bb58541f08917f5a.zip
✨ 添加更新检查
-rw-r--r--ATRI/plugins/essential.py22
-rw-r--r--ATRI/utils/check_update.py58
2 files changed, 74 insertions, 6 deletions
diff --git a/ATRI/plugins/essential.py b/ATRI/plugins/essential.py
index 6ec5401..f71a472 100644
--- a/ATRI/plugins/essential.py
+++ b/ATRI/plugins/essential.py
@@ -2,6 +2,7 @@ import os
import json
import shutil
import asyncio
+from time import sleep
from datetime import datetime
from pydantic.main import BaseModel
from random import choice, randint
@@ -33,6 +34,7 @@ from ATRI.log import logger as log
from ATRI.config import BotSelfConfig
from ATRI.utils import MessageChecker
from ATRI.utils.apscheduler import scheduler
+from ATRI.utils.check_update import CheckUpdate
driver = ATRI.driver()
@@ -50,6 +52,17 @@ os.makedirs(TEMP_PATH, exist_ok=True)
@driver.on_startup
async def startup():
log.info(f"Now running: {ATRI.__version__}")
+
+ log.info("Starting to check update...")
+ log.info(await CheckUpdate.show_latest_commit_info())
+ sleep(1)
+
+ l_v, l_v_t = await CheckUpdate.show_latest_version()
+ if l_v != ATRI.__version__:
+ log.warning("New version has been released, please update.")
+ log.warning(f"Latest version: {l_v} Update time: {l_v_t}")
+ sleep(3)
+
log.info("アトリは、高性能ですから!")
@@ -106,14 +119,9 @@ class GroupRequestInfo(BaseModel):
is_approve: bool
-__doc__ = """
-对bot基础/必须请求进行处理
-"""
-
-
class Essential(Service):
def __init__(self):
- Service.__init__(self, "基础部件", __doc__)
+ Service.__init__(self, "基础部件", "对bot基础/必须请求进行处理")
friend_add_event = Essential().on_request("好友添加", "好友添加检测")
@@ -279,6 +287,7 @@ async def _recall_group_event(bot: Bot, event: GroupRecallNoticeEvent):
except BaseException:
return
+ log.debug(f"Recall raw msg:\n{repo}")
user = event.user_id
group = event.group_id
repo = repo["message"]
@@ -310,6 +319,7 @@ async def _recall_private_event(bot: Bot, event: FriendRecallNoticeEvent):
except BaseException:
return
+ log.debug(f"Recall raw msg:\n{repo}")
user = event.user_id
repo = repo["message"]
diff --git a/ATRI/utils/check_update.py b/ATRI/utils/check_update.py
new file mode 100644
index 0000000..b2f8b53
--- /dev/null
+++ b/ATRI/utils/check_update.py
@@ -0,0 +1,58 @@
+from ATRI.exceptions import RequestError
+
+from . import request
+
+
+REPO_COMMITS_URL = "https://api.github.com/repos/Kyomotoi/ATRI/commits"
+REPO_RELEASE_URL = "https://api.github.com/repos/Kyomotoi/ATRI/releases"
+
+
+class CheckUpdate:
+
+ @staticmethod
+ async def _get_commits_info() -> dict:
+ req = await request.get(REPO_COMMITS_URL)
+ return req.json()
+
+ @staticmethod
+ async def _get_release_info() -> dict:
+ req = await request.get(REPO_RELEASE_URL)
+ return req.json()
+
+ @classmethod
+ async def show_latest_commit_info(cls) -> str:
+ try:
+ data = await cls._get_commits_info()
+ except RequestError:
+ raise RequestError("Getting commit info timeout...")
+
+ try:
+ commit_data: dict = data[0]
+ except Exception:
+ raise Exception("GitHub has been error!!!")
+
+ c_info = commit_data["commit"]
+ c_msg = c_info["message"]
+ c_sha = commit_data["sha"][0:5]
+ c_time = c_info["author"]["date"]
+
+ return f"Latest commit {c_msg} | sha: {c_sha} | time: {c_time}"
+
+ @classmethod
+ async def show_latest_version(cls) -> tuple:
+ try:
+ data = await cls._get_release_info()
+ except RequestError:
+ raise RequestError("Getting release list timeout...")
+
+ try:
+ release_data: dict = data[0]
+ except Exception:
+ raise Exception("GitHub has been error!!!")
+
+ l_v = release_data["tag_name"]
+ l_v_t = release_data["published_at"]
+ return l_v, l_v_t
+
+
+