mirror of
https://github.com/PaiGramTeam/PamGram.git
synced 2024-11-21 21:58:04 +00:00
✨ 添加更新命令功能
Co-authored-by: omg-xtao <100690902+omg-xtao@users.noreply.github.com>
This commit is contained in:
parent
cd28ef9120
commit
0fa7c4eacc
1
.gitignore
vendored
1
.gitignore
vendored
@ -32,6 +32,7 @@ __pycache__/
|
||||
test_**.html
|
||||
logs/
|
||||
report/
|
||||
data/
|
||||
/resources/*/*/test/
|
||||
plugins/genshin/daily/daily.json
|
||||
metadata/data/
|
||||
|
53
plugins/system/update.py
Normal file
53
plugins/system/update.py
Normal file
@ -0,0 +1,53 @@
|
||||
import json
|
||||
import os
|
||||
|
||||
from aiofiles import open as async_open
|
||||
from telegram import Update, Message
|
||||
from telegram.error import BadRequest, Forbidden
|
||||
from telegram.ext import CallbackContext, CommandHandler
|
||||
|
||||
from core.bot import bot
|
||||
from core.plugin import handler, Plugin
|
||||
from utils.bot import get_all_args
|
||||
from utils.decorators.admins import bot_admins_rights_check
|
||||
from utils.helpers import execute
|
||||
from utils.log import logger
|
||||
|
||||
current_dir = os.getcwd()
|
||||
|
||||
UPDATE_DATA = os.path.join(current_dir, "data", "update.json")
|
||||
|
||||
|
||||
class UpdatePlugin(Plugin):
|
||||
|
||||
@staticmethod
|
||||
async def __async_init__():
|
||||
if os.path.exists(UPDATE_DATA):
|
||||
async with async_open(UPDATE_DATA) as file:
|
||||
data = json.loads(await file.read())
|
||||
try:
|
||||
reply_text = Message.de_json(data, bot.app.bot)
|
||||
await reply_text.edit_text("重启成功")
|
||||
except (BadRequest, Forbidden, KeyError) as exc:
|
||||
logger.error("UpdatePlugin 编辑消息出现错误")
|
||||
logger.exception(exc)
|
||||
os.remove(UPDATE_DATA)
|
||||
|
||||
@handler(CommandHandler, command="update")
|
||||
@bot_admins_rights_check
|
||||
async def update(self, update: Update, context: CallbackContext):
|
||||
user = update.effective_user
|
||||
message = update.effective_message
|
||||
args = get_all_args(context)
|
||||
logger.info(f"用户 {user.full_name}[{user.id}] update命令请求")
|
||||
reply_text = await message.reply_text("正在更新")
|
||||
await execute("git fetch --all")
|
||||
if len(args) > 0:
|
||||
await execute("git reset --hard origin/main")
|
||||
await execute("git pull --all")
|
||||
if len(args) > 0:
|
||||
await execute("poetry install --extras all")
|
||||
await reply_text.edit_text("自动更新成功 正在重启")
|
||||
async with async_open(UPDATE_DATA, mode='w', encoding='utf-8') as file:
|
||||
await file.write(reply_text.to_json())
|
||||
raise SystemExit
|
@ -1,5 +1,7 @@
|
||||
import hashlib
|
||||
import os
|
||||
from asyncio import create_subprocess_shell
|
||||
from asyncio.subprocess import PIPE
|
||||
from pathlib import Path
|
||||
from typing import Optional, Tuple, TypeVar, Union, cast
|
||||
|
||||
@ -134,3 +136,28 @@ def region_server(uid: Union[int, str]) -> RegionEnum:
|
||||
return region
|
||||
else:
|
||||
raise TypeError(f"UID {uid} isn't associated with any region")
|
||||
|
||||
|
||||
async def execute(command, pass_error=True):
|
||||
""" Executes command and returns output, with the option of enabling stderr. """
|
||||
executor = await create_subprocess_shell(
|
||||
command,
|
||||
stdout=PIPE,
|
||||
stderr=PIPE,
|
||||
stdin=PIPE
|
||||
)
|
||||
|
||||
stdout, stderr = await executor.communicate()
|
||||
if pass_error:
|
||||
try:
|
||||
result = str(stdout.decode().strip()) \
|
||||
+ str(stderr.decode().strip())
|
||||
except UnicodeDecodeError:
|
||||
result = str(stdout.decode('gbk').strip()) \
|
||||
+ str(stderr.decode('gbk').strip())
|
||||
else:
|
||||
try:
|
||||
result = str(stdout.decode().strip())
|
||||
except UnicodeDecodeError:
|
||||
result = str(stdout.decode('gbk').strip())
|
||||
return result
|
||||
|
Loading…
Reference in New Issue
Block a user