commit
2e6ff51121
|
@ -708,6 +708,14 @@ including version, how many users are connected, and ping time.
|
||||||
* !mumble - Show info about the configured mumble server
|
* !mumble - Show info about the configured mumble server
|
||||||
- !mumble (set|setserver) [host] ([port]) - Set the configured mumble server
|
- !mumble (set|setserver) [host] ([port]) - Set the configured mumble server
|
||||||
|
|
||||||
|
### Wikipedia
|
||||||
|
|
||||||
|
Searches Wikipedia for a given query and returns the first result summary and link.
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
* !wikipedia [query] - Search Wikipedia for query
|
||||||
|
|
||||||
## Bot setup
|
## Bot setup
|
||||||
|
|
||||||
* Create a Matrix user
|
* Create a Matrix user
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
import re
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from modules.common.module import BotModule
|
||||||
|
|
||||||
|
# This module searches wikipedia for query, returns page summary and link.
|
||||||
|
class MatrixModule(BotModule):
|
||||||
|
def __init__(self, name):
|
||||||
|
super().__init__(name)
|
||||||
|
self.api_url = 'https://en.wikipedia.org/w/api.php'
|
||||||
|
|
||||||
|
async def matrix_message(self, bot, room, event):
|
||||||
|
args = event.body.split()
|
||||||
|
|
||||||
|
if len(args) > 1:
|
||||||
|
query = event.body[len(args[0])+1:]
|
||||||
|
try:
|
||||||
|
response = requests.get(self.api_url, params={
|
||||||
|
'action': 'query',
|
||||||
|
'prop': 'extracts',
|
||||||
|
'exintro': True,
|
||||||
|
'explaintext': True,
|
||||||
|
'titles': query,
|
||||||
|
'format': 'json',
|
||||||
|
'formatversion': 2
|
||||||
|
})
|
||||||
|
|
||||||
|
response.raise_for_status()
|
||||||
|
data = response.json()
|
||||||
|
if 'query' not in data or 'pages' not in data['query'] or len(data['query']['pages']) == 0:
|
||||||
|
await bot.send_text(room, 'No results found')
|
||||||
|
return
|
||||||
|
|
||||||
|
page = data['query']['pages'][0]
|
||||||
|
|
||||||
|
if 'extract' not in page:
|
||||||
|
await bot.send_text(room, 'No results found')
|
||||||
|
return
|
||||||
|
|
||||||
|
# Remove all html tags
|
||||||
|
extract = re.sub('<[^<]+?>', '', page['extract'])
|
||||||
|
# Remove any multiple spaces
|
||||||
|
extract = re.sub(' +', ' ', extract)
|
||||||
|
# Remove any new lines
|
||||||
|
extract = re.sub('', '', extract)
|
||||||
|
# Remove any tabs
|
||||||
|
extract = re.sub('\t', '', extract)
|
||||||
|
|
||||||
|
# Truncate to 500 chars
|
||||||
|
extract = extract[:500]
|
||||||
|
|
||||||
|
# Add a link to the page
|
||||||
|
extract = extract + '\nhttps://en.wikipedia.org/?curid=' + str(page['pageid'])
|
||||||
|
|
||||||
|
await bot.send_text(room, extract)
|
||||||
|
return
|
||||||
|
except Exception as exc:
|
||||||
|
await bot.send_text(room, str(exc))
|
||||||
|
else:
|
||||||
|
await bot.send_text(room, 'Usage: !wikipedia <query>')
|
||||||
|
|
||||||
|
def help(self):
|
||||||
|
return ('Wikipedia bot')
|
Loading…
Reference in New Issue