diff options
author | Kyomotoi <[email protected]> | 2022-03-20 09:06:49 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2022-03-20 09:08:14 +0800 |
commit | 9ebeff70994191abe6052e53bb58541f08917f5a (patch) | |
tree | e0374902efeb615e0b2f2d78bc36d243d3b727a9 | |
parent | 019b69003719f90a1c687bdb41e6b395d338d3fa (diff) | |
download | ATRI-9ebeff70994191abe6052e53bb58541f08917f5a.tar.gz ATRI-9ebeff70994191abe6052e53bb58541f08917f5a.tar.bz2 ATRI-9ebeff70994191abe6052e53bb58541f08917f5a.zip |
✨ 添加更新检查
-rw-r--r-- | ATRI/plugins/essential.py | 22 | ||||
-rw-r--r-- | ATRI/utils/check_update.py | 58 |
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 + + + |