Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/modules/core/utils.py

203 lines
7.5 KiB
Python
Raw Normal View History

2022-08-27 16:17:01 +00:00
import os
import platform
import time
from datetime import datetime
import psutil
from cpuinfo import get_cpu_info
2023-02-06 13:21:53 +00:00
from core.builtins import Bot, PrivateAssets
2023-03-04 08:51:56 +00:00
from core.component import module
2023-03-04 10:08:40 +00:00
from core.utils.i18n import get_available_locales
2022-08-27 16:17:01 +00:00
from database import BotDBUtil
2023-03-04 08:51:56 +00:00
version = module('version',
2023-03-08 11:40:16 +00:00
base=True,
2023-03-13 13:16:56 +00:00
desc='{core.version.help}',
2023-03-08 11:40:16 +00:00
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):
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')
msgs = f'当前运行的代码版本号为:{open_tag.read()}{open_version.read()}'
open_version.close()
await msg.finish(msgs, msgs)
2023-03-04 08:51:56 +00:00
ping = module('ping',
2023-03-08 11:40:16 +00:00
base=True,
2023-03-13 13:16:56 +00:00
desc='{core.ping.help}',
2023-03-08 11:40:16 +00:00
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-03-13 13:41:09 +00:00
GroupList = msg.locale.t('core.ping.failed')
2022-08-27 16:17:01 +00:00
try:
FriendList = len(await app.friendList())
except Exception:
2023-03-13 13:41:09 +00:00
FriendList = msg.locale.t('core.ping.failed')
2022-08-27 16:17:01 +00:00
"""
2023-03-14 12:52:25 +00:00
result += '\n' + msg.locale.t("core.ping.message.detail", 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-03-13 13:16:56 +00:00
desc='{core.admin.help}'
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-03-13 13:16:56 +00:00
'add <UserID> {{core.admin.help.add}}',
'del <UserID> {{core.admin.help.del}}',
'list {{core.admin.help.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:
await msg.finish(f"当前机器人群内手动设置的管理员:\n" + '\n'.join(msg.custom_admins))
else:
2023-03-13 13:16:56 +00:00
await msg.finish(msg.locale.t("{core.admin.list.none}"))
2022-08-27 16:17:01 +00:00
user = msg.parsed_msg['<UserID>']
if not user.startswith(f'{msg.target.senderFrom}|'):
await msg.finish(f'ID格式错误请对象使用{msg.prefixes[0]}whoami命令查看用户ID。')
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-03-13 13:16:56 +00:00
await msg.finish(msg.locale.t("{core.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-03-13 13:16:56 +00:00
@admin.handle('ban <UserID> {{core.ban.help.ban}}', 'unban <UserID> {{core.ban.help.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}|'):
await msg.finish(f'ID格式错误格式应为“{msg.target.senderFrom}|<用户ID>”')
if user == msg.target.senderId:
2023-03-13 13:16:56 +00:00
await msg.finish(msg.locale.t("{core.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-03-13 13:16:56 +00:00
await msg.finish(msg.locale.t("{core.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-03-13 13:16:56 +00:00
await msg.finish(msg.locale.t("{core.ban.not_yet}"))
2023-01-31 12:31:10 +00:00
2023-03-04 08:51:56 +00:00
locale = module('locale',
2023-03-08 11:40:16 +00:00
base=True,
required_admin=True,
developers=['Dianliang233'],
2023-03-13 13:24:42 +00:00
desc='{core.locale.help}'
2023-03-08 11:40:16 +00:00
)
2022-08-27 16:17:01 +00:00
2023-03-13 13:16:56 +00:00
@locale.handle(['<lang> {{core.locale.help.locale}}'])
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-03-01 11:41:10 +00:00
if lang in ['zh_cn', 'zh_tw', 'en_us']:
2022-08-27 16:17:01 +00:00
if BotDBUtil.TargetInfo(msg.target.targetId).edit('locale', lang):
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-03-14 13:04:53 +00:00
await msg.finish(msg.locale.t("core.locale.invalid",lang=''.join(get_available_locales())))
2022-08-27 16:17:01 +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-03-13 13:16:56 +00:00
@whoami.handle('{{core.whoami.help}}')
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-03-13 13:41:09 +00:00
rights += '\n' + msg.locale.t("core.whoami.admin")
2022-08-27 16:17:01 +00:00
elif await msg.checkPermission():
2023-03-13 13:41:09 +00:00
rights += '\n' + msg.locale.t("core.whoami.botadmin")
2022-08-27 16:17:01 +00:00
if msg.checkSuperUser():
2023-03-13 13:41:09 +00:00
rights += '\n' + msg.locale.t("core.whoami.superuser")
2023-03-14 13:02:36 +00:00
await msg.finish(msg.locale.t('core.whoami.message', 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-03-13 13:16:56 +00:00
@tog.handle('typing {{core.toggle.help.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-03-13 14:38:20 +00:00
await msg.finish(msg.locale.t('core.toggle.typing.disable'))
2022-08-27 16:17:01 +00:00
else:
target.edit('disable_typing', False)
2023-03-13 14:38:20 +00:00
await msg.finish(msg.locale.t('core.toggle.typing.enable'))
2022-08-27 16:17:01 +00:00
2023-03-13 13:16:56 +00:00
@tog.handle('check {{core.toggle.help.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')
if state is None:
state = False
else:
state = not state
msg.data.edit_option('typo_check', state)
2023-03-14 13:02:36 +00:00
await msg.finish(msg.locale.t('core.toggle.check.enable') if state else msg.locale.t('core.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-03-13 13:16:56 +00:00
desc='{core.mute.help}')
2022-08-27 16:17:01 +00:00
@mute.handle()
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2023-03-14 13:02:36 +00:00
await msg.finish(msg.locale.t('core.mute.enable') if msg.data.switch_mute() else msg.locale.t('core.mute.disable'))
2022-08-27 16:17:01 +00:00
2023-03-10 07:14:04 +00:00
leave = module('leave', developers=['OasisAkari'], base=True, required_admin=True, available_for='QQ|Group', alias={'dismiss': 'leave'},
2023-03-13 13:16:56 +00:00
desc='{core.leave.help}')
2022-08-27 16:17:01 +00:00
@leave.handle()
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2023-03-13 14:38:20 +00:00
confirm = await msg.waitConfirm(msg.locale.t('core.leave.confirm'))
2022-08-27 16:17:01 +00:00
if confirm:
2023-03-13 13:48:50 +00:00
await msg.sendMessage(msg.locale.t('{core.leave.success}'))
2022-08-27 16:17:01 +00:00
await msg.call_api('set_group_leave', group_id=msg.session.target)