diff --git a/hitomi/config.py b/hitomi/config.py index 0c41d16..739df04 100644 --- a/hitomi/config.py +++ b/hitomi/config.py @@ -43,3 +43,6 @@ logging.config.dictConfig({ }, } }) + +# module specific configs +MARKOV_CONTEXT = os.environ.get('HITOMI_MARKOV_CONTEXT', 'hitomi') diff --git a/hitomi/markov.py b/hitomi/markov.py new file mode 100644 index 0000000..1867c57 --- /dev/null +++ b/hitomi/markov.py @@ -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)