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 CHANGED
@@ -1,6 +1,4 @@
1
- # Percy 1.3.0
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
- Percy.configure do |c|
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
- Percy.connect
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
- Percy.on :connect do
30
+ on :connect do
30
31
  # ...
31
32
  end
32
33
  No variables.
33
34
 
34
35
  ### Channel message
35
- Percy.on :channel, /^foo!/ do |env|
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
- Percy.on :query, /^bar!/ do |env|
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
- Percy.on :join do |env|
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
- Percy.on :part do |env|
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
- Percy.on :quit do |env|
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
- Percy.on :nickchange do |env|
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
- Percy.on :kick do |env|
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
- Percy.on '301' do |env|
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
- `Percy.raw(msg)`
126
+ `raw(msg)`
126
127
 
127
128
  Sends a raw message to the server.
128
129
 
129
- `Percy.message(recipient, msg)`
130
+ `message(recipient, msg)`
130
131
 
131
132
  Sends a message to a channel or an user.
132
133
 
133
- `Percy.notice(recipient, msg)`
134
+ `notice(recipient, msg)`
134
135
 
135
136
  Sends a notice to an user.
136
137
 
137
- `Percy.action(recipient, msg)`
138
+ `action(recipient, msg)`
138
139
 
139
140
  Performs an action (/me ...).
140
141
 
141
- `Percy.mode(recipient, option)`
142
+ `mode(recipient, option)`
142
143
 
143
144
  Sets a mode for a channel or an user.
144
145
 
145
- `Percy.channellimit(channel)`
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
- `Percy.kick(channel, user, reason)`
150
+ `kick(channel, user, reason)`
150
151
 
151
152
  Kicks an user from a channel with a specific reason.
152
153
 
153
- `Percy.topic(channel, topic)`
154
+ `topic(channel, topic)`
154
155
 
155
156
  Sets the topic for a channel.
156
157
 
157
- `Percy.join(channel, password = nil)`
158
+ `join(channel, password = nil)`
158
159
 
159
160
  Joins a channel.
160
161
 
161
- `Percy.part(channel, msg)`
162
+ `part(channel, msg)`
162
163
 
163
164
  Parts a channel with a message.
164
165
 
165
- `Percy.quit(msg = nil)`
166
+ `quit(msg = nil)`
166
167
 
167
168
  Quits from the server with a message.
168
169
 
169
- `Percy.users_on(channel)`
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.3.0
1
+ 1.4.0
@@ -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?$/ do |env|
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