+ if params[:channels].empty? || !@registry.has_key?(params[:mask])
+ # if the channels parameter is omitted (meaning all channels), or the
+ # hostmask isn't present in the registry, we just (over)write the channels
+ # in the registry
+ @registry[params[:mask]] = params[:channels].dup
+ m.okay
+ else
+ # otherwise, merge the channels with the ones existing in the registry
+ current_channels = @registry[params[:mask]]
+ if current_channels.empty?
+ m.reply "#{params[:mask]} is already being auto-opped on all channels"
+ else
+ # merge the already set channels
+ @registry[params[:mask]] = (params[:channels] | current_channels).uniq
+ m.okay
+ end
+ end
+ end
+
+ def seed(m, params)
+ chan = params[:channel]
+ if chan == nil
+ if m.public?
+ chan = m.channel
+ else
+ m.reply _("Either specify a channel to seed, or ask in public")
+ end
+ end
+
+ current_ops = @bot.server.channel(chan).users.select { |u|
+ u.is_op?(chan) and u.nick != @bot.nick
+ }
+
+ netmasks = current_ops.map { |u|
+ @bot.config['autoop.seed_format'] % {
+ :user => u.user,
+ :nick => u.nick,
+ :host => u.host
+ }
+ }.uniq
+
+ to_add = netmasks.select { |mask|
+ @registry.key?(mask) == false or @registry[mask].empty? == false
+ }
+
+ if to_add.empty?
+ m.reply _("Nobody to add")
+ return
+ end
+
+ results = []
+ to_add.each { |mask|
+ if @registry.key? mask
+ if @registry[mask].include? chan
+ next
+ else
+ current_channels = @registry[mask].dup
+ @registry[mask] = ([chan] | current_channels).uniq
+ results << _("Added #{mask} in #{chan}")
+ end
+ else
+ @registry[mask] = [chan]
+ results << _("Created autoop entry for #{mask} and added #{chan}")
+ end
+ }
+ m.reply results.join ". "