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

141 lines
6.3 KiB
Python
Raw Normal View History

2020-08-07 06:19:34 +00:00
import asyncio
2020-08-12 16:01:34 +00:00
import re
2020-08-07 06:19:34 +00:00
import traceback
2020-08-12 16:01:34 +00:00
2020-08-18 13:12:38 +00:00
from modules.help import wikihelp
from modules.interwikilist import iwlist, iwlink
2020-09-05 09:51:43 +00:00
from .wikilib import wiki
2020-08-12 16:01:34 +00:00
2020-09-06 08:17:11 +00:00
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']
2020-08-12 16:01:34 +00:00
2020-09-05 09:51:43 +00:00
async def wmg(message, group=0):
2020-08-14 07:43:26 +00:00
if message.find(' -h') != -1:
2020-08-20 10:30:08 +00:00
return wikihelp()
2020-08-07 06:19:34 +00:00
else:
2020-08-14 07:43:26 +00:00
lower = re.sub(r'^Wiki', 'wiki', message)
2020-09-09 14:57:25 +00:00
matchmsg = re.match(r'^wiki-(.*?) (.*)', lower)
if matchmsg:
2020-08-14 07:43:26 +00:00
interwiki = matchmsg.group(1)
if interwiki in iwlist():
2020-09-05 09:51:43 +00:00
return await wiki(iwlink(interwiki), matchmsg.group(2))
2020-08-07 06:19:34 +00:00
else:
2020-09-09 14:57:25 +00:00
return '未知Interwiki请使用~wiki -h查看帮助。'
matchmsg = re.match(r'^wiki (.*)', lower)
if matchmsg:
matchsite = re.match(r'~(.*?) (.*)', matchmsg.group(1))
if matchsite:
2020-08-30 08:26:54 +00:00
wikiurl = 'https://' + matchsite.group(1) + '.gamepedia.com/'
2020-09-06 08:17:11 +00:00
return await wiki(wikiurl, matchsite.group(2), 'gp:' + matchsite.group(1))
2020-09-09 14:57:25 +00:00
return await choosemethod(matchmsg.group(1), group)
2020-08-07 06:19:34 +00:00
2020-09-09 14:57:25 +00:00
async def choosemethod(matchmsg, group='0', basewiki='en'):
2020-08-07 06:19:34 +00:00
try:
2020-09-09 14:57:25 +00:00
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/'
2020-09-06 08:17:11 +00:00
pagename = matchsitename.group(2)
2020-09-09 12:31:16 +00:00
interwiki = 'fd:' + matchsitename.group(1)
2020-09-09 14:57:25 +00:00
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))
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):
pipe = re.match(r'(.*?)\|.*', message)
if pipe:
message = pipe.group(1)
message = re.sub(r'^:', '', message)
url = iwlink('zh')
pagename = message
interwiki = ''
matchinterwiki = re.match(r'(.*?):(.*)', message)
if matchinterwiki:
return await choosemethod(message, basewiki='zh')
else:
return await wiki(url, pagename, interwiki)
2020-08-12 16:01:34 +00:00
2020-08-07 06:19:34 +00:00
2020-08-14 07:43:26 +00:00
async def imarc(message):
2020-08-07 06:19:34 +00:00
try:
2020-08-14 07:43:26 +00:00
pipe = re.match(r'(.*?)\|.*', message)
message = pipe.group(1)
2020-08-07 06:19:34 +00:00
except Exception:
2020-08-14 07:43:26 +00:00
pass
message = re.sub(r'^:', '', message)
url = 'https://wiki.arcaea.cn/'
2020-09-05 09:51:43 +00:00
interwiki = ''
return await wiki(url, message, interwiki, igmessage=True)
2020-08-12 16:01:34 +00:00
2020-08-07 06:19:34 +00:00
2020-08-14 07:43:26 +00:00
async def imt(message):
2020-09-09 14:57:25 +00:00
pipe = re.match(r'(.*?)\|.*', message)
if pipe:
2020-08-14 07:43:26 +00:00
message = pipe.group(1)
message = re.sub(r'^:', '', message)
2020-09-09 14:57:25 +00:00
matchinterwiki = re.match(r'(.*?):(.*)', message)
interwiki = matchinterwiki.group(1)
interwiki = str.lower(interwiki)
url = iwlink('zh')
pagename = 'Template:' + message
if interwiki in iwlist():
url = iwlink(interwiki)
pagename = 'Template:' + matchinterwiki.group(2)
2020-09-05 09:59:54 +00:00
return await wiki(url, pagename, interwiki, igmessage=False, template=True)
2020-08-07 06:19:34 +00:00
if __name__ == '__main__':
2020-08-12 16:01:34 +00:00
print(asyncio.run(wiki('wiki Netherite')))