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/su_utils.py

428 lines
16 KiB
Python
Raw Normal View History

2022-08-27 16:17:01 +00:00
import asyncio
import os
import sys
from datetime import datetime, timedelta
2023-06-04 08:20:03 +00:00
from dateutil.relativedelta import relativedelta
2022-08-27 16:17:01 +00:00
import matplotlib.pyplot as plt
import numpy as np
import ujson as json
2023-07-05 15:14:43 +00:00
from config import Config, CFG
2023-02-06 13:21:53 +00:00
from core.builtins import Bot, PrivateAssets, Image, Plain, ExecutionLockList, Temp, MessageTaskManager
2023-03-04 08:51:56 +00:00
from core.component import module
2022-08-27 17:51:43 +00:00
from core.loader import ModulesManager
2022-08-27 16:17:01 +00:00
from core.parser.message import remove_temp_ban
from core.tos import pardon_user, warn_user
from core.utils.cache import random_cache_path
from database import BotDBUtil
2023-06-02 07:47:49 +00:00
from core.utils.storedata import get_stored_list, update_stored_list
2022-08-27 16:17:01 +00:00
2023-06-17 05:59:42 +00:00
su = module('superuser', alias='su', developers=['OasisAkari', 'Dianliang233'], required_superuser=True)
2022-08-27 16:17:01 +00:00
2023-07-04 00:34:49 +00:00
@su.handle('add <UserID>')
2023-02-06 13:21:53 +00:00
async def add_su(message: Bot.MessageSession):
2023-07-04 00:34:49 +00:00
user = message.parsed_msg['<UserID>']
2022-08-27 16:17:01 +00:00
if not user.startswith(f'{message.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await message.finish(message.locale.t("core.message.superuser.invalid", prefix=message.prefixes[0]))
2022-08-27 16:17:01 +00:00
if user:
if BotDBUtil.SenderInfo(user).edit('isSuperUser', True):
2023-05-19 04:46:29 +00:00
await message.finish(message.locale.t("core.message.superuser.add.success", user=user))
2022-08-27 16:17:01 +00:00
2023-07-04 00:34:49 +00:00
@su.handle('del <UserID>')
2023-02-06 13:21:53 +00:00
async def del_su(message: Bot.MessageSession):
2023-07-04 00:34:49 +00:00
user = message.parsed_msg['<UserID>']
2022-08-27 16:17:01 +00:00
if not user.startswith(f'{message.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await message.finish(message.locale.t("core.message.superuser.invalid", prefix=message.prefixes[0]))
2022-08-27 16:17:01 +00:00
if user:
if BotDBUtil.SenderInfo(user).edit('isSuperUser', False):
2023-05-19 04:46:29 +00:00
await message.finish(message.locale.t("core.message.superuser.remove.success", user=user))
2022-08-27 16:17:01 +00:00
2023-06-17 05:59:42 +00:00
ana = module('analytics', required_superuser=True)
2022-08-27 16:17:01 +00:00
@ana.handle()
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
if Config('enable_analytics'):
first_record = BotDBUtil.Analytics.get_first()
get_counts = BotDBUtil.Analytics.get_count()
2023-03-09 05:13:29 +00:00
await msg.finish(msg.locale.t("core.analytics.message.counts", first_record=first_record.timestamp,
counts=get_counts))
2022-08-27 16:17:01 +00:00
else:
2023-03-08 11:40:16 +00:00
await msg.finish(msg.locale.t("core.analytics.message.disabled"))
2022-08-27 16:17:01 +00:00
@ana.handle('days [<name>]')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
if Config('enable_analytics'):
first_record = BotDBUtil.Analytics.get_first()
module_ = None
if '<name>' in msg.parsed_msg:
module_ = msg.parsed_msg['<name>']
2023-06-04 09:26:23 +00:00
if module_ is None:
result = msg.locale.t("core.analytics.message.days.total", first_record=first_record.timestamp)
else:
result = msg.locale.t("core.analytics.message.days", module=module_,
2023-06-14 01:58:16 +00:00
first_record=first_record.timestamp)
2022-08-27 16:17:01 +00:00
data_ = {}
for d in range(30):
new = datetime.now().replace(hour=0, minute=0, second=0) + timedelta(days=1) - timedelta(days=30 - d - 1)
old = datetime.now().replace(hour=0, minute=0, second=0) + timedelta(days=1) - timedelta(days=30 - d)
get_ = BotDBUtil.Analytics.get_count_by_times(new, old, module_)
data_[old.day] = get_
data_x = []
data_y = []
for x in data_:
data_x.append(str(x))
data_y.append(data_[x])
plt.plot(data_x, data_y, "-o")
plt.plot(data_x[-1], data_y[-1], "-ro")
plt.xlabel('Days')
plt.ylabel('Counts')
plt.tick_params(axis='x', labelrotation=45, which='major', labelsize=10)
plt.gca().yaxis.get_major_locator().set_params(integer=True)
for xitem, yitem in np.nditer([data_x, data_y]):
plt.annotate(yitem, (xitem, yitem), textcoords="offset points", xytext=(0, 10), ha="center")
path = random_cache_path() + '.png'
plt.savefig(path)
plt.close()
2023-06-04 09:26:23 +00:00
await msg.finish([Plain(result), Image(path)])
2023-06-14 01:58:16 +00:00
2023-06-04 08:20:03 +00:00
2023-06-04 08:44:52 +00:00
@ana.handle('years [<name>]')
2023-06-04 08:20:03 +00:00
async def _(msg: Bot.MessageSession):
if Config('enable_analytics'):
first_record = BotDBUtil.Analytics.get_first()
module_ = None
if '<name>' in msg.parsed_msg:
module_ = msg.parsed_msg['<name>']
2023-06-04 09:26:23 +00:00
if module_ is None:
result = msg.locale.t("core.analytics.message.years.total", first_record=first_record.timestamp)
else:
result = msg.locale.t("core.analytics.message.years", module=module_,
2023-06-14 01:58:16 +00:00
first_record=first_record.timestamp)
2023-06-04 08:20:03 +00:00
data_ = {}
for d in range(12):
2023-06-14 01:58:16 +00:00
new = datetime.now().replace(month=1, day=1, hour=0, minute=0, second=0) + \
relativedelta(years=1) - relativedelta(months=12 - d - 1)
old = datetime.now().replace(month=1, day=1, hour=0, minute=0, second=0) + \
relativedelta(years=1) - relativedelta(months=12 - d)
2023-06-04 08:20:03 +00:00
get_ = BotDBUtil.Analytics.get_count_by_times(new, old, module_)
data_[old.month] = get_
data_x = []
data_y = []
for x in data_:
data_x.append(str(x))
data_y.append(data_[x])
plt.plot(data_x, data_y, "-o")
plt.plot(data_x[-1], data_y[-1], "-ro")
plt.xlabel('Months')
plt.ylabel('Counts')
plt.tick_params(axis='x', labelrotation=45, which='major', labelsize=10)
plt.gca().yaxis.get_major_locator().set_params(integer=True)
for xitem, yitem in np.nditer([data_x, data_y]):
plt.annotate(yitem, (xitem, yitem), textcoords="offset points", xytext=(0, 10), ha="center")
path = random_cache_path() + '.png'
plt.savefig(path)
plt.close()
2023-06-04 09:26:23 +00:00
await msg.finish([Plain(result), Image(path)])
2023-06-04 08:20:03 +00:00
2022-08-27 16:17:01 +00:00
2023-06-17 05:59:42 +00:00
set_ = module('set', required_superuser=True)
2022-08-27 17:51:43 +00:00
@set_.handle('modules <targetId> <modules> ...')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 17:51:43 +00:00
target = msg.parsed_msg['<targetId>']
if not target.startswith(f'{msg.target.targetFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 17:51:43 +00:00
target_data = BotDBUtil.TargetInfo(target)
if target_data.query is None:
2023-05-19 04:46:29 +00:00
wait_confirm = await msg.waitConfirm(msg.locale.t("core.message.set.confirm.init"))
2022-08-27 17:51:43 +00:00
if not wait_confirm:
return
modules = [m for m in [msg.parsed_msg['<modules>']] + msg.parsed_msg.get('...', [])
2023-04-19 08:38:23 +00:00
if m in ModulesManager.return_modules_list(msg.target.targetFrom)]
2022-08-27 17:51:43 +00:00
target_data.enable(modules)
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.module.success") + ", ".join(modules))
2022-08-27 17:51:43 +00:00
@set_.handle('option <targetId> <k> <v>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 17:51:43 +00:00
target = msg.parsed_msg['<targetId>']
k = msg.parsed_msg['<k>']
v = msg.parsed_msg['<v>']
if not target.startswith(f'{msg.target.targetFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 17:51:43 +00:00
target_data = BotDBUtil.TargetInfo(target)
if target_data.query is None:
2023-05-19 04:46:29 +00:00
wait_confirm = await msg.waitConfirm(msg.locale.t("core.message.set.confirm.init"))
2022-08-27 17:51:43 +00:00
if not wait_confirm:
return
if v.startswith(('[', '{')):
v = json.loads(v)
2023-02-22 08:29:03 +00:00
elif v.upper() == 'TRUE':
2022-08-27 17:51:43 +00:00
v = True
2023-02-22 08:29:03 +00:00
elif v.upper() == 'FALSE':
2022-08-27 17:51:43 +00:00
v = False
target_data.edit_option(k, v)
2023-06-13 05:24:49 +00:00
await msg.finish(msg.locale.t("core.message.set.help.option.success", k=k, v=v))
2022-08-27 17:51:43 +00:00
2023-06-17 05:59:42 +00:00
ae = module('abuse', alias='ae', developers=['Dianliang233'], required_superuser=True)
2022-08-27 16:17:01 +00:00
@ae.handle('check <user>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
user = msg.parsed_msg['<user>']
if not user.startswith(f'{msg.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 16:17:01 +00:00
warns = BotDBUtil.SenderInfo(user).query.warns
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.abuse.check.warns", user=user, warns=warns))
2022-08-27 16:17:01 +00:00
@ae.handle('warn <user> [<count>]')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
count = int(msg.parsed_msg.get('<count>', 1))
user = msg.parsed_msg['<user>']
if not user.startswith(f'{msg.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 16:17:01 +00:00
warn_count = await warn_user(user, count)
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.abuse.warn.success", user=user, counts=count, warn_counts=warn_count))
2022-08-27 16:17:01 +00:00
@ae.handle('revoke <user> [<count>]')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
count = 0 - int(msg.parsed_msg.get('<count>', 1))
user = msg.parsed_msg['<user>']
if not user.startswith(f'{msg.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 16:17:01 +00:00
warn_count = await warn_user(user, count)
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.abuse.revoke.success", user=user, counts=count, warn_counts=warn_count))
2022-08-27 16:17:01 +00:00
@ae.handle('clear <user>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
user = msg.parsed_msg['<user>']
if not user.startswith(f'{msg.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 16:17:01 +00:00
await pardon_user(user)
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.abuse.clear.success", user=user))
2022-08-27 16:17:01 +00:00
@ae.handle('untempban <user>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
user = msg.parsed_msg['<user>']
if not user.startswith(f'{msg.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 16:17:01 +00:00
await remove_temp_ban(user)
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.abuse.untempban.success", user=user))
2022-08-27 16:17:01 +00:00
@ae.handle('ban <user>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
user = msg.parsed_msg['<user>']
if not user.startswith(f'{msg.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 16:17:01 +00:00
if BotDBUtil.SenderInfo(user).edit('isInBlockList', True):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.abuse.ban.success", user=user))
2022-08-27 16:17:01 +00:00
@ae.handle('unban <user>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
user = msg.parsed_msg['<user>']
if not user.startswith(f'{msg.target.senderFrom}|'):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.set.invalid"))
2022-08-27 16:17:01 +00:00
if BotDBUtil.SenderInfo(user).edit('isInBlockList', False):
2023-05-19 04:46:29 +00:00
await msg.finish(msg.locale.t("core.message.abuse.unban.success", user=user))
2022-08-27 16:17:01 +00:00
2023-06-17 05:59:42 +00:00
rst = module('restart', developers=['OasisAkari'], required_superuser=True)
2022-08-27 16:17:01 +00:00
def restart():
sys.exit(233)
2023-02-06 13:21:53 +00:00
def write_version_cache(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
update = os.path.abspath(PrivateAssets.path + '/cache_restart_author')
write_version = open(update, 'w')
write_version.write(json.dumps({'From': msg.target.targetFrom, 'ID': msg.target.targetId}))
write_version.close()
restart_time = []
2023-02-06 13:21:53 +00:00
async def wait_for_restart(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
get = ExecutionLockList.get()
if datetime.now().timestamp() - restart_time[0] < 60:
if len(get) != 0:
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.restart.wait", count=len(get)))
2022-08-27 16:17:01 +00:00
await asyncio.sleep(10)
return await wait_for_restart(msg)
else:
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.restart.restarting"))
2022-08-27 16:17:01 +00:00
get_wait_list = MessageTaskManager.get()
for x in get_wait_list:
for y in get_wait_list[x]:
2023-06-29 07:59:09 +00:00
for z in get_wait_list[x][y]:
if get_wait_list[x][y][z]['active']:
await z.sendMessage(z.locale.t("core.message.restart.prompt"))
2022-08-27 16:17:01 +00:00
else:
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.restart.timeout"))
2022-08-27 16:17:01 +00:00
@rst.handle()
2023-02-06 13:21:53 +00:00
async def restart_bot(msg: Bot.MessageSession):
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.confirm"))
2022-08-27 16:17:01 +00:00
confirm = await msg.waitConfirm()
if confirm:
restart_time.append(datetime.now().timestamp())
await wait_for_restart(msg)
write_version_cache(msg)
restart()
2023-06-17 05:59:42 +00:00
upd = module('update', developers=['OasisAkari'], required_superuser=True)
2022-08-27 16:17:01 +00:00
def pull_repo():
return os.popen('git pull', 'r').read()[:-1]
2023-02-18 07:13:24 +00:00
def update_dependencies():
poetry_install = os.popen('poetry install').read()[:-1]
if poetry_install != '':
return poetry_install
2023-03-11 11:48:33 +00:00
pip_install = os.popen('pip install -r requirements.txt').read()[:-1]
2023-03-11 11:50:15 +00:00
if len(pip_install) > 500:
return '...' + pip_install[-500:]
2023-03-11 11:48:33 +00:00
return
2023-02-18 07:13:24 +00:00
2022-08-27 16:17:01 +00:00
@upd.handle()
2023-02-06 13:21:53 +00:00
async def update_bot(msg: Bot.MessageSession):
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.confirm"))
2022-08-27 16:17:01 +00:00
confirm = await msg.waitConfirm()
if confirm:
await msg.sendMessage(pull_repo())
2023-02-18 07:13:24 +00:00
await msg.sendMessage(update_dependencies())
2022-08-27 16:17:01 +00:00
2023-06-17 05:59:42 +00:00
upds = module('update&restart', developers=['OasisAkari'], required_superuser=True, alias='u&r')
2022-08-27 16:17:01 +00:00
@upds.handle()
2023-02-06 13:21:53 +00:00
async def update_and_restart_bot(msg: Bot.MessageSession):
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.confirm"))
2022-08-27 16:17:01 +00:00
confirm = await msg.waitConfirm()
if confirm:
restart_time.append(datetime.now().timestamp())
await wait_for_restart(msg)
write_version_cache(msg)
await msg.sendMessage(pull_repo())
2023-02-18 07:13:24 +00:00
await msg.sendMessage(update_dependencies())
2022-08-27 16:17:01 +00:00
restart()
2023-02-04 14:42:21 +00:00
if Bot.FetchTarget.name == 'QQ':
2023-06-17 05:59:42 +00:00
resume = module('resume', developers=['OasisAkari'], required_superuser=True)
2023-02-04 14:42:21 +00:00
@resume.handle()
2023-02-06 13:21:53 +00:00
async def resume_sending_group_message(msg: Bot.MessageSession):
2023-02-06 10:02:44 +00:00
Temp.data['is_group_message_blocked'] = False
2023-02-04 14:42:21 +00:00
if targets := Temp.data['waiting_for_send_group_message']:
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.resume.processing", counts=len(targets)))
2023-02-04 14:42:21 +00:00
for x in targets:
2023-06-14 01:58:16 +00:00
if x['i18n']:
await x['fetch'].sendDirectMessage(x['fetch'].parent.locale.t(x['message']))
else:
await x['fetch'].sendDirectMessage(x['message'])
2023-02-04 14:42:21 +00:00
Temp.data['waiting_for_send_group_message'].remove(x)
2023-04-17 08:36:38 +00:00
await asyncio.sleep(30)
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.resume.done"))
2023-02-04 14:42:21 +00:00
else:
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.resume.nothing"))
2023-02-18 07:13:24 +00:00
2023-02-06 13:21:53 +00:00
@resume.handle('continue')
async def resume_sending_group_message(msg: Bot.MessageSession):
del Temp.data['waiting_for_send_group_message'][0]
Temp.data['is_group_message_blocked'] = False
if targets := Temp.data['waiting_for_send_group_message']:
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.resume.skip", counts=len(targets)))
2023-02-06 13:21:53 +00:00
for x in targets:
await x['fetch'].sendDirectMessage(x['message'])
Temp.data['waiting_for_send_group_message'].remove(x)
2023-04-17 08:36:38 +00:00
await asyncio.sleep(30)
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.resume.done"))
2023-02-06 13:21:53 +00:00
else:
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.resume.nothing"))
2023-02-04 14:42:21 +00:00
2023-07-07 17:30:31 +00:00
@resume.handle('clear')
2023-04-17 08:36:38 +00:00
async def _(msg: Bot.MessageSession):
2023-04-24 00:23:43 +00:00
Temp.data['is_group_message_blocked'] = False
2023-04-17 08:36:38 +00:00
Temp.data['waiting_for_send_group_message'] = []
2023-05-19 04:46:29 +00:00
await msg.sendMessage(msg.locale.t("core.message.resume.clean"))
2023-04-17 08:36:38 +00:00
2023-06-17 05:59:42 +00:00
forward_msg = module('forward_msg', developers=['OasisAkari'], required_superuser=True)
2023-06-02 07:47:49 +00:00
@forward_msg.handle()
async def _(msg: Bot.MessageSession):
alist = get_stored_list(Bot.FetchTarget, 'forward_msg')
if not alist:
alist = {'status': True}
alist['status'] = not alist['status']
update_stored_list(Bot.FetchTarget, 'forward_msg', alist)
if alist['status']:
2023-06-13 05:24:49 +00:00
await msg.sendMessage(msg.locale.t('core.message.forward_msg.enable'))
2023-06-02 07:47:49 +00:00
else:
2023-06-13 05:24:49 +00:00
await msg.sendMessage(msg.locale.t('core.message.forward_msg.disable'))
2023-06-02 07:47:49 +00:00
2023-04-17 08:36:38 +00:00
2023-06-17 05:59:42 +00:00
echo = module('echo', developers=['OasisAkari'], required_superuser=True)
2022-08-27 16:17:01 +00:00
@echo.handle('<display_msg>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
await msg.finish(msg.parsed_msg['<display_msg>'])
2023-06-17 05:59:42 +00:00
say = module('say', developers=['OasisAkari'], required_superuser=True)
2022-08-27 16:17:01 +00:00
@say.handle('<display_msg>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
await msg.finish(msg.parsed_msg['<display_msg>'], quote=False)
if Config('enable_eval'):
2023-03-04 08:51:56 +00:00
_eval = module('eval', developers=['Dianliang233'], required_superuser=True)
2022-08-27 16:17:01 +00:00
@_eval.handle('<display_msg>')
2023-02-06 13:21:53 +00:00
async def _(msg: Bot.MessageSession):
2022-08-27 16:17:01 +00:00
await msg.finish(str(eval(msg.parsed_msg['<display_msg>'], {'msg': msg})))
2023-07-05 15:14:43 +00:00
2023-07-07 17:30:31 +00:00
_config = module('config', developers=['OasisAkari'], required_superuser=True, alias='cfg')
2023-07-05 15:14:43 +00:00
@_config.handle('write <k> <v> [-s]')
async def _(msg: Bot.MessageSession):
CFG.write(msg.parsed_msg['<k>'], msg.parsed_msg['<v>'], msg.parsed_msg['-s'])
await msg.finish(msg.locale.t("success"))
@_config.handle('delete <k>')
async def _(msg: Bot.MessageSession):
if CFG.delete(msg.parsed_msg['<k>']):
await msg.finish(msg.locale.t("success"))
else:
await msg.finish(msg.locale.t("failed"))