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