def namegen(input, bot): """namegen [generator] -- Generates some names using the chosen generator. :type bot: core.bot.CloudBot 'namegen list' will display a list of all generators.""" # clean up the input inp = input.text.strip().lower() # get a list of available name generators files = os.listdir(os.path.join(bot.data_dir, "name_files")) all_modules = [] for i in files: if os.path.splitext(i)[1] == ".json": all_modules.append(os.path.splitext(i)[0]) all_modules.sort() # command to return a list of all available generators if inp == "list": message = "Available generators: " message += formatting.get_text_list(all_modules, 'and') input.notice(message) return if inp: selected_module = inp.split()[0] else: # make some generic fantasy names selected_module = "fantasy" # check if the selected module is valid if not selected_module in all_modules: return "Invalid name generator :(" # load the name generator with open( os.path.join(bot.data_dir, "name_files", "{}.json".format(selected_module))) as f: try: generator = get_generator(f.read()) except ValueError as error: return "Unable to read name file: {}".format(error) # time to generate some names name_list = generator.generate_strings(10) # and finally return the final message :D return "Some names to ponder: {}.".format( formatting.get_text_list(name_list, 'and'))
def bancount(text): """bancount <user> -- Gets a count of <user>s minecraft bans from fishbans""" user = text.strip() try: request = http.get_json(api_url.format(quote_plus(user))) except (http.HTTPError, http.URLError) as e: return "Could not fetch ban data from the Fishbans API: {}".format(e) if not request["success"]: return "Could not fetch ban data for {}.".format(user) user_url = "http://fishbans.com/u/{}/".format(user) services = request["stats"]["service"] out = [] for service, ban_count in list(services.items()): if ban_count != 0: out.append("{}: \x02{}\x02".format(service, ban_count)) else: pass if not out: return "The user \x02{}\x02 has no bans - {}".format(user, user_url) else: return "Bans for \x02{}\x02: {} - {}".format(user, formatting.get_text_list(out, "and"), user_url)
def bancount(text): """bancount <user> -- Gets a count of <user>s minecraft bans from fishbans""" user = text.strip() try: request = http.get_json(api_url.format(quote_plus(user))) except (http.HTTPError, http.URLError) as e: return "Could not fetch ban data from the Fishbans API: {}".format(e) if not request["success"]: return "Could not fetch ban data for {}.".format(user) user_url = "http://fishbans.com/u/{}/".format(user) services = request["stats"]["service"] out = [] for service, ban_count in list(services.items()): if ban_count != 0: out.append("{}: \x02{}\x02".format(service, ban_count)) else: pass if not out: return "The user \x02{}\x02 has no bans - {}".format(user, user_url) else: return "Bans for \x02{}\x02: {} - {}".format( user, formatting.get_text_list(out, "and"), user_url)
def namegen(input, bot): """namegen [generator] -- Generates some names using the chosen generator. :type bot: core.bot.CloudBot 'namegen list' will display a list of all generators.""" # clean up the input inp = input.text.strip().lower() # get a list of available name generators files = os.listdir(os.path.join(bot.data_dir, "name_files")) all_modules = [] for i in files: if os.path.splitext(i)[1] == ".json": all_modules.append(os.path.splitext(i)[0]) all_modules.sort() # command to return a list of all available generators if inp == "list": message = "Available generators: " message += formatting.get_text_list(all_modules, 'and') input.notice(message) return if inp: selected_module = inp.split()[0] else: # make some generic fantasy names selected_module = "fantasy" # check if the selected module is valid if not selected_module in all_modules: return "Invalid name generator :(" # load the name generator with open(os.path.join(bot.data_dir, "name_files", "{}.json".format(selected_module))) as f: try: generator = get_generator(f.read()) except ValueError as error: return "Unable to read name file: {}".format(error) # time to generate some names name_list = generator.generate_strings(10) # and finally return the final message :D return "Some names to ponder: {}.".format(formatting.get_text_list(name_list, 'and'))
def format_time(seconds, count=3, accuracy=6, simple=False): """ Takes a length of time in seconds and returns a string describing that length of time. This function has a number of optional arguments that can be combined: SIMPLE: displays the time in a simple format >>> format_time(SECONDS) 1 hour, 2 minutes and 34 seconds >>> format_time(SECONDS, simple=True) 1h 2m 34s COUNT: how many periods should be shown (default 3) >>> format_time(SECONDS) 147 years, 9 months and 8 weeks >>> format_time(SECONDS, count=6) 147 years, 9 months, 7 weeks, 18 hours, 12 minutes and 34 seconds """ if simple: periods = [('c', 60 * 60 * 24 * 365 * 100), ('de', 60 * 60 * 24 * 365 * 10), ('y', 60 * 60 * 24 * 365), ('m', 60 * 60 * 24 * 30), ('d', 60 * 60 * 24), ('h', 60 * 60), ('m', 60), ('s', 1)] else: periods = [(('century', 'centuries'), 60 * 60 * 24 * 365 * 100), (('decade', 'decades'), 60 * 60 * 24 * 365 * 10), (('year', 'years'), 60 * 60 * 24 * 365), (('month', 'months'), 60 * 60 * 24 * 30), (('day', 'days'), 60 * 60 * 24), (('hour', 'hours'), 60 * 60), (('minute', 'minutes'), 60), (('second', 'seconds'), 1)] periods = periods[-accuracy:] strings = [] i = 0 for period_name, period_seconds in periods: if i < count: if seconds > period_seconds: period_value, seconds = divmod(seconds, period_seconds) i += 1 if simple: strings.append("{}{}".format(period_value, period_name)) else: if period_value == 1: strings.append("{} {}".format(period_value, period_name[0])) else: strings.append("{} {}".format(period_value, period_name[1])) else: break if simple: return " ".join(strings) else: return formatting.get_text_list(strings, "and")
def format_time(seconds, count=3, accuracy=6, simple=False): """ Takes a length of time in seconds and returns a string describing that length of time. This function has a number of optional arguments that can be combined: SIMPLE: displays the time in a simple format >>> format_time(SECONDS) 1 hour, 2 minutes and 34 seconds >>> format_time(SECONDS, simple=True) 1h 2m 34s COUNT: how many periods should be shown (default 3) >>> format_time(SECONDS) 147 years, 9 months and 8 weeks >>> format_time(SECONDS, count=6) 147 years, 9 months, 7 weeks, 18 hours, 12 minutes and 34 seconds """ if simple: periods = [ ('c', 60 * 60 * 24 * 365 * 100), ('de', 60 * 60 * 24 * 365 * 10), ('y', 60 * 60 * 24 * 365), ('m', 60 * 60 * 24 * 30), ('d', 60 * 60 * 24), ('h', 60 * 60), ('m', 60), ('s', 1) ] else: periods = [ (('century', 'centuries'), 60 * 60 * 24 * 365 * 100), (('decade', 'decades'), 60 * 60 * 24 * 365 * 10), (('year', 'years'), 60 * 60 * 24 * 365), (('month', 'months'), 60 * 60 * 24 * 30), (('day', 'days'), 60 * 60 * 24), (('hour', 'hours'), 60 * 60), (('minute', 'minutes'), 60), (('second', 'seconds'), 1) ] periods = periods[-accuracy:] strings = [] i = 0 for period_name, period_seconds in periods: if i < count: if seconds > period_seconds: period_value, seconds = divmod(seconds, period_seconds) i += 1 if simple: strings.append("{}{}".format(period_value, period_name)) else: if period_value == 1: strings.append("{} {}".format(period_value, period_name[0])) else: strings.append("{} {}".format(period_value, period_name[1])) else: break if simple: return " ".join(strings) else: return formatting.get_text_list(strings, "and")