|
@@ -28,24 +28,35 @@ class Link(Command): |
|
|
"""Convert a Wikipedia page name into a URL.""" |
|
|
"""Convert a Wikipedia page name into a URL.""" |
|
|
name = "link" |
|
|
name = "link" |
|
|
|
|
|
|
|
|
|
|
|
def setup(self): |
|
|
|
|
|
self.last = {} |
|
|
|
|
|
|
|
|
|
|
|
def check(self, data): |
|
|
|
|
|
if re.search("(\[\[(.*?)\]\])|(\{\{(.*?)\}\})", data.msg): |
|
|
|
|
|
self.last[data.chan] = data.msg # Store most recent link |
|
|
|
|
|
return data.is_command and data.command == self.name |
|
|
|
|
|
|
|
|
def process(self, data): |
|
|
def process(self, data): |
|
|
self.site = self.bot.wiki.get_site() |
|
|
self.site = self.bot.wiki.get_site() |
|
|
msg = data.msg |
|
|
|
|
|
|
|
|
|
|
|
if re.search("(\[\[(.*?)\]\])|(\{\{(.*?)\}\})", msg): |
|
|
|
|
|
links = self.parse_line(msg) |
|
|
|
|
|
links = u" , ".join(links) |
|
|
|
|
|
|
|
|
if re.search("(\[\[(.*?)\]\])|(\{\{(.*?)\}\})", data.msg): |
|
|
|
|
|
links = u" , ".join(self.parse_line(data.msg)) |
|
|
self.reply(data, links.encode("utf8")) |
|
|
self.reply(data, links.encode("utf8")) |
|
|
|
|
|
|
|
|
elif data.command == "link": |
|
|
elif data.command == "link": |
|
|
if not data.args: |
|
|
if not data.args: |
|
|
self.reply(data, "What do you want me to link to?") |
|
|
|
|
|
|
|
|
if self.last[data.chan]: |
|
|
|
|
|
links = u" , ".join(self.parse_line(self.last[data.chan])) |
|
|
|
|
|
self.reply(data, links.encode("utf8")) |
|
|
|
|
|
else: |
|
|
|
|
|
self.reply(data, "What do you want me to link to?") |
|
|
return |
|
|
return |
|
|
pagename = " ".join(data.args) |
|
|
pagename = " ".join(data.args) |
|
|
link = self.site.get_page(pagename).url.encode("utf8") |
|
|
link = self.site.get_page(pagename).url.encode("utf8") |
|
|
self.reply(data, link) |
|
|
self.reply(data, link) |
|
|
|
|
|
|
|
|
def parse_line(self, line): |
|
|
def parse_line(self, line): |
|
|
|
|
|
"""Return a list of links within a line of text.""" |
|
|
results = [] |
|
|
results = [] |
|
|
|
|
|
|
|
|
# Destroy {{{template parameters}}}: |
|
|
# Destroy {{{template parameters}}}: |
|
@@ -61,10 +72,8 @@ class Link(Command): |
|
|
# Find all {{templates}} |
|
|
# Find all {{templates}} |
|
|
templates = re.findall("(\{\{(.*?)(\||\}\}))", line) |
|
|
templates = re.findall("(\{\{(.*?)(\||\}\}))", line) |
|
|
if templates: |
|
|
if templates: |
|
|
templates = [i[1] for i in templates] |
|
|
|
|
|
results.extend(map(self.parse_template, templates)) |
|
|
|
|
|
|
|
|
p_tmpl = lambda name: self.site.get_page("Template:" + name).url |
|
|
|
|
|
templates = [p_tmpl(i[1]) for i in templates] |
|
|
|
|
|
results += templates |
|
|
|
|
|
|
|
|
return results |
|
|
return results |
|
|
|
|
|
|
|
|
def parse_template(self, pagename): |
|
|
|
|
|
return self.site.get_page("Template:" + pagename).url |
|
|
|