onprivmsg (Irc::IrcBot)

    # File rbot/ircbot.rb, line 485
      def onprivmsg(m)
        # log it first
        if(m.action?)
          if(m.private?)
            log "* [#{m.sourcenick}(#{m.sourceaddress})] #$1", m.sourcenick
          else
            log "* #{m.sourcenick} #$1", m.target
          end
        else
          if(m.public?)
            log "<#{m.sourcenick}> #{m.message}", m.target
          else
            log "[#{m.sourcenick}(#{m.sourceaddress})] #{m.message}", m.sourcenick
          end
        end

        # pass it off to plugins that want to hear everything
        @plugins.delegate "listen", m

        if(m.private? && m.message =~ /^\001PING\s+(.+)\001/)
          notice m.sourcenick, "\001PING #$1\001"
          log "@ #{m.sourcenick} pinged me"
          return
        end

        if(m.address?)
          case m.message
            when (/^join\s+(\S+)\s+(\S+)$/)
              join $1, $2 if(@auth.allow?("join", m.source, m.replyto))
            when (/^join\s+(\S+)$/)
              join $1 if(@auth.allow?("join", m.source, m.replyto))
            when (/^part$/)
              part m.target if(m.public? && @auth.allow?("join", m.source, m.replyto))
            when (/^part\s+(\S+)$/)
              part $1 if(@auth.allow?("join", m.source, m.replyto))
            when (/^quit(?:\s+(.*))?$/)
              quit $1 if(@auth.allow?("quit", m.source, m.replyto))
            when (/^hide$/)
              join 0 if(@auth.allow?("join", m.source, m.replyto))
            when (/^save$/)
              if(@auth.allow?("config", m.source, m.replyto))
                okay m.replyto
                save
              end
            when (/^nick\s+(\S+)$/)
              nickchg($1) if(@auth.allow?("nick", m.source, m.replyto))
            when (/^say\s+(\S+)\s+(.*)$/)
              say $1, $2 if(@auth.allow?("say", m.source, m.replyto))
            when (/^action\s+(\S+)\s+(.*)$/)
              action $1, $2 if(@auth.allow?("say", m.source, m.replyto))
            when (/^topic\s+(\S+)\s+(.*)$/)
              topic $1, $2 if(@auth.allow?("topic", m.source, m.replyto))
            when (/^ping$/)
              say m.replyto, "pong"
            when (/^rescan$/)
              if(@auth.allow?("config", m.source, m.replyto))
                okay m.replyto
                rescan
              end
            when (/^quiet$/)
              if(auth.allow?("talk", m.source, m.replyto))
                say m.replyto, @lang.get("okay")
                @channels.each_value {|c| c.quiet = true }
              end
            when (/^quiet in (\S+)$/)
              where = $1
              if(auth.allow?("talk", m.source, m.replyto))
                say m.replyto, @lang.get("okay")
                where.gsub!(/^here$/, m.target) if m.public?
                @channels[where].quiet = true if(@channels.has_key?(where))
              end
            when (/^talk$/)
              if(auth.allow?("talk", m.source, m.replyto))
                @channels.each_value {|c| c.quiet = false }
                okay m.replyto
              end
            when (/^talk in (\S+)$/)
              where = $1
              if(auth.allow?("talk", m.source, m.replyto))
                where.gsub!(/^here$/, m.target) if m.public?
                @channels[where].quiet = false if(@channels.has_key?(where))
                okay m.replyto
              end
            # TODO break this out into an options module
            when (/^options get sendq_delay$/)
              if auth.allow?("config", m.source, m.replyto)
                m.reply "options->sendq_delay = #{@socket.get_sendq}"
              end
            when (/^options get sendq_burst$/)
              if auth.allow?("config", m.source, m.replyto)
                m.reply "options->sendq_burst = #{@socket.get_maxburst}"
              end
            when (/^options set sendq_burst (.*)$/)
              num = $1.to_i
              if auth.allow?("config", m.source, m.replyto)
                @socket.set_maxburst(num)
                @config["SENDQ_BURST"] = num
                okay m.replyto
              end
            when (/^options set sendq_delay (.*)$/)
              freq = $1.to_f
              if auth.allow?("config", m.source, m.replyto)
                @socket.set_sendq(freq)
                @config["SENDQ_DELAY"] = freq
                okay m.replyto
              end
            when (/^registry stats$/)
              if auth.allow?("config", m.source, m.replyto)
                m.reply @registry.stat.inspect
              end
            when (/^(version)|(introduce yourself)$/)
              say m.replyto, "I'm a v. #{$version} rubybot, (c) Tom Gilbert - http://linuxbrit.co.uk/rbot/"
            when (/^help(?:\s+(.*))?$/)
              say m.replyto, help $1
            when (/^(botsnack|ciggie)$/)
              say m.replyto, @lang.get("thanks_X") % m.sourcenick if(m.public?)
              say m.replyto, @lang.get("thanks") if(m.private?)
            when (/^(hello|howdy|hola|salut|bonjour|sup|niihau|hey|hi(\W|$)|yo(\W|$)).*/)
              say m.replyto, @lang.get("hello_X") % m.sourcenick if(m.public?)
              say m.replyto, @lang.get("hello") if(m.private?)
            else
              delegate_privmsg(m)
          end
        else
          # stuff to handle when not addressed
          case m.message
            when (/^\s*(hello|howdy|hola|salut|bonjour|sup|niihau|hey|hi(\W|$)|yo(\W|$))\s+#{@nick}$/)
              say m.replyto, @lang.get("hello_X") % m.sourcenick
            when (/^#{@nick}!*$/)
              say m.replyto, @lang.get("hello_X") % m.sourcenick
            else
              @keywords.privmsg(m)
          end
        end
      end