# :title: rbot user data management from IRC
#
# Author:: Giuseppe "Oblomov" Bilotta <giuseppe.bilotta@gmail.com>
-# Copyright:: (C) 2006,2007 Giuseppe Bilotta
-# License:: GPL v2
module ::Irc
class User
#
# If you have to do large-scale editing of the Bot data Hash,
# please use with_botdata.
- #
+ #
def set_botdata(key, value=nil, &block)
Irc::Utils.bot.plugins['userdata'].set_data(self, key, value, &block)
end
Irc::Utils.bot.plugins['userdata'].with_data(self, &block)
end
+ # This method removes the data associated with the key, returning
+ # the value of the deleted key.
+
+ def delete_botdata(*keys)
+ Irc::Utils.bot.plugins['userdata'].delete_data(self, *keys)
+ end
+
end
end
@botuser = @registry.sub_registry('botuser')
end
- def get_data_hash(user)
+ def get_data_hash(user, opts={})
+ plain = opts[:plain]
iu = user.to_irc_user
bu = iu.botuser
else
bh = @botuser[bu.username] || {}
end
- return ih.merge!(bh)
+ ih.merge!(bh)
+
+ unless plain
+ class << ih
+ alias :single_retrieve :[]
+ alias :single_assign :[]=
+ include DottedIndex
+ end
+ end
+
+ return ih
end
def get_data(user, key=nil)
return h[key]
end
- def set_data_hash(user, h)
+ def set_data_hash(user, hh)
iu = user.to_irc_user
bu = iu.botuser
+ # we .dup the hash to remove singleton methods
+ # and make it dump-able
+ h = hh.dup
+
@ircuser[iu.nick] = h
return h if bu.default?
return h
end
+ def delete_data(user, *keys)
+ h = get_data_hash(user)
+ debug h
+ rv = keys.map { |k| h.delete k }
+ set_data_hash(user, h)
+ rv.size == 1 ? rv.first : rv
+ end
+
def handle_get(m, params)
user = m.server.get_user(params[:nick]) || m.source
key = params[:key].intern
when :pre_perm
@permification ||= {}
k = [opts[:irc_user], opts[:bot_user]]
- @permification[k] = get_data_hash(opts[:irc_user])
+ @permification[k] = get_data_hash(opts[:irc_user], :plain => true)
when :post_perm
@permification ||= {}
k = [opts[:irc_user], opts[:bot_user]]