wikipedia: add plugin

This commit is contained in:
dece 2020-10-09 13:31:00 +02:00
parent daab101a66
commit 8b5721375f
3 changed files with 75 additions and 1 deletions

View file

@ -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

View file

@ -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 ;("
} }
} }
} }

View 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)