wikipedia: add plugin
This commit is contained in:
parent
daab101a66
commit
8b5721375f
|
@ -21,6 +21,6 @@ Missing features
|
|||
- [ ] Music
|
||||
- [ ] Opinions
|
||||
- [ ] Translate
|
||||
- [ ] Wikipedia: find definition, get random page
|
||||
- [x] Wikipedia: find definition, get random page
|
||||
- [ ] Wolframalpha
|
||||
- [ ] Youtube: parsing for title, requests for channel or video
|
||||
|
|
|
@ -25,6 +25,13 @@
|
|||
"calm": "Fine!",
|
||||
"pissed": "Pissed off..."
|
||||
}
|
||||
},
|
||||
"wikipedia": {
|
||||
"commands": ["science", "define"],
|
||||
"lang": "en",
|
||||
"ambiguous_response": "It is ambiguous.",
|
||||
"empty_response": "I can't find it.",
|
||||
"error_response": "An error occured ;("
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
67
edmond/plugins/wikipedia.py
Normal file
67
edmond/plugins/wikipedia.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
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)
|
Loading…
Reference in a new issue