Class | UserDataModule |
In: |
lib/rbot/core/userdata.rb
|
Parent: | CoreBotModule |
User data is stored in registries indexed by BotUser name and Irc::User nick. This core module takes care of handling its usage.
# File lib/rbot/core/userdata.rb, line 57 57: def initialize 58: super 59: @ircuser = @registry.sub_registry('ircuser') 60: @transient = @registry.sub_registry('transient') 61: @botuser = @registry.sub_registry('botuser') 62: end
# File lib/rbot/core/userdata.rb, line 148 148: def delete_data(user, *keys) 149: h = get_data_hash(user) 150: debug h 151: rv = keys.map { |k| h.delete k } 152: set_data_hash(user, h) 153: rv.size == 1 ? rv.first : rv 154: end
TODO FIXME not yet: are we going to allow non-string values for data? if so, this can't work ...
def handle_set(m, params)
user = m.server.get_user(params[:nick]) || m.source key = params[:key].intern data = params[:data].to_s
end
# File lib/rbot/core/userdata.rb, line 183 183: def event_botuser(action, opts={}) 184: case action 185: when :copy, :rename 186: source = opts[:source] 187: return unless @botuser.key?(source) 188: dest = opts[:dest] 189: @botuser[dest] = @botuser[source].dup 190: @botuser.delete(source) if action == :rename 191: when :pre_perm 192: @permification ||= {} 193: k = [opts[:irc_user], opts[:bot_user]] 194: @permification[k] = get_data_hash(opts[:irc_user], :plain => true) 195: when :post_perm 196: @permification ||= {} 197: k = [opts[:irc_user], opts[:bot_user]] 198: if @permification.has_key?(k) 199: @botuser[opts[:bot_user]] = @permification[k] 200: @permification.delete(k) 201: end 202: end 203: end
# File lib/rbot/core/userdata.rb, line 91 91: def get_data(user, key=nil) 92: h = get_data_hash(user) 93: debug h 94: return h if key.nil? 95: return h[key] 96: end
# File lib/rbot/core/userdata.rb, line 64 64: def get_data_hash(user, opts={}) 65: plain = opts[:plain] 66: iu = user.to_irc_user 67: bu = iu.botuser 68: 69: ih = @ircuser[iu.nick] || {} 70: 71: if bu.default? 72: return ih 73: elsif bu.transient? 74: bh = @transient[bu.netmasks.first.fullform] || {} 75: else 76: bh = @botuser[bu.username] || {} 77: end 78: ih.merge!(bh) 79: 80: unless plain 81: class << ih 82: alias :single_retrieve :[] 83: alias :single_assign :[]= 84: include DottedIndex 85: end 86: end 87: 88: return ih 89: end
# File lib/rbot/core/userdata.rb, line 156 156: def handle_get(m, params) 157: user = m.server.get_user(params[:nick]) || m.source 158: key = params[:key].intern 159: data = get_data(user, key) 160: if data 161: m.reply(_("%{key} data for %{user}: %{data}") % { 162: :key => key, 163: :user => user.nick, 164: :data => data 165: }) 166: else 167: m.reply(_("sorry, no %{key} data for %{user}") % { 168: :key => key, 169: :user => user.nick, 170: }) 171: end 172: end
# File lib/rbot/core/userdata.rb, line 117 117: def set_data(user, key, value=nil, &block) 118: h = get_data_hash(user) 119: debug h 120: 121: ret = value 122: 123: if not block_given? 124: h[key] = value 125: else 126: if value and not h.has_key?(key) 127: h[key] = value 128: end 129: ret = yield h[key] 130: end 131: debug ret 132: 133: set_data_hash(user, h) 134: 135: return ret 136: end
# File lib/rbot/core/userdata.rb, line 98 98: def set_data_hash(user, hh) 99: iu = user.to_irc_user 100: bu = iu.botuser 101: 102: # we .dup the hash to remove singleton methods 103: # and make it dump-able 104: h = hh.dup 105: 106: @ircuser[iu.nick] = h 107: return h if bu.default? 108: 109: if bu.transient? 110: @transient[bu.netmasks.first.fullform] = h 111: else 112: @botuser[bu.username] = h 113: end 114: return h 115: end