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)))