2020-08-12 16:01:34 +00:00
|
|
|
|
import re
|
|
|
|
|
|
2021-02-01 15:13:11 +00:00
|
|
|
|
from graia.application import MessageChain
|
|
|
|
|
from graia.application.friend import Friend
|
|
|
|
|
from graia.application.group import Group, Member
|
2021-04-05 15:04:42 +00:00
|
|
|
|
from graia.application.message.elements.internal import Image, Voice
|
2021-02-01 15:13:11 +00:00
|
|
|
|
from graia.application.message.elements.internal import Plain
|
|
|
|
|
|
|
|
|
|
import modules.wiki.wikilib
|
2021-04-08 15:21:40 +00:00
|
|
|
|
from core.template import sendMessage, check_permission, wait_confirm, revokeMessage, Nudge, download_to_cache, \
|
|
|
|
|
slk_converter
|
2021-03-21 08:14:28 +00:00
|
|
|
|
from database import BotDB
|
2021-04-08 15:21:40 +00:00
|
|
|
|
from modules.wiki.database import WikiDB
|
2021-02-01 15:13:11 +00:00
|
|
|
|
from modules.wiki.helper import check_wiki_available
|
|
|
|
|
from .getinfobox import get_infobox_pic
|
2020-08-12 16:01:34 +00:00
|
|
|
|
|
|
|
|
|
|
2021-02-01 15:13:11 +00:00
|
|
|
|
async def wiki_loader(kwargs: dict):
|
2021-03-21 05:00:17 +00:00
|
|
|
|
kwargs['trigger_msg'] = cmd = re.sub(r'^wiki ', '', kwargs['trigger_msg'])
|
|
|
|
|
cmd = cmd.split(' ')
|
|
|
|
|
if isinstance(cmd, list):
|
|
|
|
|
if len(cmd) > 1:
|
|
|
|
|
if cmd[0] == 'set':
|
|
|
|
|
kwargs['trigger_msg'] = cmd[1]
|
|
|
|
|
await set_start_wiki(kwargs)
|
2021-04-02 16:35:26 +00:00
|
|
|
|
elif cmd[0] == 'iw':
|
2021-03-21 05:00:17 +00:00
|
|
|
|
kwargs['trigger_msg'] = ' '.join(cmd[1:])
|
|
|
|
|
await interwiki(kwargs)
|
2021-04-02 16:35:26 +00:00
|
|
|
|
elif cmd[0] == 'headers':
|
2021-03-21 05:00:17 +00:00
|
|
|
|
kwargs['trigger_msg'] = ' '.join(cmd[1:])
|
|
|
|
|
await set_headers(kwargs)
|
2021-04-02 16:35:26 +00:00
|
|
|
|
else:
|
|
|
|
|
await wiki_wrapper(kwargs)
|
2021-03-21 12:39:43 +00:00
|
|
|
|
else:
|
|
|
|
|
await wiki_wrapper(kwargs)
|
2021-03-21 05:00:17 +00:00
|
|
|
|
else:
|
|
|
|
|
await wiki_wrapper(kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def wiki_wrapper(kwargs: dict):
|
2021-02-01 15:13:11 +00:00
|
|
|
|
command = kwargs['trigger_msg']
|
|
|
|
|
if Group in kwargs:
|
|
|
|
|
start_table = 'start_wiki_link_group'
|
2021-03-21 05:00:17 +00:00
|
|
|
|
headtable = 'request_headers_group'
|
|
|
|
|
headtarget = kwargs[Group].id
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if Friend in kwargs:
|
|
|
|
|
start_table = 'start_wiki_link_self'
|
2021-03-21 05:00:17 +00:00
|
|
|
|
headtable = 'request_headers_self'
|
|
|
|
|
headtarget = kwargs[Friend].id
|
2021-04-08 12:50:56 +00:00
|
|
|
|
headers = WikiDB.config_headers('get', headtable, headtarget)
|
2021-02-16 07:29:17 +00:00
|
|
|
|
prompt = False
|
2021-04-08 12:50:56 +00:00
|
|
|
|
get_link = WikiDB.get_start_wiki(start_table, kwargs[Group].id)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if not get_link:
|
|
|
|
|
if Group in kwargs:
|
2021-02-16 07:29:17 +00:00
|
|
|
|
prompt = '没有指定起始Wiki,已默认指定为中文Minecraft Wiki,管理员可以在群内发送~wiki_start_site <域名>来设定自定义起始Wiki。' \
|
2021-03-21 05:12:52 +00:00
|
|
|
|
'\n例子:~wiki set https://minecraft-zh.gamepedia.com/'
|
2021-04-08 12:50:56 +00:00
|
|
|
|
WikiDB.add_start_wiki('start_wiki_link_group', kwargs[Group].id,
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'https://minecraft-zh.gamepedia.com/api.php')
|
2021-02-16 07:29:17 +00:00
|
|
|
|
elif Friend in kwargs:
|
|
|
|
|
prompt = '没有指定起始Wiki,已默认指定为中文Minecraft Wiki,可以发送~wiki_start_site <域名>来设定自定义起始Wiki。' \
|
2021-03-21 05:12:52 +00:00
|
|
|
|
'\n例子:~wiki set https://minecraft-zh.gamepedia.com/'
|
2021-04-08 12:50:56 +00:00
|
|
|
|
WikiDB.add_start_wiki('start_wiki_link_self', kwargs[Friend].id,
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'https://minecraft-zh.gamepedia.com/api.php')
|
2021-02-16 07:35:36 +00:00
|
|
|
|
get_link = 'https://minecraft-zh.gamepedia.com/api.php'
|
2021-02-16 07:29:17 +00:00
|
|
|
|
iw = None
|
|
|
|
|
co = False
|
|
|
|
|
if Group in kwargs:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
check_fandom_addon_enable = BotDB.check_enable_modules(kwargs[Group].id,
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'wiki_fandom_addon')
|
2021-02-16 07:29:17 +00:00
|
|
|
|
if Friend in kwargs:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
check_fandom_addon_enable = BotDB.check_enable_modules_self(kwargs[Group].id,
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'wiki_fandom_addon')
|
2021-02-16 07:29:17 +00:00
|
|
|
|
if check_fandom_addon_enable:
|
|
|
|
|
matchsite = re.match(r'\?(.*?) (.*)', command)
|
|
|
|
|
if matchsite:
|
|
|
|
|
get_link = 'https://' + matchsite.group(1) + '.fandom.com/api.php'
|
|
|
|
|
iw = 'fd:' + matchsite.group(1)
|
|
|
|
|
co = True
|
|
|
|
|
command = matchsite.group(2)
|
|
|
|
|
matchfd = re.match(r'^fd:(.*?):(.*)', command)
|
|
|
|
|
if matchfd:
|
|
|
|
|
get_link = 'https://' + matchfd.group(1) + '.fandom.com/api.php'
|
|
|
|
|
iw = 'fd:' + matchfd.group(1)
|
|
|
|
|
co = True
|
|
|
|
|
command = matchsite.group(2)
|
2021-02-19 05:29:22 +00:00
|
|
|
|
matchinterwiki = re.match(r'(.*?):(.*)', command)
|
2021-03-01 12:11:39 +00:00
|
|
|
|
if matchinterwiki:
|
|
|
|
|
if matchinterwiki.group(1) == 'w':
|
|
|
|
|
matchinterwiki = re.match(r'(.*?):(.*)', matchinterwiki.group(2))
|
|
|
|
|
if matchinterwiki:
|
|
|
|
|
if matchinterwiki.group(1) == 'c':
|
|
|
|
|
matchinterwiki = re.match(r'(.*?):(.*)', matchinterwiki.group(2))
|
|
|
|
|
if matchinterwiki:
|
|
|
|
|
interwiki_split = matchinterwiki.group(1).split('.')
|
|
|
|
|
if len(interwiki_split) == 2:
|
|
|
|
|
get_link = f'https://{interwiki_split[1]}.fandom.com/api.php'
|
|
|
|
|
command = interwiki_split[0] + ':' + matchinterwiki.group(2)
|
|
|
|
|
iw = interwiki_split[0]
|
|
|
|
|
else:
|
|
|
|
|
get_link = f'https://{matchinterwiki.group(1)}.fandom.com/api.php'
|
|
|
|
|
command = matchinterwiki.group(2)
|
|
|
|
|
iw = matchinterwiki.group(1)
|
|
|
|
|
co = True
|
2021-02-16 07:29:17 +00:00
|
|
|
|
|
|
|
|
|
print(co)
|
|
|
|
|
matchinterwiki = re.match(r'(.*?):(.*)', command)
|
|
|
|
|
if matchinterwiki and not co:
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if Group in kwargs:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
get_custom_iw = WikiDB.get_custom_interwiki('custom_interwiki_group', kwargs[Group].id,
|
|
|
|
|
matchinterwiki.group(1))
|
2021-02-10 15:14:47 +00:00
|
|
|
|
if Friend in kwargs:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
get_custom_iw = WikiDB.get_custom_interwiki('custom_interwiki_self', kwargs[Friend].id,
|
|
|
|
|
matchinterwiki.group(1))
|
2021-02-16 07:29:17 +00:00
|
|
|
|
if get_custom_iw:
|
|
|
|
|
iw = matchinterwiki.group(1)
|
|
|
|
|
get_link = get_custom_iw
|
|
|
|
|
command = re.sub(matchinterwiki.group(1) + ':', '', command)
|
2021-03-21 12:33:05 +00:00
|
|
|
|
if command == 'random':
|
|
|
|
|
msg = await wikilib.wikilib().random_page(get_link, iw=iw, headers=headers)
|
|
|
|
|
else:
|
|
|
|
|
msg = await wikilib.wikilib().main(get_link, command, interwiki=iw, headers=headers)
|
2021-02-16 07:29:17 +00:00
|
|
|
|
if msg['status'] == 'done':
|
2021-02-19 12:20:00 +00:00
|
|
|
|
msgchain = MessageChain.create(
|
|
|
|
|
[Plain((prompt + '\n' if prompt else '') + (msg['url'] + '\n' if 'url' in msg else '') + msg['text'])])
|
2021-02-16 07:29:17 +00:00
|
|
|
|
if 'net_image' in msg:
|
|
|
|
|
try:
|
2021-04-05 15:04:42 +00:00
|
|
|
|
imgchain = MessageChain.create([Image.fromNetworkAddress(msg['net_image'])])
|
2021-02-16 07:29:17 +00:00
|
|
|
|
msgchain = msgchain.plusWith(imgchain)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
await sendMessage(kwargs, msgchain)
|
|
|
|
|
if 'apilink' in msg:
|
|
|
|
|
get_link = msg['apilink']
|
|
|
|
|
if 'url' in msg:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
check_options = BotDB.check_enable_modules_self(kwargs[Member].id if Group in kwargs else kwargs[Friend].id,
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'wiki_infobox')
|
2021-02-16 07:29:17 +00:00
|
|
|
|
print(check_options)
|
|
|
|
|
if check_options:
|
2021-03-21 05:00:17 +00:00
|
|
|
|
pic = await get_infobox_pic(get_link, msg['url'], headers)
|
|
|
|
|
imgchain = MessageChain.create([Image.fromLocalFile(pic)])
|
2021-02-16 07:29:17 +00:00
|
|
|
|
await sendMessage(kwargs, imgchain)
|
2021-02-10 15:14:47 +00:00
|
|
|
|
|
2021-02-16 07:29:17 +00:00
|
|
|
|
elif msg['status'] == 'wait':
|
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(msg['text'])]))
|
|
|
|
|
wait = await wait_confirm(kwargs)
|
|
|
|
|
if wait:
|
|
|
|
|
msg = await wikilib.wikilib().main(get_link, msg['title'])
|
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain((prompt + '\n' if prompt else '') + msg['title'])]))
|
|
|
|
|
elif msg['status'] == 'warn':
|
2021-02-10 15:14:47 +00:00
|
|
|
|
if Group in kwargs:
|
2021-02-16 07:29:17 +00:00
|
|
|
|
trigger = kwargs[Member].id
|
2021-02-10 15:14:47 +00:00
|
|
|
|
if Friend in kwargs:
|
2021-02-16 07:29:17 +00:00
|
|
|
|
trigger = kwargs[Friend].id
|
2021-04-08 12:50:56 +00:00
|
|
|
|
BotDB.warn_someone(trigger)
|
2021-02-16 07:29:17 +00:00
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain((prompt + '\n' if prompt else '') + msg['text'])]))
|
2021-02-01 15:13:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def set_start_wiki(kwargs: dict):
|
2021-03-21 05:00:17 +00:00
|
|
|
|
command = kwargs['trigger_msg']
|
|
|
|
|
command = re.sub(r'^wiki_start_site ', '', command)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if Group in kwargs:
|
|
|
|
|
if check_permission(kwargs):
|
|
|
|
|
check = await check_wiki_available(command)
|
2021-04-18 12:25:25 +00:00
|
|
|
|
if check[0]:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
result = WikiDB.add_start_wiki('start_wiki_link_group', kwargs[Group].id, check[0])
|
2021-02-01 15:13:11 +00:00
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result + check[1])]))
|
|
|
|
|
else:
|
|
|
|
|
result = '错误:此Wiki不是一个有效的MediaWiki/尝试建立连接超时。'
|
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result)]))
|
2020-09-09 14:57:25 +00:00
|
|
|
|
else:
|
2021-02-01 15:13:11 +00:00
|
|
|
|
result = '你没有使用该命令的权限。'
|
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result)]))
|
|
|
|
|
if Friend in kwargs:
|
|
|
|
|
check = await check_wiki_available(command)
|
2021-04-18 12:25:25 +00:00
|
|
|
|
if check[0]:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
result = WikiDB.add_start_wiki('start_wiki_link_self', kwargs[Friend].id, check[0])
|
2021-02-01 15:13:11 +00:00
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result + check[1])]))
|
|
|
|
|
else:
|
|
|
|
|
result = '错误:此Wiki不是一个有效的MediaWiki/尝试建立连接超时。'
|
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result)]))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def interwiki(kwargs: dict):
|
|
|
|
|
command = kwargs['trigger_msg']
|
|
|
|
|
command = re.sub(r'^interwiki ', '', command)
|
|
|
|
|
command = command.split(' ')
|
2021-03-21 05:00:17 +00:00
|
|
|
|
print(command)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if Group in kwargs:
|
|
|
|
|
check = check_permission(kwargs)
|
2021-02-18 11:44:00 +00:00
|
|
|
|
if not check:
|
2021-02-01 15:13:11 +00:00
|
|
|
|
result = '你没有使用该命令的权限。'
|
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result)]))
|
2021-02-18 11:44:00 +00:00
|
|
|
|
return
|
|
|
|
|
table = 'custom_interwiki_group'
|
|
|
|
|
target = kwargs[Group].id
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if Friend in kwargs:
|
2021-02-18 11:44:00 +00:00
|
|
|
|
table = 'custom_interwiki_self'
|
|
|
|
|
target = kwargs[Friend].id
|
|
|
|
|
if command[0] == 'add':
|
2021-03-21 05:00:17 +00:00
|
|
|
|
command = ' '.join(command[1:])
|
2021-02-18 11:44:00 +00:00
|
|
|
|
command = re.sub(' ', '>', command)
|
|
|
|
|
iw = command.split('>')
|
|
|
|
|
try:
|
|
|
|
|
check = await check_wiki_available(iw[1])
|
|
|
|
|
except:
|
2021-03-21 05:12:52 +00:00
|
|
|
|
await sendMessage(kwargs, '错误:命令不合法:~wiki iw add <interwiki> <url>')
|
2021-02-18 11:44:00 +00:00
|
|
|
|
return
|
2021-04-18 12:25:25 +00:00
|
|
|
|
if check[0]:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
result = WikiDB.config_custom_interwiki('add', table, target, iw[0],
|
|
|
|
|
check[0])
|
2021-03-21 05:00:17 +00:00
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result + f'{iw[0]} > {check[1]}')]))
|
2021-02-18 11:44:00 +00:00
|
|
|
|
else:
|
2021-04-18 12:25:25 +00:00
|
|
|
|
if check[1] == 'Timeout':
|
|
|
|
|
result = '错误:尝试建立连接超时。'
|
|
|
|
|
else:
|
|
|
|
|
result = '错误:此站点也许不是一个有效的Mediawiki。'
|
2021-02-18 11:44:00 +00:00
|
|
|
|
link = re.match(r'^(https?://).*', iw[1])
|
|
|
|
|
if not link:
|
|
|
|
|
result = '错误:所给的链接没有指明协议头(链接应以http://或https://开头)。'
|
2021-02-01 15:13:11 +00:00
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result)]))
|
2021-02-18 11:44:00 +00:00
|
|
|
|
elif command[0] == 'del':
|
2021-04-08 12:50:56 +00:00
|
|
|
|
result = WikiDB.config_custom_interwiki('del', table, target, command[1])
|
2021-02-18 11:44:00 +00:00
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result)]))
|
|
|
|
|
elif command[0] == 'list':
|
2021-04-08 12:50:56 +00:00
|
|
|
|
query_database = WikiDB.get_custom_interwiki_list(table, target)
|
2021-02-18 11:44:00 +00:00
|
|
|
|
if query_database:
|
|
|
|
|
result = '当前设置了以下Interwiki:\n' + query_database
|
|
|
|
|
await sendMessage(kwargs, result)
|
2020-09-17 12:05:44 +00:00
|
|
|
|
else:
|
2021-03-21 05:12:52 +00:00
|
|
|
|
await sendMessage(kwargs, '当前没有设置任何Interwiki,使用~wiki iw add <interwiki> <wikilink>添加一个。')
|
2021-02-18 11:44:00 +00:00
|
|
|
|
else:
|
|
|
|
|
await sendMessage(kwargs, '命令不合法,参数应为add/del/list。')
|
2021-02-01 15:13:11 +00:00
|
|
|
|
|
|
|
|
|
|
2021-03-21 05:00:17 +00:00
|
|
|
|
async def set_headers(kwargs: dict):
|
|
|
|
|
command = kwargs['trigger_msg']
|
|
|
|
|
command = command.split(' ')
|
|
|
|
|
if Group in kwargs:
|
|
|
|
|
check = check_permission(kwargs)
|
|
|
|
|
if not check:
|
|
|
|
|
result = '你没有使用该命令的权限。'
|
|
|
|
|
await sendMessage(kwargs, MessageChain.create([Plain(result)]))
|
|
|
|
|
return
|
|
|
|
|
table = 'request_headers_group'
|
|
|
|
|
id = kwargs[Group].id
|
|
|
|
|
if Friend in kwargs:
|
|
|
|
|
table = 'request_headers_self'
|
|
|
|
|
id = kwargs[Friend].id
|
|
|
|
|
do = command[0]
|
|
|
|
|
if do == 'show':
|
2021-04-08 12:50:56 +00:00
|
|
|
|
headers = WikiDB.config_headers(do, table, id)
|
2021-03-21 05:00:17 +00:00
|
|
|
|
msg = f'当前设置了以下标头:\n{headers}\n如需自定义,请使用~wiki headers <set> <headers>,不同标头之间使用换行隔开。'
|
|
|
|
|
else:
|
2021-04-08 12:50:56 +00:00
|
|
|
|
msg = WikiDB.config_headers(do, table, id, ' '.join(command[1:]))
|
2021-03-21 05:00:17 +00:00
|
|
|
|
await sendMessage(kwargs, msg)
|
|
|
|
|
|
|
|
|
|
|
2021-02-01 15:13:11 +00:00
|
|
|
|
async def regex_wiki(kwargs: dict):
|
|
|
|
|
display = kwargs[MessageChain].asDisplay()
|
|
|
|
|
|
|
|
|
|
async def regex_proc(kwargs: dict, display):
|
|
|
|
|
mains = re.findall(r'\[\[(.*?)\]\]', display, re.I)
|
|
|
|
|
templates = re.findall(r'\{\{(.*?)\}\}', display, re.I)
|
|
|
|
|
find_dict = {}
|
|
|
|
|
global_status = 'done'
|
|
|
|
|
for main in mains:
|
2021-02-14 15:25:39 +00:00
|
|
|
|
if main == '' or main in find_dict or main.find("{") != -1:
|
2021-02-01 15:13:11 +00:00
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
find_dict.update({main: 'main'})
|
|
|
|
|
for template in templates:
|
2021-02-14 15:25:39 +00:00
|
|
|
|
if template == '' or template in find_dict or template.find("{") != -1:
|
2021-02-01 15:13:11 +00:00
|
|
|
|
pass
|
2020-09-17 12:05:44 +00:00
|
|
|
|
else:
|
2021-02-01 15:13:11 +00:00
|
|
|
|
find_dict.update({template: 'template'})
|
|
|
|
|
if find_dict != {}:
|
2021-03-27 15:33:59 +00:00
|
|
|
|
await Nudge(kwargs)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
waitlist = []
|
|
|
|
|
imglist = []
|
2021-04-05 15:04:42 +00:00
|
|
|
|
audlist = []
|
2021-02-01 15:13:11 +00:00
|
|
|
|
urllist = {}
|
|
|
|
|
msglist = MessageChain.create([])
|
|
|
|
|
waitmsglist = MessageChain.create([])
|
|
|
|
|
if Group in kwargs:
|
|
|
|
|
table = 'start_wiki_link_group'
|
|
|
|
|
target = kwargs[Group].id
|
2021-03-21 05:00:17 +00:00
|
|
|
|
headtable = 'request_headers_group'
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if Friend in kwargs:
|
|
|
|
|
table = 'start_wiki_link_self'
|
|
|
|
|
target = kwargs[Friend].id
|
2021-03-21 05:00:17 +00:00
|
|
|
|
headtable = 'request_headers_self'
|
2021-04-08 12:50:56 +00:00
|
|
|
|
headers = WikiDB.config_headers('get', headtable, target)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
for find in find_dict:
|
|
|
|
|
if find_dict[find] == 'template':
|
|
|
|
|
template = True
|
|
|
|
|
else:
|
|
|
|
|
template = False
|
2021-04-08 12:50:56 +00:00
|
|
|
|
get_link = WikiDB.get_start_wiki(table, target)
|
2021-02-16 07:29:17 +00:00
|
|
|
|
prompt = False
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if not get_link:
|
|
|
|
|
if Group in kwargs:
|
2021-03-21 05:12:52 +00:00
|
|
|
|
prompt = '没有指定起始Wiki,已默认指定为中文Minecraft Wiki,管理员可以在群内发送~wiki set <域名>来设定自定义起始Wiki。' \
|
2021-04-01 16:43:17 +00:00
|
|
|
|
'\n例子:~wiki_start_site https://minecraft.fandom.com/zh/'
|
2021-04-08 12:50:56 +00:00
|
|
|
|
WikiDB.add_start_wiki('start_wiki_link_group', kwargs[Group].id,
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'https://minecraft.fandom.com/zh/api.php')
|
2021-02-16 07:29:17 +00:00
|
|
|
|
elif Friend in kwargs:
|
2021-03-21 05:12:52 +00:00
|
|
|
|
prompt = '没有指定起始Wiki,已默认指定为中文Minecraft Wiki,可以发送~wiki set <域名>来设定自定义起始Wiki。' \
|
2021-04-01 16:43:17 +00:00
|
|
|
|
'\n例子:~wiki_start_site https://minecraft.fandom.com/zh/'
|
2021-04-08 12:50:56 +00:00
|
|
|
|
WikiDB.add_start_wiki('start_wiki_link_self', kwargs[Friend].id,
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'https://minecraft.fandom.com/zh/api.php')
|
2021-04-01 16:43:17 +00:00
|
|
|
|
get_link = 'https://minecraft.fandom.com/zh/api.php'
|
2021-02-16 07:29:17 +00:00
|
|
|
|
iw = None
|
|
|
|
|
matchinterwiki = re.match(r'(.*?):(.*)', find)
|
|
|
|
|
if matchinterwiki:
|
|
|
|
|
if Group in kwargs:
|
|
|
|
|
iw_table = 'custom_interwiki_group'
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if Friend in kwargs:
|
2021-02-16 07:29:17 +00:00
|
|
|
|
iw_table = 'custom_interwiki_self'
|
2021-04-08 12:50:56 +00:00
|
|
|
|
get_custom_iw = modules.wiki.WikiDB.get_custom_interwiki(iw_table,
|
|
|
|
|
target,
|
|
|
|
|
matchinterwiki.group(1))
|
2021-02-16 07:29:17 +00:00
|
|
|
|
if get_custom_iw:
|
|
|
|
|
get_link = get_custom_iw
|
|
|
|
|
find = re.sub(matchinterwiki.group(1) + ':', '', find)
|
|
|
|
|
iw = matchinterwiki.group(1)
|
|
|
|
|
# fandom addon
|
|
|
|
|
if matchinterwiki.group(1) == 'w':
|
|
|
|
|
matchinterwiki = re.match(r'(.*?):(.*)', matchinterwiki.group(2))
|
|
|
|
|
if matchinterwiki:
|
|
|
|
|
if matchinterwiki.group(1) == 'c':
|
2021-04-08 12:50:56 +00:00
|
|
|
|
check_fandom_addon_enable = BotDB.check_enable_modules(kwargs[Group].id,
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'wiki_fandom_addon')
|
2021-02-16 07:29:17 +00:00
|
|
|
|
if check_fandom_addon_enable:
|
|
|
|
|
matchinterwiki = re.match(r'(.*?):(.*)', matchinterwiki.group(2))
|
|
|
|
|
if matchinterwiki:
|
|
|
|
|
interwiki_split = matchinterwiki.group(1).split('.')
|
|
|
|
|
if len(interwiki_split) == 2:
|
|
|
|
|
get_link = f'https://{interwiki_split[1]}.fandom.com/api.php'
|
|
|
|
|
find = interwiki_split[0] + ':' + matchinterwiki.group(2)
|
|
|
|
|
iw = interwiki_split[0]
|
|
|
|
|
else:
|
|
|
|
|
get_link = f'https://{matchinterwiki.group(1)}.fandom.com/api.php'
|
|
|
|
|
find = matchinterwiki.group(2)
|
|
|
|
|
iw = matchinterwiki.group(1)
|
2021-04-08 15:21:40 +00:00
|
|
|
|
msg = await modules.wiki.wikilib.wikilib().main(get_link, find, interwiki=iw, template=template,
|
|
|
|
|
headers=headers)
|
2021-02-16 07:29:17 +00:00
|
|
|
|
status = msg['status']
|
2021-04-01 15:58:02 +00:00
|
|
|
|
text = (prompt + '\n' if prompt else '') + msg['text']
|
2021-02-17 10:26:41 +00:00
|
|
|
|
if status == 'wait':
|
|
|
|
|
global_status = 'wait'
|
|
|
|
|
waitlist.append(msg['title'])
|
|
|
|
|
waitmsglist = waitmsglist.plusWith(MessageChain.create(
|
2021-02-17 10:31:28 +00:00
|
|
|
|
[Plain(('\n' if waitmsglist != MessageChain.create([]) else '') + text)]))
|
2021-02-17 10:26:41 +00:00
|
|
|
|
if status == 'warn':
|
|
|
|
|
global_status = 'warn'
|
|
|
|
|
msglist = msglist.plusWith(MessageChain.create(
|
|
|
|
|
[Plain(('\n' if msglist != MessageChain.create([]) else '') + text)]))
|
|
|
|
|
if status == 'done':
|
|
|
|
|
msglist = msglist.plusWith(MessageChain.create([Plain(
|
|
|
|
|
('\n' if msglist != MessageChain.create([]) else '') + (
|
|
|
|
|
msg['url'] + '\n' if 'url' in msg else '') + text)]))
|
|
|
|
|
if 'net_image' in msg:
|
|
|
|
|
imglist.append(msg['net_image'])
|
2021-04-05 15:04:42 +00:00
|
|
|
|
if 'net_audio' in msg:
|
|
|
|
|
audlist.append(msg['net_audio'])
|
2021-02-17 10:26:41 +00:00
|
|
|
|
if 'apilink' in msg:
|
|
|
|
|
get_link = msg['apilink']
|
|
|
|
|
if 'url' in msg:
|
|
|
|
|
urllist.update({msg['url']: get_link})
|
|
|
|
|
if status is None:
|
|
|
|
|
msglist = msglist.plusWith(MessageChain.create([Plain('发生错误:机器人内部代码错误,请联系开发者解决。')]))
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if msglist != MessageChain.create([]):
|
|
|
|
|
await sendMessage(kwargs, msglist)
|
|
|
|
|
if imglist != []:
|
|
|
|
|
imgchain = MessageChain.create([])
|
|
|
|
|
for img in imglist:
|
2021-04-05 15:04:42 +00:00
|
|
|
|
imgchain = imgchain.plusWith(MessageChain.create([Image.fromNetworkAddress(img)]))
|
2021-02-01 15:13:11 +00:00
|
|
|
|
await sendMessage(kwargs, imgchain)
|
2021-04-05 15:04:42 +00:00
|
|
|
|
if audlist != []:
|
|
|
|
|
for aud in audlist:
|
2021-04-08 15:21:40 +00:00
|
|
|
|
audchain = MessageChain.create(
|
|
|
|
|
[Voice().fromLocalFile(await slk_converter(await download_to_cache(aud)))])
|
2021-04-05 15:04:42 +00:00
|
|
|
|
await sendMessage(kwargs, audchain)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if urllist != {}:
|
|
|
|
|
print(urllist)
|
2021-04-08 12:50:56 +00:00
|
|
|
|
check_options = BotDB.check_enable_modules_self(
|
2021-02-01 15:13:11 +00:00
|
|
|
|
kwargs[Member].id if Group in kwargs else kwargs[Friend].id, 'wiki_infobox')
|
|
|
|
|
if check_options:
|
|
|
|
|
infoboxchain = MessageChain.create([])
|
|
|
|
|
for url in urllist:
|
2021-04-01 15:58:02 +00:00
|
|
|
|
get_infobox = await get_infobox_pic(urllist[url], url, headers)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if get_infobox:
|
|
|
|
|
infoboxchain = infoboxchain.plusWith(
|
2021-04-05 15:04:42 +00:00
|
|
|
|
MessageChain.create([Image.fromLocalFile(get_infobox)]))
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if infoboxchain != MessageChain.create([]):
|
2021-02-03 07:40:17 +00:00
|
|
|
|
await sendMessage(kwargs, infoboxchain, Quote=False)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if global_status == 'warn':
|
|
|
|
|
if Group in kwargs:
|
|
|
|
|
trigger = kwargs[Member].id
|
|
|
|
|
if Friend in kwargs:
|
|
|
|
|
trigger = kwargs[Friend].id
|
2021-04-08 12:50:56 +00:00
|
|
|
|
BotDB.warn_someone(trigger)
|
2021-02-01 15:13:11 +00:00
|
|
|
|
if waitmsglist != MessageChain.create([]):
|
|
|
|
|
send = await sendMessage(kwargs, waitmsglist)
|
|
|
|
|
wait = await wait_confirm(kwargs)
|
|
|
|
|
if wait:
|
|
|
|
|
nwaitlist = []
|
|
|
|
|
for waits in waitlist:
|
|
|
|
|
waits1 = f'[[{waits}]]'
|
|
|
|
|
nwaitlist.append(waits1)
|
|
|
|
|
await regex_proc(kwargs, '\n'.join(nwaitlist))
|
|
|
|
|
else:
|
|
|
|
|
await revokeMessage(send)
|
|
|
|
|
|
|
|
|
|
await regex_proc(kwargs, display)
|
2020-08-07 06:19:34 +00:00
|
|
|
|
|
|
|
|
|
|
2021-02-01 15:13:11 +00:00
|
|
|
|
command = {'wiki': wiki_loader, 'wiki_start_site': set_start_wiki, 'interwiki': interwiki}
|
|
|
|
|
regex = {'wiki_regex': regex_wiki}
|
|
|
|
|
self_options = ['wiki_infobox']
|
2021-04-17 15:17:29 +00:00
|
|
|
|
options = ['wiki_fandom_addon']
|
2021-03-21 05:12:52 +00:00
|
|
|
|
help = {'wiki': {'help': '~wiki [interwiki:]<pagename> - 查询Wiki内容。\n' +
|
2021-04-08 15:21:40 +00:00
|
|
|
|
'~wiki set <wikilink> - 设置起始查询Wiki。\n' +
|
|
|
|
|
'~wiki iw <add/del> <interwiki> <wikiurl> - 设置自定义Interwiki跨站查询。\n' +
|
|
|
|
|
'~wiki headers <set/reset/show> - 设置请求标头。'},
|
2021-02-09 13:05:19 +00:00
|
|
|
|
'wiki_start_site': {'help': '~wiki_start_site <wikilink> - 设置起始查询Wiki。'},
|
|
|
|
|
'interwiki': {
|
2021-03-21 05:12:52 +00:00
|
|
|
|
'help': '~interwiki <add/del> <interwiki> <wikiurl> - 设置自定义Interwiki跨站查询。'},
|
2021-02-09 13:05:19 +00:00
|
|
|
|
'wiki_regex': {'help': '[[<pagename>]]|{{<pagename>}} - 当聊天中出现此种Wikitext时进行自动查询。'},
|
|
|
|
|
'wiki_infobox': {
|
|
|
|
|
'help': 'Infobox渲染:当被查询的页面包含Infobox时自动提取并渲染为图片发送。(群聊默认开启且不可全局关闭,个人可使用~disable self wiki_infobox关闭)',
|
|
|
|
|
'depend': 'wiki'},
|
|
|
|
|
'wiki_fandom_addon': {
|
2021-04-17 15:17:29 +00:00
|
|
|
|
'help': '为Fandom定制的Wiki查询功能,包含有[[w:c:<wikiname>:[langcode:]<pagename>]]的消息会自动定向查询至Fandom的Wiki。'}}
|