149 lines
7.7 KiB
Python
149 lines
7.7 KiB
Python
""" PagerMaid module to manage plugins. """
|
||
|
||
from os import remove, rename, chdir, path
|
||
from os.path import exists
|
||
from shutil import copyfile, move
|
||
from glob import glob
|
||
from pagermaid import log, working_dir
|
||
from pagermaid.listener import listener
|
||
from pagermaid.utils import upload_attachment
|
||
from pagermaid.modules import plugin_list as active_plugins, __list_plugins
|
||
|
||
|
||
@listener(outgoing=True, command="plugin", diagnostics=False,
|
||
description="用于管理安装到 PagerMaid 的插件。",
|
||
parameters="{status|install|remove|enable|disable|upload} <插件名称/文件>")
|
||
async def plugin(context):
|
||
if len(context.parameter) > 2 or len(context.parameter) == 0:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
||
return
|
||
reply = await context.get_reply_message()
|
||
plugin_directory = f"{working_dir}/plugins/"
|
||
if context.parameter[0] == "install":
|
||
if len(context.parameter) == 1:
|
||
await context.edit("安装插件中 . . .")
|
||
if reply:
|
||
file_path = await context.client.download_media(reply)
|
||
else:
|
||
file_path = await context.download_media()
|
||
if file_path is None or not file_path.endswith('.py'):
|
||
await context.edit("出错了呜呜呜 ~ 无法从附件获取插件文件。")
|
||
try:
|
||
remove(str(file_path))
|
||
except FileNotFoundError:
|
||
pass
|
||
return
|
||
if exists(f"{plugin_directory}{file_path}"):
|
||
remove(f"{plugin_directory}{file_path}")
|
||
move(file_path, plugin_directory)
|
||
elif exists(f"{plugin_directory}{file_path}.disabled"):
|
||
remove(f"{plugin_directory}{file_path}.disabled")
|
||
move(file_path, f"{plugin_directory}{file_path}.disabled")
|
||
else:
|
||
move(file_path, plugin_directory)
|
||
await context.edit(f"插件 {path.basename(file_path)[:-3]} 已安装,PagerMaid 正在重新启动。")
|
||
await log(f"成功安装插件 {path.basename(file_path)[:-3]}.")
|
||
await context.client.disconnect()
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
||
elif context.parameter[0] == "remove":
|
||
if len(context.parameter) == 2:
|
||
if exists(f"{plugin_directory}{context.parameter[1]}.py"):
|
||
remove(f"{plugin_directory}{context.parameter[1]}.py")
|
||
await context.edit(f"成功删除插件 {context.parameter[1]}, PagerMaid 正在重新启动。")
|
||
await log(f"删除插件 {context.parameter[1]}.")
|
||
await context.client.disconnect()
|
||
elif exists(f"{plugin_directory}{context.parameter[1]}.py.disabled"):
|
||
remove(f"{plugin_directory}{context.parameter[1]}.py.disabled")
|
||
await context.edit(f"已删除的插件 {context.parameter[1]}.")
|
||
await log(f"已删除的插件 {context.parameter[1]}.")
|
||
elif "/" in context.parameter[1]:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 指定的插件不存在。")
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
||
elif context.parameter[0] == "status":
|
||
if len(context.parameter) == 1:
|
||
inactive_plugins = sorted(__list_plugins())
|
||
disabled_plugins = []
|
||
if not len(inactive_plugins) == 0:
|
||
for target_plugin in active_plugins:
|
||
inactive_plugins.remove(target_plugin)
|
||
chdir("plugins/")
|
||
for target_plugin in glob(f"*.py.disabled"):
|
||
disabled_plugins += [f"{target_plugin[:-12]}"]
|
||
chdir("../")
|
||
active_plugins_string = ""
|
||
inactive_plugins_string = ""
|
||
disabled_plugins_string = ""
|
||
for target_plugin in active_plugins:
|
||
active_plugins_string += f"{target_plugin}, "
|
||
active_plugins_string = active_plugins_string[:-2]
|
||
for target_plugin in inactive_plugins:
|
||
inactive_plugins_string += f"{target_plugin}, "
|
||
inactive_plugins_string = inactive_plugins_string[:-2]
|
||
for target_plugin in disabled_plugins:
|
||
disabled_plugins_string += f"{target_plugin}, "
|
||
disabled_plugins_string = disabled_plugins_string[:-2]
|
||
if len(active_plugins) == 0:
|
||
active_plugins_string = "`没有运行中的插件。`"
|
||
if len(inactive_plugins) == 0:
|
||
inactive_plugins_string = "`没有加载失败的插件。`"
|
||
if len(disabled_plugins) == 0:
|
||
disabled_plugins_string = "`没有关闭的插件`"
|
||
output = f"**插件列表**\n" \
|
||
f"运行中: {active_plugins_string}\n" \
|
||
f"已关闭: {disabled_plugins_string}\n" \
|
||
f"加载失败: {inactive_plugins_string}"
|
||
await context.edit(output)
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
||
elif context.parameter[0] == "enable":
|
||
if len(context.parameter) == 2:
|
||
if exists(f"{plugin_directory}{context.parameter[1]}.py.disabled"):
|
||
rename(f"{plugin_directory}{context.parameter[1]}.py.disabled",
|
||
f"{plugin_directory}{context.parameter[1]}.py")
|
||
await context.edit(f"插件 {context.parameter[1]} 已启用,PagerMaid 正在重新启动。")
|
||
await log(f"已启用 {context.parameter[1]}.")
|
||
await context.client.disconnect()
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 指定的插件不存在。")
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
||
elif context.parameter[0] == "disable":
|
||
if len(context.parameter) == 2:
|
||
if exists(f"{plugin_directory}{context.parameter[1]}.py") is True:
|
||
rename(f"{plugin_directory}{context.parameter[1]}.py",
|
||
f"{plugin_directory}{context.parameter[1]}.py.disabled")
|
||
await context.edit(f"插件 {context.parameter[1]} 已被禁用,PagerMaid 正在重新启动。")
|
||
await log(f"已关闭插件 {context.parameter[1]}.")
|
||
await context.client.disconnect()
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 指定的插件不存在。")
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
||
elif context.parameter[0] == "upload":
|
||
if len(context.parameter) == 2:
|
||
file_name = f"{context.parameter[1]}.py"
|
||
reply_id = None
|
||
if reply:
|
||
reply_id = reply.id
|
||
if exists(f"{plugin_directory}{file_name}"):
|
||
copyfile(f"{plugin_directory}{file_name}", file_name)
|
||
elif exists(f"{plugin_directory}{file_name}.disabled"):
|
||
copyfile(f"{plugin_directory}{file_name}.disabled", file_name)
|
||
if exists(file_name):
|
||
await context.edit("上传插件中 . . .")
|
||
await upload_attachment(file_name,
|
||
context.chat_id, reply_id,
|
||
caption=f"PagerMaid {context.parameter[1]} plugin.")
|
||
remove(file_name)
|
||
await context.delete()
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 指定的插件不存在。")
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
||
else:
|
||
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|