Added !wiki command

This commit is contained in:
gpkvt 2022-08-24 18:03:57 +02:00
parent b5b41537d5
commit c5c2c6201b
6 changed files with 79 additions and 10 deletions

View File

@ -2,9 +2,18 @@
All notable changes to this project will be documented in this file. If there is a `Changed` section please read carefully, as this often means that you will need to adapt your `config.yml`, otherwise the bot might fail to start. All notable changes to this project will be documented in this file. If there is a `Changed` section please read carefully, as this often means that you will need to adapt your `config.yml`, otherwise the bot might fail to start.
## [1.4.1] - unreleased ## [1.5.0] - unreleased
### Fixed 1.4.1 ### Added 1.5.0
* `!wiki` command
* `!version` command
### Changed 1.5.0
* Added `!sq` as alias for `!smartquote`
### Fixed 1.5.0
* Darkmode: Options background color * Darkmode: Options background color

View File

@ -53,6 +53,7 @@ bot:
subonly: False subonly: False
modonly: False modonly: False
message_length: 200 message_length: 200
language: de
messages: messages:
toff: "TTS is now inactive." toff: "TTS is now inactive."
@ -72,6 +73,8 @@ messages:
quotenotfound: "Sorry, no quote found." quotenotfound: "Sorry, no quote found."
quoteaddedprefix: "Quote:" quoteaddedprefix: "Quote:"
quoteaddedsuffix: "added." quoteaddedsuffix: "added."
wiki_too_many: "Sorry, there are too many possible results. Try a more narrow search."
wiki_no_result: "Sorry, there was an error fetching the wikipedia answer."
log: log:
level: "INFO" level: "INFO"
@ -108,6 +111,7 @@ Please note that the `oauth_token` is valid for approximately 60 days. If it bec
* `subonly`: If `True` only Subs can use TTS * `subonly`: If `True` only Subs can use TTS
* `modonly`: If `True` only Mods can use TTS * `modonly`: If `True` only Mods can use TTS
* `message_length`: Maximum allowed message length for TTS * `message_length`: Maximum allowed message length for TTS
* `language`: Language for `!wiki` command
##### messages ##### messages
@ -128,6 +132,8 @@ Please note that the `oauth_token` is valid for approximately 60 days. If it bec
* `quotenotfound`: Message if requests quote wasn't found. * `quotenotfound`: Message if requests quote wasn't found.
* `quoteaddedprefix`: Prefix for `Quote <number> added` message. * `quoteaddedprefix`: Prefix for `Quote <number> added` message.
* `quoteaddedsuffix`: Suffix for `Quote <number> added` message. * `quoteaddedsuffix`: Suffix for `Quote <number> added` message.
* `wiki_too_many`: Message if `!wiki` command has more than one result.
* `wiki_no_result`: Message if `!wiki` command hasn't a valid result.
##### log ##### log
@ -198,9 +204,11 @@ The format of `quotes.txt` looks as follows:
#### !addquote #### !addquote
The `!addvote` command adds a new line to `quotes.txt`. It expects two parameters: `!addquote username quote` where `username` is the name of the user to be quoted. The `!addquote` command adds a new line to `quotes.txt`. It expects two parameters: `!addquote username quote` where `username` is the name of the user to be quoted.
Only Subs, Mods and Broadcaster are allowed to add quotes. #### !wiki
The `!wiki` command searchs the wikipedia and fetches the first three sentences of the result.
## Build ## Build

View File

@ -14,6 +14,7 @@ bot:
subonly: False # Only Subs can use TTS subonly: False # Only Subs can use TTS
modonly: False # Only Mods can use TTS modonly: False # Only Mods can use TTS
message_length: 200 # Max. TTS message length message_length: 200 # Max. TTS message length
language: de # Language for wikipedia
messages: # Things the bot can send as chat message messages: # Things the bot can send as chat message
toff: "TTS is now inactive." toff: "TTS is now inactive."
@ -34,6 +35,8 @@ messages: # Things the bot can send as chat message
quotenotfound: "Sorry, no quote found." quotenotfound: "Sorry, no quote found."
quoteaddedprefix: "Quote:" quoteaddedprefix: "Quote:"
quoteaddedsuffix: "added." quoteaddedsuffix: "added."
wiki_too_many: "Sorry, there are too many possible results. Try a more narrow search."
wiki_no_result: "Sorry, there was an error fetching the wikipedia answer."
log: log:
level: "INFO" # Loglevel, valid values are: DEBUG, INFO, WARNING, ERROR, CRITICAL (do not use DEBUG in a production environment) level: "INFO" # Loglevel, valid values are: DEBUG, INFO, WARNING, ERROR, CRITICAL (do not use DEBUG in a production environment)

View File

@ -1,2 +1,5 @@
fuzzywuzzy==0.18.0 fuzzywuzzy==0.18.0
PyInstaller==5.3
PyYAML==6.0 PyYAML==6.0
requests==2.28.1
wikipedia==1.4.0

BIN
tts.exe

Binary file not shown.

54
tts.py
View File

@ -42,6 +42,7 @@ from socketserver import ThreadingMixIn
import yaml import yaml
import requests import requests
import wikipedia
from fuzzywuzzy import process from fuzzywuzzy import process
@ -170,7 +171,11 @@ class IRC:
logging.debug("!addquote command detected") logging.debug("!addquote command detected")
self.Commands.addquote(self, tags, msg) self.Commands.addquote(self, tags, msg)
if msg.startswith('!smartquote'): if msg.startswith('!wiki'):
logging.debug("!wiki command detected")
self.Commands.wiki(self, tags, msg)
if msg.startswith('!smartquote') or msg.startswith('!sq'):
logging.debug("!smartquote command detected") logging.debug("!smartquote command detected")
self.Commands.quote(self, tags, msg) self.Commands.quote(self, tags, msg)
@ -220,6 +225,10 @@ class IRC:
logging.debug("Ping check received.") logging.debug("Ping check received.")
self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), "Pong!") self.sendmsg(conf['IRC_CHANNEL'], "@"+str(user), "Pong!")
elif msg.startswith('!version'):
logging.debug("!version command detected")
self.sendmsg(conf['IRC_CHANNEL'], "/w @"+str(user), VERSION)
elif msg.startswith('!dtts'): elif msg.startswith('!dtts'):
logging.debug("!dtts command detected") logging.debug("!dtts command detected")
self.Commands.dtts(self, msg) self.Commands.dtts(self, msg)
@ -505,9 +514,40 @@ class IRC:
msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']] msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']]
IRC.sendmsg(self, conf['IRC_CHANNEL'], "@"+str(user), msg) IRC.sendmsg(self, conf['IRC_CHANNEL'], "@"+str(user), msg)
def wiki(self, tags, msg):
""" !wiki command """
try:
user = tags['user']
wikipedia.set_lang(conf['WIKI_LANG'])
msg = msg.replace('!wiki', '').strip()
wikiresult = wikipedia.summary(msg, sentences=3)
IRC.sendmsg(self, conf['IRC_CHANNEL'], "@"+str(user), wikiresult)
IRC.sendmsg(self, conf['IRC_CHANNEL'], "@"+str(user), wikipedia.page(msg).url)
wikiresult = wikiresult.replace('==', '')
raw_msg = {
"TTS": True,
"msg": wikiresult,
"badges": True,
"subscriber": True,
"msgid": True,
"user": 'wikipedia',
"length": conf['IRC_TTS_LEN'],
"queuetime": datetime.datetime.now(),
"timestamp": str(time.time_ns())
}
msg_queue[raw_msg['timestamp']] = [raw_msg['user'], raw_msg['msg']]
except wikipedia.exceptions.DisambiguationError:
IRC.sendmsg(self, conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['WIKI_TOO_MANY'])
except: # pylint: disable=bare-except
IRC.sendmsg(self, conf['IRC_CHANNEL'], "@"+str(user), conf['MESSAGE']['WIKI_NO_RESULT'])
def quote(self, tags, msg = False): def quote(self, tags, msg = False):
""" !q command """ !smartquote command
Gets a line from quotes.txt. If a number if given as msg Gets a line from quotes.txt. If a number if given as msg
it fetch the given line number. If a string is given it fetch the given line number. If a string is given
@ -515,10 +555,11 @@ class IRC:
it fetch a random line. it fetch a random line.
""" """
try:
user = tags['user'] user = tags['user']
query = msg.replace('!smartquote', '').strip() query = msg.replace('!smartquote', '').strip()
query = msg.replace('!sq', '').strip()
try:
if query.isdigit(): if query.isdigit():
logging.info('Fetching quote #%s', query) logging.info('Fetching quote #%s', query)
@ -989,6 +1030,7 @@ def load_config():
conf['IRC_MODONLY'] = cfg.get('bot', {}).get('modonly', False) conf['IRC_MODONLY'] = cfg.get('bot', {}).get('modonly', False)
conf['IRC_TTS_LEN'] = cfg.get('bot', {}).get('message_length', 200) conf['IRC_TTS_LEN'] = cfg.get('bot', {}).get('message_length', 200)
conf['TTS_STARTENABLED'] = cfg.get('bot', {}).get('start_enabled', True) conf['TTS_STARTENABLED'] = cfg.get('bot', {}).get('start_enabled', True)
conf['WIKI_LANG'] = cfg.get('bot', {}).get('language', 'en')
conf['LOG_LEVEL'] = cfg.get('log', {}).get('level', "INFO") conf['LOG_LEVEL'] = cfg.get('log', {}).get('level', "INFO")
conf['HTTP_PORT'] = cfg.get('http', {}).get('port', 80) conf['HTTP_PORT'] = cfg.get('http', {}).get('port', 80)
@ -1016,6 +1058,9 @@ def load_config():
conf['MESSAGE']['QUOTE_ADDED_PREFIX'] = cfg.get('messages', {}).get('quoteaddedprefix', "Quote:") conf['MESSAGE']['QUOTE_ADDED_PREFIX'] = cfg.get('messages', {}).get('quoteaddedprefix', "Quote:")
conf['MESSAGE']['QUOTE_ADDED_SUFFIX'] = cfg.get('messages', {}).get('quoteaddedsuffix', "added.") conf['MESSAGE']['QUOTE_ADDED_SUFFIX'] = cfg.get('messages', {}).get('quoteaddedsuffix', "added.")
conf['MESSAGE']['WIKI_TOO_MANY'] = cfg.get('messages', {}).get('wiki_too_many', "Sorry, there are too many possible results. Try a more narrow search.")
conf['MESSAGE']['WIKI_NO_RESULT'] = cfg.get('messages', {}).get('wiki_no_result', "Sorry, there was an error fetching the wikipedia answer.")
conf['USERMAP'] = cfg.get('usermapping', []) conf['USERMAP'] = cfg.get('usermapping', [])
if 'whitelist' in cfg: if 'whitelist' in cfg:
@ -1159,6 +1204,7 @@ if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(module)s %(threadName)s %(levelname)s: %(message)s') logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(module)s %(threadName)s %(levelname)s: %(message)s')
sys.tracebacklimit = 3 sys.tracebacklimit = 3
VERSION = "1.5.0"
conf = {} conf = {}
tts_done = [] tts_done = []
msg_queue_raw = [] msg_queue_raw = []
@ -1167,7 +1213,7 @@ if __name__ == "__main__":
if sys.argv[1:]: if sys.argv[1:]:
if sys.argv[1] == "--version": if sys.argv[1] == "--version":
print('Simple TTS Bot') print('Simple TTS Bot')
print('Version 1.4.0') print('Version %s', VERSION)
sys.exit(1) sys.exit(1)
main() main()