minetestbot-modules/devwiki.py

57 lines
1.4 KiB
Python
Raw Normal View History

2013-06-18 13:23:09 -07:00
#!/usr/bin/env python
"""
2014-07-20 07:13:59 -07:00
wiki.py - Phenny Wiki Module
Copyright 2014, sfan5
2013-06-18 13:23:09 -07:00
"""
2014-07-20 07:13:59 -07:00
import re
2013-06-18 13:23:09 -07:00
import web
2014-07-20 07:13:59 -07:00
import urllib.parse
wikiuri_g = 'http://dev.minetest.net/index.php?title=%s&printable=yes'
wikiuri_r = 'http://dev.minetest.net/index.php?title=%s'
r_content = re.compile(r'(?i)<div[^>]+class=.mw-content-ltr.>')
r_paragraph = re.compile(r'(?ims)<p>(.+?)</p>')
r_sentenceend = re.compile(r'\.[^\.]')
transforms = [
re.compile(r'(?i)<a [^>]+>(.+?)</a>'),
re.compile(r'(?i)<b>(.+?)</b>'),
re.compile(r'(?i)<i>(.+?)</i>'),
]
def wiki(phenny, input):
term = input.group(2)
if not term:
return
log.log("event", "%s queried Developer Wiki for '%s'" % (log.fmt_user(input), term), phenny)
term = web.urlencode(term)
data, scode = web.get(wikiuri_g % term)
if scode == 404:
return phenny.say("No such page.")
data = str(data, "utf-8")
m = re.search(r_content, data)
if not m:
return phenny.say("Sorry, did not find anything.")
data = data[m.span()[1]:]
m = re.search(r_paragraph, data)
if not m:
return phenny.say("Sorry, did not find anything.")
data = m.group(1)
for transform in transforms:
data = re.sub(transform, '\g<1>', data)
m = re.search(r_sentenceend, data)
if m:
data = data[:m.span()[1]-1]
phenny.say('"%s" - %s ' % (web.decode(data), wikiuri_r % term))
wiki.commands = ['devwik', 'devwiki']
wiki.priority = 'high'
2013-06-18 13:23:09 -07:00
if __name__ == '__main__':
2014-07-20 07:13:59 -07:00
print(__doc__.strip())