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/wiki/audit.py

117 lines
5.6 KiB
Python
Raw Normal View History

2023-11-28 11:11:33 +00:00
from datetime import datetime
2023-06-20 11:27:49 +00:00
from config import Config
2023-02-05 14:33:33 +00:00
from core.builtins import Bot, Plain, Image
2023-03-04 08:51:56 +00:00
from core.component import module
from core.utils.image_table import image_table_render, ImageTable
from modules.wiki.utils.dbutils import Audit
from modules.wiki.utils.wikilib import WikiLib
if Config('enable_urlmanager'):
2023-12-09 04:09:49 +00:00
aud = module('wiki_audit', required_superuser=True,
2023-09-03 16:17:18 +00:00
alias='wau')
2023-12-06 17:55:11 +00:00
@aud.command(['trust <apiLink>', 'block <apiLink>'])
2023-06-20 11:27:49 +00:00
async def _(msg: Bot.MessageSession):
2023-11-28 11:42:48 +00:00
date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2023-11-28 11:11:33 +00:00
api = msg.parsed_msg['<apiLink>']
2023-06-20 11:27:49 +00:00
check = await WikiLib(api).check_wiki_available()
if check.available:
api = check.value.api
2023-11-28 11:11:33 +00:00
if msg.parsed_msg.get('trust', False):
res = Audit(api).add_to_AllowList(date)
2023-06-20 11:27:49 +00:00
list_name = msg.locale.t('wiki.message.wiki_audit.list_name.allowlist')
else:
2023-11-28 11:11:33 +00:00
res = Audit(api).add_to_BlockList(date)
2023-06-20 11:27:49 +00:00
list_name = msg.locale.t('wiki.message.wiki_audit.list_name.blocklist')
if not res:
await msg.finish(msg.locale.t('wiki.message.wiki_audit.add.failed', list_name=list_name) + api)
else:
await msg.finish(msg.locale.t('wiki.message.wiki_audit.add.success', list_name=list_name) + api)
else:
2023-06-20 11:27:49 +00:00
result = msg.locale.t('wiki.message.error.add') + \
('\n' + msg.locale.t('wiki.message.error.info') + check.message if check.message != '' else '')
await msg.finish(result)
2023-12-06 17:55:11 +00:00
@aud.command(['distrust <apiLink>', 'unblock <apiLink>'])
2023-06-20 11:27:49 +00:00
async def _(msg: Bot.MessageSession):
2023-11-28 11:11:33 +00:00
api = msg.parsed_msg['<apiLink>'] # 已关闭的站点无法验证有效性
if msg.parsed_msg.get('distrust', False):
res = Audit(api).remove_from_AllowList()
if res is None:
await msg.finish(msg.locale.t('wiki.message.wiki_audit.remove.failed.other') + api)
list_name = msg.locale.t('wiki.message.wiki_audit.list_name.allowlist')
else:
2023-11-28 11:11:33 +00:00
res = Audit(api).remove_from_BlockList()
list_name = msg.locale.t('wiki.message.wiki_audit.list_name.blocklist')
if not res:
await msg.finish(msg.locale.t('wiki.message.wiki_audit.remove.failed', list_name=list_name) + api)
else:
await msg.finish(msg.locale.t('wiki.message.wiki_audit.remove.success', list_name=list_name) + api)
2023-12-06 17:55:11 +00:00
@aud.command('query <apiLink>')
2023-06-20 11:27:49 +00:00
async def _(msg: Bot.MessageSession):
2023-11-28 11:11:33 +00:00
api = msg.parsed_msg['<apiLink>']
2023-06-20 11:27:49 +00:00
check = await WikiLib(api).check_wiki_available()
if check.available:
api = check.value.api
audit = Audit(api)
allow = audit.inAllowList
block = audit.inBlockList
msg_list = []
if allow:
msg_list.append(api + msg.locale.t('wiki.message.wiki_audit.query.allowlist'))
if block:
msg_list.append(api + msg.locale.t('wiki.message.wiki_audit.query.blocklist'))
if msg_list:
msg_list.append(msg.locale.t('wiki.message.wiki_audit.query.conflict'))
await msg.finish('\n'.join(msg_list))
else:
await msg.finish(api + msg.locale.t('wiki.message.wiki_audit.query.none'))
else:
2023-06-20 11:27:49 +00:00
result = msg.locale.t('wiki.message.error.query') + \
('\n' + msg.locale.t('wiki.message.error.info') + check.message if check.message != '' else '')
await msg.finish(result)
2023-12-06 17:55:11 +00:00
@aud.command(['list', 'list legacy'])
2023-06-20 11:27:49 +00:00
async def _(msg: Bot.MessageSession):
allow_list = Audit.get_allow_list()
block_list = Audit.get_block_list()
legacy = True
2023-11-28 16:50:57 +00:00
if not msg.parsed_msg.get('legacy', False) and msg.Feature.image:
2023-06-20 11:27:49 +00:00
send_msgs = []
allow_columns = [[x[0], x[1]] for x in allow_list]
if allow_columns:
allow_table = ImageTable(data=allow_columns, headers=[
msg.locale.t('wiki.message.wiki_audit.list.table.header.apilink'),
2023-11-28 11:11:33 +00:00
msg.locale.t('wiki.message.wiki_audit.list.table.header.date')
2023-06-20 11:27:49 +00:00
])
if allow_table:
allow_image = await image_table_render(allow_table)
if allow_image:
send_msgs.append(Plain(msg.locale.t('wiki.message.wiki_audit.list.allowlist')))
send_msgs.append(Image(allow_image))
block_columns = [[x[0], x[1]] for x in block_list]
if block_columns:
block_table = ImageTable(data=block_columns, headers=[
msg.locale.t('wiki.message.wiki_audit.list.table.header.apilink'),
2023-11-28 11:11:33 +00:00
msg.locale.t('wiki.message.wiki_audit.list.table.header.date')
2023-06-20 11:27:49 +00:00
])
if block_table:
block_image = await image_table_render(block_table)
if block_image:
send_msgs.append(Plain(msg.locale.t('wiki.message.wiki_audit.list.blocklist')))
send_msgs.append(Image(block_image))
if send_msgs:
await msg.finish(send_msgs)
legacy = False
if legacy:
wikis = [msg.locale.t('wiki.message.wiki_audit.list.allowlist')]
for al in allow_list:
2023-11-28 11:11:33 +00:00
wikis.append(f'{al[0]} ({al[1]})')
2023-06-20 11:27:49 +00:00
wikis.append(msg.locale.t('wiki.message.wiki_audit.list.blocklist'))
for bl in block_list:
2023-11-28 11:11:33 +00:00
wikis.append(f'{bl[0]} ({bl[1]})')
2023-06-20 11:27:49 +00:00
await msg.finish('\n'.join(wikis))