mirror of
https://github.com/TeamPGM/PagerMaid-Pyro.git
synced 2024-11-25 13:44:07 +00:00
250 lines
7.3 KiB
Python
250 lines
7.3 KiB
Python
from pagermaid.dependence import get_sudo_list, status_sudo, sqlite
|
|
from pagermaid.enums import Client, Message
|
|
from pagermaid.enums.command import CommandHandler
|
|
from pagermaid.group_manager import (
|
|
add_permission_for_group,
|
|
Permission,
|
|
remove_permission_for_group,
|
|
add_user_to_group,
|
|
remove_user_from_group,
|
|
add_permission_for_user,
|
|
remove_permission_for_user,
|
|
permissions,
|
|
)
|
|
from pagermaid.listener import listener
|
|
from pagermaid.utils import lang
|
|
from pagermaid.utils.bot_utils import edit_delete
|
|
|
|
|
|
def from_msg_get_sudo_id(message: Message) -> int:
|
|
if reply := message.reply_to_message:
|
|
return reply.from_user.id if reply.from_user else reply.sender_chat.id
|
|
else:
|
|
return message.chat.id
|
|
|
|
|
|
@listener(
|
|
is_plugin=False,
|
|
command="sudo",
|
|
need_admin=True,
|
|
parameters="{on|off|add|remove|gaddp|gaddu|gdelp|gdelu|glist|uaddp|udelp|list}",
|
|
description=lang("sudo_des"),
|
|
)
|
|
async def sudo_change(message: Message):
|
|
"""To enable or disable sudo of your userbot."""
|
|
await edit_delete(message, lang("arg_error"))
|
|
|
|
|
|
sudo_change: "CommandHandler"
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="on",
|
|
need_admin=True,
|
|
)
|
|
async def sudo_on(message: Message):
|
|
sudo = get_sudo_list()
|
|
if status_sudo():
|
|
return await edit_delete(message, lang("sudo_has_enabled"))
|
|
sqlite["sudo_enable"] = True
|
|
text = f"__{lang('sudo_enable')}__\n"
|
|
if len(sudo) != 0:
|
|
return await message.edit(
|
|
text,
|
|
)
|
|
text += f"**{lang('sudo_no_sudo')}**"
|
|
return await message.edit(
|
|
text,
|
|
)
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="off",
|
|
need_admin=True,
|
|
)
|
|
async def sudo_off(message: Message):
|
|
sudo = get_sudo_list()
|
|
if status_sudo():
|
|
del sqlite["sudo_enable"]
|
|
text = f"__{lang('sudo_disable')}__\n"
|
|
if len(sudo) != 0:
|
|
return await message.edit(
|
|
text,
|
|
)
|
|
text += f"**{lang('sudo_no_sudo')}**"
|
|
return await message.edit(
|
|
text,
|
|
)
|
|
await edit_delete(message, lang("sudo_has_disabled"))
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="add",
|
|
need_admin=True,
|
|
)
|
|
async def sudo_add(message: Message):
|
|
sudo = get_sudo_list()
|
|
from_id = from_msg_get_sudo_id(message)
|
|
if from_id in sudo:
|
|
return await edit_delete(message, f"__{lang('sudo_add')}__")
|
|
sudo.append(from_id)
|
|
sqlite["sudo_list"] = sudo
|
|
add_user_to_group(str(from_id), "default") # 添加到默认组
|
|
if from_id > 0:
|
|
await message.edit(f"__{lang('sudo_add')}__")
|
|
else:
|
|
await message.edit(f"__{lang('sudo_add_chat')}__")
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="remove",
|
|
need_admin=True,
|
|
)
|
|
async def sudo_remove(message: Message):
|
|
sudo = get_sudo_list()
|
|
from_id = from_msg_get_sudo_id(message)
|
|
if from_id not in sudo:
|
|
return await edit_delete(message, f"__{lang('sudo_no')}__")
|
|
sudo.remove(from_id)
|
|
sqlite["sudo_list"] = sudo
|
|
if from_id > 0:
|
|
await message.edit(f"__{lang('sudo_remove')}__")
|
|
else:
|
|
await message.edit(f"__{lang('sudo_remove_chat')}__")
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="list",
|
|
need_admin=True,
|
|
)
|
|
async def sudo_list(client: Client, message: Message):
|
|
sudo = get_sudo_list()
|
|
if len(sudo) == 0:
|
|
return await edit_delete(message, f"__{lang('sudo_no_one')}__")
|
|
text = f"**{lang('sudo_list')}**\n\n"
|
|
for i in sudo.copy():
|
|
try:
|
|
if i > 0:
|
|
user = await client.get_users(i)
|
|
if user.is_deleted:
|
|
sudo.remove(i)
|
|
sqlite["sudo_list"] = sudo
|
|
continue
|
|
text += f"• {user.mention()} - {' '.join(permissions.get_roles_for_user(str(i)))}\n"
|
|
else:
|
|
chat = await client.get_chat(i)
|
|
text += f"• {chat.title} - {' '.join(permissions.get_roles_for_user(str(i)))}\n"
|
|
for j in permissions.get_permissions_for_user(str(i)):
|
|
text += f" • {'-' if j[2] == 'ejection' else ''}{j[1]}\n"
|
|
except Exception:
|
|
text += f"• `{i}` - {' '.join(permissions.get_roles_for_user(str(i)))}\n"
|
|
await message.edit(text)
|
|
|
|
|
|
def check_parameter_length(length: int, check_permission: bool):
|
|
def decorator(func):
|
|
async def wrapper(message: Message):
|
|
if len(message.parameter) != length:
|
|
return await edit_delete(message, lang("arg_error"))
|
|
if check_permission:
|
|
sudo = get_sudo_list()
|
|
from_id = from_msg_get_sudo_id(message)
|
|
if from_id not in sudo:
|
|
return await edit_delete(message, f"__{lang('sudo_no')}__")
|
|
|
|
return await func(message)
|
|
|
|
return wrapper
|
|
|
|
return decorator
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="glist",
|
|
need_admin=True,
|
|
)
|
|
@check_parameter_length(2, False)
|
|
async def sudo_glist(message: Message):
|
|
if not (data := permissions.get_permissions_for_user(str(message.parameter[1]))):
|
|
return await edit_delete(message, f"__{lang('sudo_group_list')}__")
|
|
text = f"**{message.parameter[1]} {lang('sudo_group_list')}**\n\n"
|
|
for i in data:
|
|
text += f" • `{'-' if i[2] == 'ejection' else ''}{i[1]}`\n"
|
|
return await message.edit(text)
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="gaddu",
|
|
need_admin=True,
|
|
)
|
|
@check_parameter_length(2, True)
|
|
async def sudo_gaddu(message: Message):
|
|
from_id = from_msg_get_sudo_id(message)
|
|
add_user_to_group(str(from_id), message.parameter[1])
|
|
return await message.edit(lang("sudo_group_add_user"))
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="gdelu",
|
|
need_admin=True,
|
|
)
|
|
@check_parameter_length(2, True)
|
|
async def sudo_gdelu(message: Message):
|
|
from_id = from_msg_get_sudo_id(message)
|
|
remove_user_from_group(str(from_id), message.parameter[1])
|
|
return await message.edit(lang("sudo_group_del_user"))
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="uaddp",
|
|
need_admin=True,
|
|
)
|
|
@check_parameter_length(2, True)
|
|
async def sudo_uaddp(message: Message):
|
|
from_id = from_msg_get_sudo_id(message)
|
|
add_permission_for_user(str(from_id), Permission(message.parameter[1]))
|
|
return await message.edit(lang("sudo_user_add_per"))
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="udelp",
|
|
need_admin=True,
|
|
)
|
|
@check_parameter_length(2, True)
|
|
async def sudo_udelp(message: Message):
|
|
from_id = from_msg_get_sudo_id(message)
|
|
remove_permission_for_user(str(from_id), Permission(message.parameter[1]))
|
|
return await message.edit(lang("sudo_user_del_per"))
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="gaddp",
|
|
need_admin=True,
|
|
)
|
|
@check_parameter_length(3, False)
|
|
async def sudo_gaddp(message: Message):
|
|
add_permission_for_group(message.parameter[1], Permission(message.parameter[2]))
|
|
return await message.edit(lang("sudo_group_add_per"))
|
|
|
|
|
|
@sudo_change.sub_command(
|
|
is_plugin=False,
|
|
command="gdelp",
|
|
need_admin=True,
|
|
)
|
|
@check_parameter_length(3, False)
|
|
async def sudo_gdelp(message: Message):
|
|
remove_permission_for_group(message.parameter[1], Permission(message.parameter[2]))
|
|
return await message.edit(lang("sudo_group_del_per"))
|