''' history.py a little database module for storing communication histories. Can store by arbitrary groupings e.g., for guild, global, zone, or personal communications. ''' import mudsys ################################################################################ # local variables ################################################################################ # our table that maps communication type to a second table of groupings and # grouping functions comm_table = { } # what is the maximum length of our history logs MAX_HISTORY_LEN = 20 ################################################################################ # history functions ################################################################################ def register_comm_history(type, group_func): '''register a new type of history, and add a grouping function as well.''' if not type in comm_table: comm_table[type] = (group_func, { }) def get_history(ch, type): '''return the communication history for a character.''' group_func, table = comm_table[type] key = group_func(ch) if not key in table: return [ ] return table[key] def add_history(ch, type, mssg): group_func, table = comm_table[type] key = group_func(ch) if key != None: if not key in table: table[key] = [ ] table[key].append(mssg) # make sure we don't get too big while len(table[key]) > MAX_HISTORY_LEN: table[key].pop(0) ################################################################################ # commands ################################################################################ def cmd_history(ch, cmd, arg): '''Communication logs are stored as you receive communication. To review communication you have used, you can use the history command.''' arg = arg.lower() if arg == "": opts = comm_table.keys() opts.sort() ch.send("History logs available to you are:") ch.send(" " + ", ".join(opts)) elif not arg in comm_table: ch.send("There is no history log for that type of communication.") else: group_func, table = comm_table[arg] key = group_func(ch) if not key in table: ch.send("Your history is empty.") else: ch.page("\r\n".join(table[key]) + "\r\n") ################################################################################ # initialization ################################################################################ mudsys.add_cmd("history", None, cmd_history, "player", False)