2019-11-03 18:21:39 +00:00
|
|
|
import plugin, utils, tracery, titlecase, re
|
2019-11-03 18:20:33 +00:00
|
|
|
from tracery.modifiers import base_english
|
|
|
|
|
2019-11-03 19:40:20 +00:00
|
|
|
NAME = re.compile(r'\$(\d+|[a-z]+)')
|
2019-11-03 18:20:33 +00:00
|
|
|
SUB = r"#\1#"
|
|
|
|
replace_name = lambda x: NAME.sub(SUB,x)
|
|
|
|
|
2019-11-03 19:01:49 +00:00
|
|
|
GENERATORS_LIST = [
|
2019-11-03 18:20:33 +00:00
|
|
|
"book_fantasy",
|
|
|
|
"book_horror",
|
|
|
|
"book_hp",
|
|
|
|
"book",
|
|
|
|
"book_rom",
|
|
|
|
"book_sf",
|
|
|
|
"char",
|
|
|
|
"idea",
|
|
|
|
"land",
|
|
|
|
"place"
|
|
|
|
]
|
|
|
|
GENERATOR_URL = "https://github.com/cwarwicker/discord-WriterBot/raw/master/assets/json/en/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)
|
|
|
|
|
2019-11-03 19:01:49 +00:00
|
|
|
@plugin.command("generate","<{}>".format("|".join(GENERATORS_LIST)))
|
2019-11-06 17:30:34 +00:00
|
|
|
def generate(bot,channel,nick,generator,count="1"):
|
2019-11-03 19:01:49 +00:00
|
|
|
if generator not in GENERATORS_LIST:
|
|
|
|
bot.say(channel,"{}: Invalid generator!".format(nick))
|
2019-11-06 17:30:34 +00:00
|
|
|
count = int(count)
|
2019-11-06 17:32:07 +00:00
|
|
|
res = [GENERATORS[generator]() for x in range(count)]
|
2019-11-03 18:20:33 +00:00
|
|
|
if generator!="idea":
|
2019-11-06 17:30:34 +00:00
|
|
|
res = [titlecase.titlecase(x) for x in res]
|
|
|
|
bot.say(channel,"{}: {}".format(nick,",".join(res)))
|