percy 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +67 -28
- data/VERSION +1 -1
- data/examples/github_blog.rb +2 -1
- data/examples/is_online_checker.rb +10 -10
- data/lib/percy/connection.rb +35 -0
- data/lib/percy/formatting.rb +28 -0
- data/lib/percy/irc.rb +508 -0
- data/lib/percy/percylogger.rb +72 -0
- data/lib/percy.rb +7 -542
- data/percy.gemspec +6 -3
- metadata +7 -4
- data/lib/percylogger.rb +0 -71
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,4 @@ | |
| 1 | 
            -
            # Percy 1. | 
| 2 | 
            -
             | 
| 3 | 
            -
            - You can now call all the class methods without `Percy.` in front.
         | 
| 1 | 
            +
            # Percy 1.4.0
         | 
| 4 2 |  | 
| 5 3 | 
             
            ## Configuring and starting the bot
         | 
| 6 4 |  | 
| @@ -8,7 +6,7 @@ | |
| 8 6 | 
             
                require 'rubygems'
         | 
| 9 7 | 
             
                require 'percy'
         | 
| 10 8 |  | 
| 11 | 
            -
                 | 
| 9 | 
            +
                configure do |c|
         | 
| 12 10 | 
             
                  c.server             = 'chat.eu.freenode.net'
         | 
| 13 11 | 
             
                  c.port               = 6667
         | 
| 14 12 | 
             
                  # c.password         = 'password'
         | 
| @@ -20,19 +18,22 @@ | |
| 20 18 | 
             
                  c.reconnect_interval = 30
         | 
| 21 19 | 
             
                end
         | 
| 22 20 |  | 
| 23 | 
            -
                 | 
| 21 | 
            +
                connect
         | 
| 24 22 |  | 
| 25 23 | 
             
            Start it with `ruby mybot.rb`.
         | 
| 26 24 |  | 
| 27 25 | 
             
            ## Handling Events
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            - You can also call all methods with `Percy::IRC`, like `Percy::IRC.join('#that_cool_channel')`.
         | 
| 28 | 
            +
             | 
| 28 29 | 
             
            ### Connect
         | 
| 29 | 
            -
                 | 
| 30 | 
            +
                on :connect do
         | 
| 30 31 | 
             
                  # ...
         | 
| 31 32 | 
             
                end
         | 
| 32 33 | 
             
            No variables.
         | 
| 33 34 |  | 
| 34 35 | 
             
            ### Channel message
         | 
| 35 | 
            -
                 | 
| 36 | 
            +
                on :channel, /^foo!/ do |env|
         | 
| 36 37 | 
             
                  # ...
         | 
| 37 38 | 
             
                end
         | 
| 38 39 | 
             
            Variables:
         | 
| @@ -44,7 +45,7 @@ env[:channel]<br /> | |
| 44 45 | 
             
            env[:message]</tt>
         | 
| 45 46 |  | 
| 46 47 | 
             
            ### Query message
         | 
| 47 | 
            -
                 | 
| 48 | 
            +
                on :query, /^bar!/ do |env|
         | 
| 48 49 | 
             
                  # ...
         | 
| 49 50 | 
             
                end
         | 
| 50 51 | 
             
            Variables:
         | 
| @@ -55,7 +56,7 @@ env[:host]<br /> | |
| 55 56 | 
             
            env[:message]</tt>
         | 
| 56 57 |  | 
| 57 58 | 
             
            ### Join
         | 
| 58 | 
            -
                 | 
| 59 | 
            +
                on :join do |env|
         | 
| 59 60 | 
             
                  # ...
         | 
| 60 61 | 
             
                end
         | 
| 61 62 | 
             
            Variables:
         | 
| @@ -66,7 +67,7 @@ env[:host]<br /> | |
| 66 67 | 
             
            env[:channel]</tt>
         | 
| 67 68 |  | 
| 68 69 | 
             
            ### Part
         | 
| 69 | 
            -
                 | 
| 70 | 
            +
                on :part do |env|
         | 
| 70 71 | 
             
                  # ...
         | 
| 71 72 | 
             
                end
         | 
| 72 73 | 
             
            Variables:
         | 
| @@ -78,7 +79,7 @@ env[:channel]<br /> | |
| 78 79 | 
             
            env[:message]</tt>
         | 
| 79 80 |  | 
| 80 81 | 
             
            ### Quit
         | 
| 81 | 
            -
                 | 
| 82 | 
            +
                on :quit do |env|
         | 
| 82 83 | 
             
                  # ...
         | 
| 83 84 | 
             
                end
         | 
| 84 85 | 
             
            Variables:
         | 
| @@ -89,7 +90,7 @@ env[:host]<br /> | |
| 89 90 | 
             
            env[:message]</tt>
         | 
| 90 91 |  | 
| 91 92 | 
             
            ### Nickchange
         | 
| 92 | 
            -
                 | 
| 93 | 
            +
                on :nickchange do |env|
         | 
| 93 94 | 
             
                  # ...
         | 
| 94 95 | 
             
                end
         | 
| 95 96 | 
             
            Variables:
         | 
| @@ -100,7 +101,7 @@ env[:host]<br /> | |
| 100 101 | 
             
            env[:new_nick]</tt>
         | 
| 101 102 |  | 
| 102 103 | 
             
            ### Kick
         | 
| 103 | 
            -
                 | 
| 104 | 
            +
                on :kick do |env|
         | 
| 104 105 | 
             
                  # ...
         | 
| 105 106 | 
             
                end
         | 
| 106 107 | 
             
            Variables:
         | 
| @@ -113,7 +114,7 @@ env[:victim]<br /> | |
| 113 114 | 
             
            env[:reason]</tt>
         | 
| 114 115 |  | 
| 115 116 | 
             
            ### Raw Numerics
         | 
| 116 | 
            -
                 | 
| 117 | 
            +
                on '301' do |env|
         | 
| 117 118 | 
             
                  # ...
         | 
| 118 119 | 
             
                end
         | 
| 119 120 | 
             
            Variables:
         | 
| @@ -122,59 +123,97 @@ Variables: | |
| 122 123 |  | 
| 123 124 | 
             
            ## Availabe Class Methods
         | 
| 124 125 |  | 
| 125 | 
            -
            ` | 
| 126 | 
            +
            `raw(msg)`
         | 
| 126 127 |  | 
| 127 128 | 
             
            Sends a raw message to the server.
         | 
| 128 129 |  | 
| 129 | 
            -
            ` | 
| 130 | 
            +
            `message(recipient, msg)`
         | 
| 130 131 |  | 
| 131 132 | 
             
            Sends a message to a channel or an user.
         | 
| 132 133 |  | 
| 133 | 
            -
            ` | 
| 134 | 
            +
            `notice(recipient, msg)`
         | 
| 134 135 |  | 
| 135 136 | 
             
            Sends a notice to an user.
         | 
| 136 137 |  | 
| 137 | 
            -
            ` | 
| 138 | 
            +
            `action(recipient, msg)`
         | 
| 138 139 |  | 
| 139 140 | 
             
            Performs an action (/me ...).
         | 
| 140 141 |  | 
| 141 | 
            -
            ` | 
| 142 | 
            +
            `mode(recipient, option)`
         | 
| 142 143 |  | 
| 143 144 | 
             
            Sets a mode for a channel or an user.
         | 
| 144 145 |  | 
| 145 | 
            -
            ` | 
| 146 | 
            +
            `channellimit(channel)`
         | 
| 146 147 |  | 
| 147 148 | 
             
            Returns the channel limit of a channel (as integer if set, else (not set/timeout) false).
         | 
| 148 149 |  | 
| 149 | 
            -
            ` | 
| 150 | 
            +
            `kick(channel, user, reason)`
         | 
| 150 151 |  | 
| 151 152 | 
             
            Kicks an user from a channel with a specific reason.
         | 
| 152 153 |  | 
| 153 | 
            -
            ` | 
| 154 | 
            +
            `topic(channel, topic)`
         | 
| 154 155 |  | 
| 155 156 | 
             
            Sets the topic for a channel.
         | 
| 156 157 |  | 
| 157 | 
            -
            ` | 
| 158 | 
            +
            `join(channel, password = nil)`
         | 
| 158 159 |  | 
| 159 160 | 
             
            Joins a channel.
         | 
| 160 161 |  | 
| 161 | 
            -
            ` | 
| 162 | 
            +
            `part(channel, msg)`
         | 
| 162 163 |  | 
| 163 164 | 
             
            Parts a channel with a message.
         | 
| 164 165 |  | 
| 165 | 
            -
            ` | 
| 166 | 
            +
            `quit(msg = nil)`
         | 
| 166 167 |  | 
| 167 168 | 
             
            Quits from the server with a message.
         | 
| 168 169 |  | 
| 169 | 
            -
            ` | 
| 170 | 
            +
            `users_on(channel)`
         | 
| 170 171 |  | 
| 171 172 | 
             
            Returns an array of users from a channel (mode in front like: ['@percy', 'Peter_Parker', '+The_Librarian']) or false if timeout.
         | 
| 172 173 |  | 
| 173 | 
            -
             | 
| 174 | 
            -
            `Percy.is_online(nick)`
         | 
| 174 | 
            +
            `is_online(nick)`
         | 
| 175 175 |  | 
| 176 176 | 
             
            Returns a nickname as string if online, else false (not online/timeout)
         | 
| 177 177 |  | 
| 178 | 
            +
            ## Formatting
         | 
| 179 | 
            +
             | 
| 180 | 
            +
            There are constants for formatting your messages. They are all availabe through `Percy::Formatting` or by including the module.
         | 
| 181 | 
            +
             | 
| 182 | 
            +
            Availabe formatting constants:
         | 
| 183 | 
            +
             | 
| 184 | 
            +
            `PLAIN`
         | 
| 185 | 
            +
            `BOLD`
         | 
| 186 | 
            +
            `ITALIC`
         | 
| 187 | 
            +
            `UNDERLINE`
         | 
| 188 | 
            +
            `COLOR_CODE`
         | 
| 189 | 
            +
            `UNCOLOR`
         | 
| 190 | 
            +
            `COLORS`
         | 
| 191 | 
            +
             | 
| 192 | 
            +
            Availabe colors through the `COLORS` hash:
         | 
| 193 | 
            +
             | 
| 194 | 
            +
            `:white`
         | 
| 195 | 
            +
            `:black`
         | 
| 196 | 
            +
            `:blue`
         | 
| 197 | 
            +
            `:green`
         | 
| 198 | 
            +
            `:red`
         | 
| 199 | 
            +
            `:brown`
         | 
| 200 | 
            +
            `:purple`
         | 
| 201 | 
            +
            `:orange`
         | 
| 202 | 
            +
            `:yellow`
         | 
| 203 | 
            +
            `:lime`
         | 
| 204 | 
            +
            `:teal`
         | 
| 205 | 
            +
            `:cyan`
         | 
| 206 | 
            +
            `:royal`
         | 
| 207 | 
            +
            `:pink`
         | 
| 208 | 
            +
            `:gray`
         | 
| 209 | 
            +
            `:silver`
         | 
| 210 | 
            +
             | 
| 211 | 
            +
            ### Example:
         | 
| 212 | 
            +
                message '#that_cool_channel', "#{Percy::Formatting::COLOR_CODE}#{Percy::Formatting::COLORS[:red]}This is red text.#{Percy::Formatting::UNCOLOR} This is not."
         | 
| 213 | 
            +
             | 
| 214 | 
            +
            ### Example with included Percy::Formatting module:
         | 
| 215 | 
            +
                message '#that_cool_channel', "#{COLOR_CODE}#{COLORS[:red]}This is red text.#{UNCOLOR} This is not."
         | 
| 216 | 
            +
             | 
| 178 217 | 
             
            ## License
         | 
| 179 218 | 
             
            Copyright (c) 2009, 2010 Tobias Bühlmann
         | 
| 180 219 |  | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            1. | 
| 1 | 
            +
            1.4.0
         | 
    
        data/examples/github_blog.rb
    CHANGED
    
    | @@ -3,6 +3,7 @@ require 'nokogiri' | |
| 3 3 | 
             
            require 'open-uri'
         | 
| 4 4 | 
             
            require 'percy'
         | 
| 5 5 |  | 
| 6 | 
            +
            # abbreviated notation without Percy::IRC
         | 
| 6 7 | 
             
            configure do |c|
         | 
| 7 8 | 
             
              c.server    = 'chat.eu.freenode.net'
         | 
| 8 9 | 
             
              c.port      = 6667
         | 
| @@ -20,7 +21,7 @@ on :channel, /^!quit$/ do | |
| 20 21 | 
             
              quit
         | 
| 21 22 | 
             
            end
         | 
| 22 23 |  | 
| 23 | 
            -
            on :channel, /^blog | 
| 24 | 
            +
            on :channel, /^blog\?$/ do |env|
         | 
| 24 25 | 
             
              doc = Nokogiri::HTML(open('http://github.com/blog'))
         | 
| 25 26 | 
             
              title = doc.xpath('//html/body/div/div[2]/div/div/ul/li/h2/a')[0].text
         | 
| 26 27 |  | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            require 'rubygems'
         | 
| 2 2 | 
             
            require 'percy'
         | 
| 3 3 |  | 
| 4 | 
            -
            Percy.configure do |c|
         | 
| 4 | 
            +
            Percy::IRC.configure do |c|
         | 
| 5 5 | 
             
              c.server    = 'chat.eu.freenode.net'
         | 
| 6 6 | 
             
              c.port      = 6667
         | 
| 7 7 | 
             
              c.nick      = 'Percy_onlchk'
         | 
| @@ -10,24 +10,24 @@ Percy.configure do |c| | |
| 10 10 | 
             
              c.reconnect = false
         | 
| 11 11 | 
             
            end
         | 
| 12 12 |  | 
| 13 | 
            -
            Percy.on :connect do
         | 
| 14 | 
            -
              Percy.join '#that_cool_channel'
         | 
| 13 | 
            +
            Percy::IRC.on :connect do
         | 
| 14 | 
            +
              Percy::IRC.join '#that_cool_channel'
         | 
| 15 15 | 
             
            end
         | 
| 16 16 |  | 
| 17 | 
            -
            Percy.on :channel, /^!quit$/ do
         | 
| 18 | 
            -
              Percy.quit
         | 
| 17 | 
            +
            Percy::IRC.on :channel, /^!quit$/ do
         | 
| 18 | 
            +
              Percy::IRC.quit
         | 
| 19 19 | 
             
            end
         | 
| 20 20 |  | 
| 21 | 
            -
            Percy.on :channel, /^online\?/ do |env|
         | 
| 21 | 
            +
            Percy::IRC.on :channel, /^online\?/ do |env|
         | 
| 22 22 | 
             
              match = env[:message].split(' ')
         | 
| 23 23 | 
             
              if match.length > 1
         | 
| 24 | 
            -
                user = Percy.is_online(match[1])
         | 
| 24 | 
            +
                user = Percy::IRC.is_online(match[1])
         | 
| 25 25 | 
             
                if user
         | 
| 26 | 
            -
                  Percy.message env[:channel], "#{user} is online!"
         | 
| 26 | 
            +
                  Percy::IRC.message env[:channel], "#{user} is online!"
         | 
| 27 27 | 
             
                else
         | 
| 28 | 
            -
                  Percy.message env[:channel], "#{user} is not online!"
         | 
| 28 | 
            +
                  Percy::IRC.message env[:channel], "#{user} is not online!"
         | 
| 29 29 | 
             
                end
         | 
| 30 30 | 
             
              end
         | 
| 31 31 | 
             
            end
         | 
| 32 32 |  | 
| 33 | 
            -
            Percy.connect
         | 
| 33 | 
            +
            Percy::IRC.connect
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'eventmachine'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Percy
         | 
| 5 | 
            +
              class Connection < EventMachine::Connection
         | 
| 6 | 
            +
                include EventMachine::Protocols::LineText2
         | 
| 7 | 
            +
                
         | 
| 8 | 
            +
                def connection_completed
         | 
| 9 | 
            +
                  IRC.raw "NICK #{IRC.config.nick}"
         | 
| 10 | 
            +
                  IRC.raw "USER #{IRC.config.nick} 0 * :#{IRC.config.username}"
         | 
| 11 | 
            +
                  IRC.raw "PASS #{IRC.config.password}" if IRC.config.password
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                def unbind
         | 
| 15 | 
            +
                  IRC.connected = false
         | 
| 16 | 
            +
                  IRC.traffic_logger.info('-- Percy disconnected') if IRC.traffic_logger
         | 
| 17 | 
            +
                  puts "#{Time.now.strftime('%d.%m.%Y %H:%M:%S')} -- Percy disconnected"
         | 
| 18 | 
            +
                  
         | 
| 19 | 
            +
                  if IRC.config.reconnect
         | 
| 20 | 
            +
                    IRC.traffic_logger.info("-- Reconnecting in #{IRC.config.reconnect_interval} seconds") if IRC.traffic_logger
         | 
| 21 | 
            +
                    puts "#{Time.now.strftime('%d.%m.%Y %H:%M:%S')} -- Reconnecting in #{IRC.config.reconnect_interval} seconds"
         | 
| 22 | 
            +
                    
         | 
| 23 | 
            +
                    EventMachine::add_timer(IRC.config.reconnect_interval) do
         | 
| 24 | 
            +
                      reconnect IRC.config.server, IRC.config.port
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  else
         | 
| 27 | 
            +
                    EventMachine::stop_event_loop
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
                
         | 
| 31 | 
            +
                def receive_line(line)
         | 
| 32 | 
            +
                  IRC.parse line
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            module Percy
         | 
| 2 | 
            +
              module Formatting
         | 
| 3 | 
            +
                PLAIN      = 15.chr
         | 
| 4 | 
            +
                BOLD       = 2.chr
         | 
| 5 | 
            +
                ITALIC     = 22.chr
         | 
| 6 | 
            +
                UNDERLINE  = 31.chr
         | 
| 7 | 
            +
                COLOR_CODE = 3.chr
         | 
| 8 | 
            +
                UNCOLOR    = COLOR_CODE
         | 
| 9 | 
            +
                
         | 
| 10 | 
            +
                #mIRC color codes from http://www.mirc.com/help/color.txt
         | 
| 11 | 
            +
                COLORS     = {:white       => '00',
         | 
| 12 | 
            +
                              :black       => '01',
         | 
| 13 | 
            +
                              :blue        => '02',
         | 
| 14 | 
            +
                              :green       => '03',
         | 
| 15 | 
            +
                              :red         => '04',
         | 
| 16 | 
            +
                              :brown       => '05',
         | 
| 17 | 
            +
                              :purple      => '06',
         | 
| 18 | 
            +
                              :orange      => '07',
         | 
| 19 | 
            +
                              :yellow      => '08',
         | 
| 20 | 
            +
                              :lime        => '09',
         | 
| 21 | 
            +
                              :teal        => '10',
         | 
| 22 | 
            +
                              :cyan        => '11',
         | 
| 23 | 
            +
                              :royal       => '12',
         | 
| 24 | 
            +
                              :pink        => '13',
         | 
| 25 | 
            +
                              :gray        => '14',
         | 
| 26 | 
            +
                              :silver      => '15'}
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         |