sycgram/plugins/update.py

138 lines
4.7 KiB
Python
Raw Normal View History

2022-04-08 06:53:17 +00:00
import asyncio
import sys
2022-04-10 02:24:44 +00:00
from subprocess import PIPE, Popen
2022-04-08 06:53:17 +00:00
from core import command
2022-04-08 14:01:22 +00:00
from loguru import logger
2022-04-08 06:53:17 +00:00
from pyrogram import Client
from pyrogram.types import Message
2022-04-09 12:44:01 +00:00
from tools.constants import (SYCGRAM, SYCGRAM_ERROR, SYCGRAM_INFO,
SYCGRAM_WARNING, UPDATE_CMD)
2022-04-10 02:24:44 +00:00
from tools.helpers import Parameters, show_cmd_tip, show_exception
2022-04-11 02:05:12 +00:00
from tools.updates import (get_alias_of_cmds, is_latest_version,
pull_and_update_command_yml, reset_cmd_alias,
update_cmd_alias, update_cmd_prefix)
2022-04-08 06:53:17 +00:00
@Client.on_message(command("restart"))
async def restart(_: Client, msg: Message):
2022-04-11 07:54:54 +00:00
"""重启"""
2022-04-08 14:31:42 +00:00
text = f"**{SYCGRAM_INFO}**\n> # `Restarting {SYCGRAM} ...`"
2022-04-08 06:53:17 +00:00
await msg.edit_text(text=text, parse_mode='md')
sys.exit()
@Client.on_message(command("update"))
async def update(_: Client, msg: Message):
"""更新sycgram到主分支的最新版本"""
2022-04-11 02:05:12 +00:00
# arg - 是否强制更新
_, arg = Parameters.get(msg)
arg = False if arg != "force" else True
version_info = f"**{SYCGRAM_INFO}**\n> # `The current version is the latest.`"
if not arg:
try:
res = await is_latest_version()
except Exception as e:
return await show_exception(msg, e)
if res:
return await msg.edit_text(version_info, parse_mode='md')
else:
text = f"**{SYCGRAM_INFO}**\n> # `Updating to the latest version.`"
else:
text = f"**{SYCGRAM_INFO}**\n> # `Forcing to update to the latest version.`"
2022-04-08 06:53:17 +00:00
await msg.edit_text(text, parse_mode='md')
try:
2022-04-08 14:31:42 +00:00
await pull_and_update_command_yml()
2022-04-10 02:24:44 +00:00
p = Popen(UPDATE_CMD, stdout=PIPE, shell=True)
p.communicate()
2022-04-08 06:53:17 +00:00
except asyncio.exceptions.TimeoutError:
text = f"**{SYCGRAM_WARNING}**\n> # `Update Timeout`"
except Exception as e:
text = f"**{SYCGRAM_ERROR}**\n> # `{e}`"
else:
2022-04-11 02:05:12 +00:00
text = version_info
2022-04-08 06:53:17 +00:00
finally:
await msg.edit_text(text, parse_mode='md')
2022-04-08 14:01:22 +00:00
@Client.on_message(command("prefix"))
async def prefix(_: Client, msg: Message):
"""更改所有指令的前缀"""
_, pfx = Parameters.get(msg)
punctuation = list("""!#$%&*+,-./:;=?@^~!?。,;·\\""")
2022-04-09 10:04:08 +00:00
if pfx == "reset":
try:
2022-04-09 12:44:01 +00:00
await pull_and_update_command_yml(is_update=False)
2022-04-09 10:04:08 +00:00
except Exception as e:
return await show_exception(msg, e)
else:
2022-04-09 12:44:01 +00:00
await msg.edit_text("✅ Restore command.yml to default.")
2022-04-09 10:04:08 +00:00
sys.exit()
elif len(pfx) == 0 or len(pfx) > 1 or pfx not in punctuation:
2022-04-08 14:01:22 +00:00
text = f"**{SYCGRAM_WARNING}**\n> # `Prefix must be one of {' '.join(punctuation)}`"
await msg.edit_text(text, parse_mode='md')
return
try:
update_cmd_prefix(pfx)
except Exception as e:
text = f"**{SYCGRAM_ERROR}**\n> # `{e}`"
logger.error(e)
await msg.edit_text(text, parse_mode='md')
else:
2022-04-11 02:05:12 +00:00
text = f"**{SYCGRAM_INFO}**\n> # `Restarting prefix of all commands.`"
2022-04-08 14:01:22 +00:00
await msg.edit_text(text, parse_mode='md')
sys.exit()
@Client.on_message(command("alias"))
async def alias(_: Client, msg: Message):
"""
cmd: alias
format: -alias <set> <source> <to> or -alias <reset> <source> or -alias <list>
usage: 修改指令别名
"""
cmd, args = Parameters.get_more(msg)
if len(args) == 3 and args[0] == 'set':
_, source, to = args
try:
update_cmd_alias(source, to)
except Exception as e:
text = f"**{SYCGRAM_ERROR}**\n> # `{e}`"
logger.error(e)
await msg.edit_text(text, parse_mode='md')
else:
text = f"**{SYCGRAM_INFO}**\n> # `Updating alias of <{source}> to <{to}> ...`"
await msg.edit_text(text, parse_mode='md')
sys.exit()
elif len(args) == 2 and args[0] == 'reset':
_, source = args
try:
reset_cmd_alias(source)
except Exception as e:
text = f"**{SYCGRAM_ERROR}**\n> # `{e}`"
logger.error(e)
await msg.edit_text(text, parse_mode='md')
else:
2022-04-11 02:05:12 +00:00
text = f"**{SYCGRAM_INFO}**\n> # `Resetting alias of <{source}> ...`"
2022-04-08 14:01:22 +00:00
await msg.edit_text(text, parse_mode='md')
sys.exit()
elif len(args) == 1 and args[0] == 'list':
try:
2022-04-09 05:47:04 +00:00
data = get_alias_of_cmds()
tmp = ''.join(f"`{k}` | `{v}`\n" for k, v in data.items())
text = f"**⭐️ 指令别名:**\n**源名** | **别名**\n{tmp}"
2022-04-08 14:01:22 +00:00
except Exception as e:
text = f"**{SYCGRAM_ERROR}**\n> # `{e}`"
logger.error(e)
await msg.edit_text(text, parse_mode='md')
else:
await msg.edit_text(text, parse_mode='md')
else:
2022-04-09 05:47:04 +00:00
await show_cmd_tip(msg, cmd)