anchor.diff:  
   -record(state, {
   	name :: string(),
  -	chatters :: [pid()],
  +	chatters :: [{pid(), string()}],
   	controllers :: [pid()],
  +	squelched = [] :: [pid()],
   	mode = user :: 'user' | 'system' | 'plugin',
   	mode_meta
   }).
  
positive.code: -module(post_chatroom).
  -behaviour(gen_server).
  
  -include_lib("precursors_server/include/log.hrl").
  -include_lib("precursors_server/include/pre_client.hrl").
  %% API
  
negative.code: 
  send_command(Pid, Command, Payload) ->
  	gen_server:cast(Pid, {command, Command, Payload}).
  
  % and so we can issue commands more easily.  The general idiom is:
  % function(RoomPid, IssuingClientInfo, Command[, Arg1..., ArgN]) ->
  % 	das res
  
  leave(Room, Client) ->
  	gen_server:call(Room, {leave, Client}, ?timeout).
  
  join(Room, Client) ->
  	join(Room, Client, "").
  
  join(Room, Client, Password) ->
  	gen_server:call(Room, {join, Client, Password}, ?timeout).
  
  kick(Room, Client, Target) ->
  	gen_server:call(Room, {kick, Client, Target}, ?timeout).
  
  mute(Room, Client, Target) ->
  	gen_server:call(Room, {mute, Client, Target}, ?timeout).
  
  unmute(Room, Client, Target) ->
  	gen_server:call(Room, {unmute, Client, Target}, ?timeout).
  
  message(Room, Client, Message) ->
  	gen_server:call(Room, {message, Client, Message}, ?timeout).
  
  
  
  %% ==================================================================
  %% gen_server
  