def update_users(include_joins_and_parts=false, &callback)
      room.users do |user_list|
        before = users.dup
        present = {}

        user_list.each do |user|
          if before[user.id]
            present[user.id] = before.delete user.id
            # if present[user.id].nick != nick
            #   # NICK CHANGE
            #   present[user.id].nick = nick
            # end
          else
            new_user = present[user.id] = User.new(user)
            if include_joins_and_parts
              client.campfire_reply :join, new_user.nick, channel
            end
          end
        end

        # Now that the list of users is updated, the remaining users
        # in 'before' have left. Let the irc client know.
        before.each do |id, user|
          if include_joins_and_parts
            client.campfire_reply :part, user.nick, channel
          end
        end

        @users = present

        callback.call if callback
      end
    end
def update_users(include_joins_and_parts=false, &callback)
      room.users do |user_list|
        before = users.dup
        present = {}

        user_list.each do |user|
          if before[user.id]
            present[user.id] = before.delete user.id
            # if present[user.id].nick != nick
            #   # NICK CHANGE
            #   present[user.id].nick = nick
            # end
          else
            new_user = present[user.id] = User.new(user)
            if include_joins_and_parts
              client.campfire_reply :join, new_user.nick, channel
            end
          end
        end

        # Now that the list of users is updated, the remaining users
        # in 'before' have left. Let the irc client know.
        before.each do |id, user|
          if include_joins_and_parts
            client.campfire_reply :part, user.nick, channel
          end
        end

        @users = present

        callback.call if callback
      end
    end
Get the list of users from a room, and update the internal
 tracking state as well as the connected client. If the user list
 is out of sync, the irc client may receive the associated
 JOIN/PART commands.

 include_joins_and_parts - whether or not to include JOIN/PART commands if
                           the user list has changed since the last update
                           (defaults to false)
 callback                - optional callback after the users have been
                           updated

 Returns nothing, but keeps the users list updated