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", "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 # "science" if self.command.ident == self.config["commands"][0]: self.tell_random_summary(event) # "definition" elif self.command.ident == self.config["commands"][1]: 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: # The wikipedia package can raise a lot of different stuff. 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: summary = self.bot.config["error_message"] # Keep trying after a slight delay. time.sleep(1) retries -= 1 if summary: self.bot.say(event.target, summary)