- return @@config.send(method, *args, &block)
- end
-
- def handle_list(m, params)
- modules = []
- if params[:module]
- @@items.each_key do |key|
- mod, name = key.to_s.split('.')
- next unless mod == params[:module]
- modules.push key unless modules.include?(name)
- end
- if modules.empty?
- m.reply "no such module #{params[:module]}"
- else
- m.reply modules.join(", ")
- end
- else
- @@items.each_key do |key|
- name = key.to_s.split('.').first
- modules.push name unless modules.include?(name)
- end
- m.reply "modules: " + modules.join(", ")
- end
- end
-
- def handle_get(m, params)
- key = params[:key].to_s.intern
- unless @@items.has_key?(key)
- m.reply "no such config key #{key}"
- return
- end
- value = @@items[key].to_s
- m.reply "#{key}: #{value}"
- end
-
- def handle_desc(m, params)
- key = params[:key].to_s.intern
- unless @@items.has_key?(key)
- m.reply "no such config key #{key}"
- end
- puts @@items[key].inspect
- m.reply "#{key}: #{@@items[key].desc}"
- end
-
- def handle_unset(m, params)
- key = params[:key].to_s.intern
- unless @@items.has_key?(key)
- m.reply "no such config key #{key}"
- end
- @@items[key].unset
- handle_get(m, params)
- end
-
- def handle_set(m, params)
- key = params[:key].to_s.intern
- value = params[:value].join(" ")
- unless @@items.has_key?(key)
- m.reply "no such config key #{key}"
- return
- end
- begin
- @@items[key].set_string(value)
- rescue ArgumentError => e
- m.reply "failed to set #{key}: #{e.message}"
- return
- end
- if @@items[key].requires_restart
- m.reply "this config change will take effect on the next restart"
- else
- m.okay
- end
- end
-
- def handle_help(m, params)
- topic = params[:topic]
- case topic
- when false
- m.reply "config module - bot configuration. usage: list, desc, get, set, unset"
- when "list"
- m.reply "config list => list configuration modules, config list <module> => list configuration keys for module <module>"
- when "get"
- m.reply "config get <key> => get configuration value for key <key>"
- when "unset"
- m.reply "reset key <key> to the default"
- when "set"
- m.reply "config set <key> <value> => set configuration value for key <key> to <value>"
- when "desc"
- m.reply "config desc <key> => describe what key <key> configures"
- else
- m.reply "no help for config #{topic}"
- end
- end
- def usage(m,params)
- m.reply "incorrect usage, try '#{@@bot.nick}: help config'"
- end
-
- # bot:: parent bot class
- # create a new config hash from #{botclass}/conf.rbot
- def initialize(bot)
- @@bot = bot
-
- # respond to config messages, to provide runtime configuration
- # management
- # messages will be:
- # get
- # set
- # unset
- # desc
- # and for arrays:
- # add TODO
- # remove TODO
- @handler = MessageMapper.new(self)
- @handler.map 'config list :module', :action => 'handle_list',
- :defaults => {:module => false}
- @handler.map 'config get :key', :action => 'handle_get'
- @handler.map 'config desc :key', :action => 'handle_desc'
- @handler.map 'config describe :key', :action => 'handle_desc'
- @handler.map 'config set :key *value', :action => 'handle_set'
- @handler.map 'config unset :key', :action => 'handle_unset'
- @handler.map 'config help :topic', :action => 'handle_help',
- :defaults => {:topic => false}
- @handler.map 'help config :topic', :action => 'handle_help',
- :defaults => {:topic => false}
-
- if(File.exist?("#{@@bot.botclass}/conf.yaml"))
- begin
- newconfig = YAML::load_file("#{@@bot.botclass}/conf.yaml")
- newconfig.each { |key, val|
- @@config[key.intern] = val
- }
- return
- rescue
- error "failed to read conf.yaml: #{$!}"
- end
- end
- # if we got here, we need to run the first-run wizard
- BotConfigWizard.new(@@bot).run
- # save newly created config
- save