68 lines
2 KiB
Python
68 lines
2 KiB
Python
|
import time
|
||
|
|
||
|
try:
|
||
|
import wikipedia
|
||
|
DEPENDENCIES_FOUND = True
|
||
|
except ImportError:
|
||
|
DEPENDENCIES_FOUND = False
|
||
|
|
||
|
from edmond.plugin import Plugin
|
||
|
|
||
|
|
||
|
class WikipediaPlugin(Plugin):
|
||
|
|
||
|
REQUIRED_CONFIGS = [
|
||
|
"commands", "ambiguous_response", "empty_response", "error_response",
|
||
|
"lang",
|
||
|
]
|
||
|
NUM_RETRIES = 3
|
||
|
|
||
|
def __init__(self, bot):
|
||
|
super().__init__(bot)
|
||
|
if not self.is_ready:
|
||
|
return
|
||
|
wikipedia.set_lang(self.config["lang"])
|
||
|
|
||
|
def on_pubmsg(self, event):
|
||
|
if not self.should_handle_command(event.arguments[0]):
|
||
|
return False
|
||
|
if self.command.ident == "science":
|
||
|
self.tell_random_summary(event)
|
||
|
elif self.command.ident == "define":
|
||
|
self.tell_definition(event)
|
||
|
return True
|
||
|
|
||
|
def tell_random_summary(self, event):
|
||
|
summary = ""
|
||
|
retries = self.NUM_RETRIES
|
||
|
while retries > 0:
|
||
|
try:
|
||
|
summary = wikipedia.summary(wikipedia.random(), sentences=1)
|
||
|
break
|
||
|
except wikipedia.exceptions.WikipediaException:
|
||
|
pass
|
||
|
retries -= 1
|
||
|
if summary:
|
||
|
self.bot.say(event.target, summary)
|
||
|
|
||
|
def tell_definition(self, event):
|
||
|
summary = ""
|
||
|
retries = self.NUM_RETRIES
|
||
|
while retries > 0:
|
||
|
try:
|
||
|
summary = wikipedia.summary(self.command.content, sentences=1)
|
||
|
break
|
||
|
except wikipedia.exceptions.DisambiguationError:
|
||
|
summary = self.config["ambiguous_response"]
|
||
|
break
|
||
|
except wikipedia.exceptions.PageError:
|
||
|
summary = self.config["empty_response"]
|
||
|
break
|
||
|
except wikipedia.exceptions.WikipediaException:
|
||
|
summary = self.config["error_response"]
|
||
|
# Keep trying after a slight delay.
|
||
|
time.sleep(1)
|
||
|
retries -= 1
|
||
|
if summary:
|
||
|
self.bot.say(event.target, summary)
|