cosmicbot/commands/generate.py

42 lines
1.2 KiB
Python

import plugin, utils, tracery, titlecase, re
from tracery.modifiers import base_english
NAME = re.compile(r'\$(\d+|[a-z]+)')
SUB = r"#\1#"
replace_name = lambda x: NAME.sub(SUB,x)
GENERATORS_LIST = [
"book_fantasy",
"book_horror",
"book_hp",
"book",
"book_rom",
"book_sf",
"char",
"idea",
"land",
"place"
]
GENERATOR_URL = "https://github.com/mblake/discord-WriterBot/raw/master/assets/json/gen_{}.json"
def get_generator(name):
generator = utils.get(GENERATOR_URL.format(name))
out = dict()
out.update(generator["names"])
out["origin"] = [replace_name(x) for x in generator["formats"]]
ret = tracery.Grammar(out)
ret.add_modifiers(base_english)
return (lambda: ret.flatten("#origin#"))
GENERATORS = utils.LazyLoadedDict(get_generator)
@plugin.command("generate","<{}>".format("|".join(GENERATORS_LIST)))
def generate(bot,channel,nick,generator,count="1"):
if generator not in GENERATORS_LIST:
bot.say(channel,"{}: Invalid generator!".format(nick))
return
count = int(count)
res = [GENERATORS[generator]() for x in range(count)]
if generator!="idea":
res = [titlecase.titlecase(x) for x in res]
bot.say(channel,"{}: {}".format(nick,", ".join(res)))