2022-08-27 16:17:01 +00:00
|
|
|
import os
|
|
|
|
import platform
|
|
|
|
import psutil
|
2023-07-13 04:27:57 +00:00
|
|
|
import time
|
2022-08-27 16:17:01 +00:00
|
|
|
|
2023-07-13 04:27:57 +00:00
|
|
|
from config import Config
|
2023-08-08 06:53:29 +00:00
|
|
|
from core.builtins import Bot, command_prefix, PrivateAssets
|
2023-03-04 08:51:56 +00:00
|
|
|
from core.component import module
|
2023-07-17 17:42:29 +00:00
|
|
|
from core.utils.i18n import get_available_locales, Locale, load_locale_file
|
2023-07-13 04:27:57 +00:00
|
|
|
from cpuinfo import get_cpu_info
|
2022-08-27 16:17:01 +00:00
|
|
|
from database import BotDBUtil
|
2023-07-13 04:27:57 +00:00
|
|
|
from datetime import datetime
|
2022-08-27 16:17:01 +00:00
|
|
|
|
2023-07-25 08:54:08 +00:00
|
|
|
|
2023-07-13 04:27:57 +00:00
|
|
|
version = module('version', base=True, desc='{core.help.version}', developers=['OasisAkari', 'Dianliang233'])
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
@version.handle()
|
2023-02-06 13:21:53 +00:00
|
|
|
async def bot_version(msg: Bot.MessageSession):
|
2023-06-28 12:16:22 +00:00
|
|
|
|
2022-08-27 16:17:01 +00:00
|
|
|
ver = os.path.abspath(PrivateAssets.path + '/version')
|
|
|
|
tag = os.path.abspath(PrivateAssets.path + '/version_tag')
|
|
|
|
open_version = open(ver, 'r')
|
|
|
|
open_tag = open(tag, 'r')
|
2023-05-19 04:46:29 +00:00
|
|
|
msgs = msg.locale.t('core.message.version', version_tag=open_tag.read(), commit=open_version.read())
|
2022-08-27 16:17:01 +00:00
|
|
|
open_version.close()
|
|
|
|
await msg.finish(msgs, msgs)
|
|
|
|
|
|
|
|
|
2023-07-31 14:42:13 +00:00
|
|
|
ping = module('ping', base=True, desc='{core.help.ping}', developers=['OasisAkari'])
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
started_time = datetime.now()
|
|
|
|
|
|
|
|
|
|
|
|
@ping.handle()
|
2023-02-06 13:21:53 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2022-08-27 16:17:01 +00:00
|
|
|
checkpermisson = msg.checkSuperUser()
|
|
|
|
result = "Pong!"
|
|
|
|
if checkpermisson:
|
|
|
|
timediff = str(datetime.now() - started_time)
|
|
|
|
Boot_Start = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(psutil.boot_time()))
|
|
|
|
Cpu_usage = psutil.cpu_percent()
|
|
|
|
RAM = int(psutil.virtual_memory().total / (1024 * 1024))
|
|
|
|
RAM_percent = psutil.virtual_memory().percent
|
|
|
|
Swap = int(psutil.swap_memory().total / (1024 * 1024))
|
|
|
|
Swap_percent = psutil.swap_memory().percent
|
|
|
|
Disk = int(psutil.disk_usage('/').used / (1024 * 1024 * 1024))
|
|
|
|
DiskTotal = int(psutil.disk_usage('/').total / (1024 * 1024 * 1024))
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
GroupList = len(await app.groupList())
|
|
|
|
except Exception:
|
2023-05-19 04:46:29 +00:00
|
|
|
GroupList = msg.locale.t('core.message.ping.failed')
|
2022-08-27 16:17:01 +00:00
|
|
|
try:
|
|
|
|
FriendList = len(await app.friendList())
|
|
|
|
except Exception:
|
2023-05-19 04:46:29 +00:00
|
|
|
FriendList = msg.locale.t('core.message.ping.failed')
|
2022-08-27 16:17:01 +00:00
|
|
|
"""
|
2023-05-19 04:46:29 +00:00
|
|
|
result += '\n' + msg.locale.t("core.message.ping.detail",
|
2023-04-30 03:30:59 +00:00
|
|
|
system_boot_time=Boot_Start,
|
|
|
|
bot_running_time=timediff,
|
|
|
|
python_version=platform.python_version(),
|
|
|
|
cpu_brand=get_cpu_info()['brand_raw'],
|
|
|
|
cpu_usage=Cpu_usage,
|
|
|
|
ram=RAM,
|
|
|
|
ram_percent=RAM_percent,
|
|
|
|
swap=Swap,
|
|
|
|
swap_percent=Swap_percent,
|
|
|
|
disk_space=Disk,
|
|
|
|
disk_space_total=DiskTotal)
|
2022-08-27 16:17:01 +00:00
|
|
|
await msg.finish(result)
|
|
|
|
|
|
|
|
|
2023-03-04 08:51:56 +00:00
|
|
|
admin = module('admin',
|
2023-03-08 11:40:16 +00:00
|
|
|
base=True,
|
|
|
|
required_admin=True,
|
|
|
|
developers=['OasisAkari'],
|
2023-05-19 04:46:29 +00:00
|
|
|
desc='{core.help.admin}'
|
2023-03-08 11:40:16 +00:00
|
|
|
)
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
2023-02-05 14:33:33 +00:00
|
|
|
@admin.handle([
|
2023-05-19 04:46:29 +00:00
|
|
|
'add <UserID> {{core.help.admin.add}}',
|
|
|
|
'del <UserID> {{core.help.admin.del}}',
|
|
|
|
'list {{core.help.admin.list}}'])
|
2023-02-06 13:21:53 +00:00
|
|
|
async def config_gu(msg: Bot.MessageSession):
|
2023-01-31 12:49:22 +00:00
|
|
|
if 'list' in msg.parsed_msg:
|
|
|
|
if msg.custom_admins:
|
2023-05-19 04:46:29 +00:00
|
|
|
await msg.finish(msg.locale.t("core.message.admin.list") + '\n'.join(msg.custom_admins))
|
2023-01-31 12:49:22 +00:00
|
|
|
else:
|
2023-05-19 04:46:29 +00:00
|
|
|
await msg.finish(msg.locale.t("core.message.admin.list.none"))
|
2022-08-27 16:17:01 +00:00
|
|
|
user = msg.parsed_msg['<UserID>']
|
|
|
|
if not user.startswith(f'{msg.target.senderFrom}|'):
|
2023-07-03 10:58:04 +00:00
|
|
|
await msg.finish(msg.locale.t('core.message.admin.invalid', target=msg.target.senderFrom))
|
2022-08-27 16:17:01 +00:00
|
|
|
if 'add' in msg.parsed_msg:
|
|
|
|
if user and user not in msg.custom_admins:
|
|
|
|
if msg.data.add_custom_admin(user):
|
2023-03-13 13:29:41 +00:00
|
|
|
await msg.finish(msg.locale.t('success'))
|
2022-08-27 16:17:01 +00:00
|
|
|
else:
|
2023-05-19 04:46:29 +00:00
|
|
|
await msg.finish(msg.locale.t("core.message.admin.already"))
|
2022-08-27 16:17:01 +00:00
|
|
|
if 'del' in msg.parsed_msg:
|
|
|
|
if user:
|
|
|
|
if msg.data.remove_custom_admin(user):
|
2023-03-13 13:29:41 +00:00
|
|
|
await msg.finish(msg.locale.t('success'))
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
2023-06-13 05:41:44 +00:00
|
|
|
@admin.handle('ban <UserID> {{core.help.admin.ban}}', 'unban <UserID> {{core.help.admin.unban}}')
|
2023-02-06 13:21:53 +00:00
|
|
|
async def config_ban(msg: Bot.MessageSession):
|
2023-01-31 12:31:10 +00:00
|
|
|
user = msg.parsed_msg['<UserID>']
|
|
|
|
if not user.startswith(f'{msg.target.senderFrom}|'):
|
2023-07-03 10:58:04 +00:00
|
|
|
await msg.finish(msg.locale.t('core.message.admin.invalid', target=msg.target.senderFrom))
|
2023-01-31 12:31:10 +00:00
|
|
|
if user == msg.target.senderId:
|
2023-06-13 05:41:44 +00:00
|
|
|
await msg.finish(msg.locale.t("core.message.admin.ban.self"))
|
2023-01-31 12:31:10 +00:00
|
|
|
if 'ban' in msg.parsed_msg:
|
|
|
|
if user not in msg.options.get('ban', []):
|
|
|
|
msg.data.edit_option('ban', msg.options.get('ban', []) + [user])
|
2023-03-13 13:29:41 +00:00
|
|
|
await msg.finish(msg.locale.t('success'))
|
2023-01-31 12:31:10 +00:00
|
|
|
else:
|
2023-06-13 05:41:44 +00:00
|
|
|
await msg.finish(msg.locale.t("core.message.admin.ban.already"))
|
2023-01-31 12:31:10 +00:00
|
|
|
if 'unban' in msg.parsed_msg:
|
2023-01-31 12:37:55 +00:00
|
|
|
if user in (banlist := msg.options.get('ban', [])):
|
|
|
|
banlist.remove(user)
|
|
|
|
msg.data.edit_option('ban', banlist)
|
2023-03-13 13:29:41 +00:00
|
|
|
await msg.finish(msg.locale.t('success'))
|
2023-01-31 12:31:10 +00:00
|
|
|
else:
|
2023-06-13 05:41:44 +00:00
|
|
|
await msg.finish(msg.locale.t("core.message.admin.ban.not_yet"))
|
2023-01-31 12:31:10 +00:00
|
|
|
|
|
|
|
|
2023-07-31 14:42:13 +00:00
|
|
|
locale = module('locale', base=True, developers=['Dianliang233', 'Light-Beacon'])
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
2023-08-08 06:53:29 +00:00
|
|
|
@locale.handle('{{core.help.locale}}')
|
|
|
|
async def _(msg: Bot.MessageSession):
|
|
|
|
lang = msg.locale.t("language")
|
|
|
|
avaliable_lang = msg.locale.t("message.delimiter").join(get_available_locales())
|
2023-08-08 07:17:35 +00:00
|
|
|
await msg.finish(f"{msg.locale.t("core.message.locale")}{msg.locale.t("language")}\n{msg.locale.t("core.message.locale.set.prompt", langlist=avaliable_lang, prefix=command_prefix[0])}")
|
2023-08-08 06:53:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
@locale.handle('<lang> {{core.help.locale.set}}', required_admin=True)
|
2023-02-06 13:21:53 +00:00
|
|
|
async def config_gu(msg: Bot.MessageSession):
|
2022-08-27 16:17:01 +00:00
|
|
|
lang = msg.parsed_msg['<lang>']
|
2023-07-25 09:07:05 +00:00
|
|
|
if lang in get_available_locales():
|
2022-08-27 16:17:01 +00:00
|
|
|
if BotDBUtil.TargetInfo(msg.target.targetId).edit('locale', lang):
|
2023-03-19 16:21:13 +00:00
|
|
|
await msg.finish(Locale(lang).t('success'))
|
2022-08-27 16:17:01 +00:00
|
|
|
else:
|
2023-07-25 08:47:29 +00:00
|
|
|
avaliable_lang = msg.locale.t("message.delimiter").join(get_available_locales())
|
2023-08-08 06:53:29 +00:00
|
|
|
await msg.finish(msg.locale.t("core.message.locale.set.invalid", langlist=avaliable_lang))
|
2023-07-25 08:47:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
@locale.handle('reload {{core.help.locale.reload}}', required_superuser=True)
|
2023-07-17 17:42:29 +00:00
|
|
|
async def reload_locale(msg: Bot.MessageSession):
|
2023-07-25 08:47:29 +00:00
|
|
|
err = load_locale_file()
|
|
|
|
if len(err) == 0:
|
|
|
|
await msg.finish(msg.locale.t("success"))
|
2023-07-17 17:42:29 +00:00
|
|
|
else:
|
2023-07-31 14:42:13 +00:00
|
|
|
await msg.finish(msg.locale.t("core.message.locale.reload.failed", detail='\n'.join(err)))
|
|
|
|
|
2023-08-08 06:53:29 +00:00
|
|
|
|
2023-03-04 08:51:56 +00:00
|
|
|
whoami = module('whoami', developers=['Dianliang233'], base=True)
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
2023-05-19 04:46:29 +00:00
|
|
|
@whoami.handle('{{core.help.whoami}}')
|
2023-02-06 13:21:53 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2022-08-27 16:17:01 +00:00
|
|
|
rights = ''
|
|
|
|
if await msg.checkNativePermission():
|
2023-05-19 04:46:29 +00:00
|
|
|
rights += '\n' + msg.locale.t("core.message.whoami.admin")
|
2022-08-27 16:17:01 +00:00
|
|
|
elif await msg.checkPermission():
|
2023-05-19 04:46:29 +00:00
|
|
|
rights += '\n' + msg.locale.t("core.message.whoami.botadmin")
|
2022-08-27 16:17:01 +00:00
|
|
|
if msg.checkSuperUser():
|
2023-05-19 04:46:29 +00:00
|
|
|
rights += '\n' + msg.locale.t("core.message.whoami.superuser")
|
|
|
|
await msg.finish(msg.locale.t('core.message.whoami', senderid=msg.target.senderId, targetid=msg.target.targetId) + rights,
|
2022-08-27 16:17:01 +00:00
|
|
|
disable_secret_check=True)
|
|
|
|
|
|
|
|
|
2023-03-04 08:51:56 +00:00
|
|
|
tog = module('toggle', developers=['OasisAkari'], base=True, required_admin=True)
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
2023-05-19 04:46:29 +00:00
|
|
|
@tog.handle('typing {{core.help.toggle.typing}}')
|
2023-02-06 13:21:53 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2022-08-27 16:17:01 +00:00
|
|
|
target = BotDBUtil.SenderInfo(msg.target.senderId)
|
|
|
|
state = target.query.disable_typing
|
|
|
|
if not state:
|
|
|
|
target.edit('disable_typing', True)
|
2023-05-19 04:46:29 +00:00
|
|
|
await msg.finish(msg.locale.t('core.message.toggle.typing.disable'))
|
2022-08-27 16:17:01 +00:00
|
|
|
else:
|
|
|
|
target.edit('disable_typing', False)
|
2023-05-19 04:46:29 +00:00
|
|
|
await msg.finish(msg.locale.t('core.message.toggle.typing.enable'))
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
2023-05-19 04:46:29 +00:00
|
|
|
@tog.handle('check {{core.help.toggle.check}}')
|
2023-02-06 13:21:53 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2022-08-27 16:17:01 +00:00
|
|
|
state = msg.options.get('typo_check')
|
2023-07-25 08:47:29 +00:00
|
|
|
if state:
|
|
|
|
msg.data.edit_option('typo_check', False)
|
|
|
|
await msg.finish(msg.locale.t('core.message.toggle.check.enable'))
|
2022-08-27 16:17:01 +00:00
|
|
|
else:
|
2023-07-25 08:47:29 +00:00
|
|
|
msg.data.edit_option('typo_check', True)
|
|
|
|
await msg.finish(msg.locale.t('core.message.toggle.check.disable'))
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
2023-03-04 08:51:56 +00:00
|
|
|
mute = module('mute', developers=['Dianliang233'], base=True, required_admin=True,
|
2023-05-19 04:46:29 +00:00
|
|
|
desc='{core.help.mute}')
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
@mute.handle()
|
2023-02-06 13:21:53 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2023-07-25 08:47:29 +00:00
|
|
|
state = msg.data.switch_mute()
|
|
|
|
if state:
|
|
|
|
await msg.finish(msg.locale.t('core.message.mute.enable'))
|
|
|
|
else:
|
|
|
|
await msg.finish(msg.locale.t('core.message.mute.disable'))
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
2023-07-31 14:42:13 +00:00
|
|
|
leave = module(
|
|
|
|
'leave',
|
|
|
|
developers=['OasisAkari'],
|
|
|
|
base=True,
|
|
|
|
required_admin=True,
|
|
|
|
available_for='QQ|Group',
|
|
|
|
alias='dismiss',
|
|
|
|
desc='{core.help.leave}')
|
2022-08-27 16:17:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
@leave.handle()
|
2023-02-06 13:21:53 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2023-05-19 04:46:29 +00:00
|
|
|
confirm = await msg.waitConfirm(msg.locale.t('core.message.leave.confirm'))
|
2022-08-27 16:17:01 +00:00
|
|
|
if confirm:
|
2023-05-19 04:46:29 +00:00
|
|
|
await msg.sendMessage(msg.locale.t('core.message.leave.success'))
|
2022-08-27 16:17:01 +00:00
|
|
|
await msg.call_api('set_group_leave', group_id=msg.session.target)
|