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/__init__.py
2020-09-19 18:30:27 +08:00

160 lines
6.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import asyncio
import re
import traceback
from modules.help import wikihelp
from modules.interwikilist import iwlist, iwlink
from .wikilib import wiki
langcode = ['ab', 'aa', 'af', 'sq', 'am', 'ar', 'hy', 'as', 'ay', 'az', 'ba', 'eu', 'bn', 'dz', 'bh', 'bi', 'br', 'bg',
'my', 'be', 'km', 'ca', 'zh', 'co', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'et', 'fo', 'fa', 'fj', 'fi', 'fr',
'fy', 'gl', 'gd', 'gv', 'ka', 'de', 'el', 'kl', 'gn', 'gu', 'ha', 'he', 'iw', 'hi', 'hu', 'is', 'id', 'in',
'ia', 'ie', 'iu', 'ik', 'ga', 'it', 'ja', 'jv', 'kn', 'ks', 'kk', 'rw', 'ky', 'rn', 'ko', 'ku', 'lo', 'la',
'lv', 'li', 'ln', 'lt', 'mk', 'mg', 'ms', 'ml', 'mt', 'mi', 'mr', 'mo', 'mn', 'na', 'ne', 'no', 'oc', 'or',
'om', 'ps', 'pl', 'pt', 'pa', 'qu', 'rm', 'ro', 'ru', 'sm', 'sg', 'sa', 'sr', 'sh', 'st', 'tn', 'sn', 'sd',
'si', 'ss', 'sk', 'sl', 'so', 'es', 'su', 'sw', 'sv', 'tl', 'tg', 'ta', 'tt', 'te', 'th', 'to', 'ts', 'tr',
'tk', 'tw', 'ug', 'uk', 'ur', 'uz', 'vi', 'vo', 'cy', 'wo', 'xh', 'yi', 'yo', 'zu']
async def main(message, group=0):
if message.find(' -h') != -1:
return wikihelp()
else:
lower = re.sub(r'^Wiki', 'wiki', message)
matchmsg = re.match(r'^wiki-(.*?) (.*)', lower)
if matchmsg:
interwiki = matchmsg.group(1)
if interwiki in iwlist():
return await wiki(iwlink(interwiki), matchmsg.group(2))
else:
return '未知Interwiki请使用~wiki -h查看帮助。'
matchmsg = re.match(r'^wiki (.*)', lower)
if matchmsg:
matchsite = re.match(r'~(.*?) (.*)', matchmsg.group(1))
if matchsite:
wikiurl = 'https://' + matchsite.group(1) + '.gamepedia.com/'
return await wiki(wikiurl, matchsite.group(2), 'gp:' + matchsite.group(1))
return await choosemethod(matchmsg.group(1), group)
async def choosemethod(matchmsg, group='0', basewiki='en'):
try:
pagename = matchmsg
if group == 250500369 or group == 676942198:
wikiurl = 'https://wiki.arcaea.cn/'
return await wiki(wikiurl, pagename, 'arc')
else:
matchinterwiki = re.match(r'(.*?):(.*)', matchmsg)
if matchinterwiki:
pagename = matchinterwiki.group(2)
interwiki = str.lower(matchinterwiki.group(1))
if interwiki == 'gp':
matchsitename = re.match(r'(.*?):(.*)', pagename)
wikiurl = 'https://' + matchsitename.group(1) + '.gamepedia.com/'
return await wiki(wikiurl, matchsitename.group(2), 'gp:' + matchsitename.group(1))
if interwiki == 'fd':
matchsitename = re.match(r'(.*?):(.*)', pagename)
wikiurl = f'https://{matchsitename.group(1)}.fandom.com/'
pagename = matchsitename.group(2)
interwiki = 'fd:' + matchsitename.group(1)
matchlangcode = re.match(r'(.*?):(.*)', matchsitename.group(2))
if matchlangcode:
if matchlangcode.group(1) in langcode:
wikiurl = f'https://{matchsitename.group(1)}.fandom.com/{matchlangcode.group(1)}/'
pagename = matchlangcode.group(2)
interwiki = 'fd:' + matchsitename.group(1) + ':' + matchlangcode.group(1)
return await wiki(wikiurl, pagename, interwiki)
if interwiki == 'w':
matchsitename = re.match(r'(.*?):(.*)', pagename)
if matchsitename.group(1) == 'c':
matchsitename = re.match(r'(.*?):(.*)', matchsitename.group(2))
wikiurl = f'https://{matchsitename.group(1)}.fandom.com/'
pagename = matchsitename.group(2)
interwiki = 'w:c:' + matchsitename.group(1)
matchlangcode = re.match(r'(.*?):(.*)', matchsitename.group(2))
if matchlangcode:
if matchlangcode.group(1) in langcode:
wikiurl = f'https://{matchsitename.group(1)}.fandom.com/{matchlangcode.group(1)}/'
pagename = matchlangcode.group(2)
interwiki = 'w:c:' + matchsitename.group(1) + ':' + matchlangcode.group(1)
return await wiki(wikiurl, pagename, interwiki)
if interwiki in iwlist():
wikiurl = iwlink(interwiki)
return await wiki(wikiurl, pagename, interwiki)
elif interwiki == 'Wikipedia' or interwiki == 'wikipedia':
return '暂不支持Wikipedia查询。'
else:
wikiurl = iwlink(basewiki)
return await wiki(wikiurl, matchmsg, '')
else:
wikiurl = iwlink(basewiki)
return await wiki(wikiurl, matchmsg, '')
except Exception as e:
traceback.print_exc()
return f'发生错误:{str(e)}'
async def im(message):
z = []
a = '\n'
for x in message:
pipe = re.match(r'(.*?)\|.*', x)
if pipe:
x = pipe.group(1)
x = re.sub(r'^:', '', x)
url = iwlink('zh')
pagename = x
interwiki = ''
matchinterwiki = re.match(r'(.*?):(.*)', x, re.I)
if matchinterwiki:
z.append(await choosemethod(x, basewiki='zh'))
else:
z.append(await wiki(url, pagename, interwiki))
return a.join(z)
async def imarc(message):
z = []
a = '\n'
for x in message:
pipe = re.match(r'(.*?)\|.*', x, re.I)
x = pipe.group(1)
x = re.sub(r'^:', '', x)
url = 'https://wiki.arcaea.cn/'
interwiki = ''
z.append(await wiki(url, x, interwiki, igmessage=True))
return a.join(z)
async def imt(message):
z = []
a = '\n'
for x in message:
pipe = re.match(r'(.*?)\|.*', x, re.I)
if pipe:
x = pipe.group(1)
x = re.sub(r'^:', '', x)
url = iwlink('zh')
pagename = 'Template:' + x
matchinterwiki = re.match(r'(.*?):(.*)', x)
interwiki = ''
if matchinterwiki:
interwiki = matchinterwiki.group(1)
interwiki = str.lower(interwiki)
if interwiki in iwlist():
url = iwlink(interwiki)
pagename = 'Template:' + matchinterwiki.group(2)
else:
interwiki = ''
pagename = 'Template:' + x
z.append(await wiki(url, pagename, interwiki, igmessage=False, template=True))
return a.join(z)
if __name__ == '__main__':
print(asyncio.run(wiki('wiki Netherite')))
command = {'wiki':'wiki'}