Whenever someone says something, there's a chance that markov will interject his opinion. Users can also set the chance between 0.0 and the default value (in the config) if they want to see markov replies less often. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
import logging
|
|
import asyncio
|
|
import sys
|
|
import re
|
|
|
|
from omnibot.config import ServerConfig
|
|
from plugins.markov import Markov
|
|
|
|
|
|
async def main():
|
|
"""
|
|
Hacky "load my IRC logs" script
|
|
"""
|
|
|
|
# TODO - add config path selection
|
|
logging.basicConfig(
|
|
level=logging.DEBUG,
|
|
format="%(asctime)s - %(name)-12s - %(levelname)-8s - %(message)s",
|
|
)
|
|
log = logging.getLogger(__name__)
|
|
|
|
channel = sys.argv[1]
|
|
files = sys.argv[2:]
|
|
server_config = ServerConfig()
|
|
server_config.load("config.toml")
|
|
# This only works on one plugin per config
|
|
plugin_config = [
|
|
plugin for plugin in server_config.plugins if "markov" in plugin["module"]
|
|
][0]
|
|
plugin = Markov(server_config, plugin_config)
|
|
|
|
LINE_RE = re.compile(r"^\[[^\]]+\] <(?P<name>[^>]+)> (?P<message>.+)$")
|
|
|
|
for fname in files:
|
|
log.info("Loading %s", fname)
|
|
with open(fname) as fp:
|
|
lines = list(fp)
|
|
for line in lines:
|
|
if mat := LINE_RE.search(line):
|
|
name = mat["name"]
|
|
message = mat["message"].strip()
|
|
if name != server_config.nick and message and message[0] != "!":
|
|
plugin.add(channel, name, message)
|
|
await plugin.save()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|