wikipedia: add plugin
This commit is contained in:
parent
daab101a66
commit
8b5721375f
|
@ -21,6 +21,6 @@ Missing features
|
||||||
- [ ] Music
|
- [ ] Music
|
||||||
- [ ] Opinions
|
- [ ] Opinions
|
||||||
- [ ] Translate
|
- [ ] Translate
|
||||||
- [ ] Wikipedia: find definition, get random page
|
- [x] Wikipedia: find definition, get random page
|
||||||
- [ ] Wolframalpha
|
- [ ] Wolframalpha
|
||||||
- [ ] Youtube: parsing for title, requests for channel or video
|
- [ ] Youtube: parsing for title, requests for channel or video
|
||||||
|
|
|
@ -25,6 +25,13 @@
|
||||||
"calm": "Fine!",
|
"calm": "Fine!",
|
||||||
"pissed": "Pissed off..."
|
"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