add markov plugin for learning/replying to chatter

This commit is contained in:
Brian S. Stephan 2019-09-29 12:16:09 -05:00
parent 8466cd62a0
commit 859c164fea
2 changed files with 41 additions and 0 deletions

View File

@ -43,3 +43,6 @@ logging.config.dictConfig({
},
}
})
# module specific configs
MARKOV_CONTEXT = os.environ.get('HITOMI_MARKOV_CONTEXT', 'hitomi')

38
hitomi/markov.py Normal file
View File

@ -0,0 +1,38 @@
"""Commands for populating and retrieving markov chains, for silly chatter."""
import logging
from urllib.parse import quote
from hitomi import bot, config
from hitomi.backends import dr_botzo, DrBotzoError
logger = logging.getLogger(__name__)
@bot.listen(name='on_message')
async def on_message_learn(message):
"""Learn lines, potentially also respond to them."""
logger.info("learning to %s: '%s'", config.MARKOV_CONTEXT, message.clean_content)
try:
response = dr_botzo.post('/markov/rpc/context/{context}/learn/'.format(context=quote(config.MARKOV_CONTEXT)),
json={'line': message.clean_content})
logger.debug("succeeded to learn '%s'", response.json()['line'])
except DrBotzoError as drex:
logger.exception("received an error from dr.botzo attempting to learn to %s: %s", config.MARKOV_CONTEXT, drex)
@bot.listen(name='on_message')
async def on_message_reply(message):
"""Learn lines, potentially also respond to them."""
if bot.user in message.mentions:
logger.info("I was addressed, going to reply with chatter")
await message.channel.trigger_typing()
try:
response = dr_botzo.post('/markov/rpc/context/{context}/generate/'
''.format(context=quote(config.MARKOV_CONTEXT)),
json={'topics': message.clean_content.split(' ')})
reply = response.json()['generated_line']
logger.info("replying to %s with '%s'", message.channel, reply)
await message.channel.send(reply)
except DrBotzoError as drex:
logger.exception("received an error from dr.botzo attempting to reply to %s: %s",
message.clean_content, drex)