Merge pull request #233 from Aciid/wikipedia

New module Wikipedia
This commit is contained in:
Ville Ranki 2023-03-06 09:18:16 +02:00 committed by GitHub
commit 2e6ff51121
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 72 additions and 0 deletions

View File

@ -708,6 +708,14 @@ including version, how many users are connected, and ping time.
* !mumble - Show info about 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
* Create a Matrix user

64
modules/wikipedia.py Normal file
View File

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