on_irc 2.1.1 → 2.1.3
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/VERSION +1 -1
- data/lib/on_irc/connection.rb +2 -2
- data/lib/on_irc/parser.rb +3 -3
- metadata +34 -43
- data/examples/bot.rb +0 -40
- data/examples/regex_bot.rb +0 -96
- data/examples/relay.rb +0 -46
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.3
|
data/lib/on_irc/connection.rb
CHANGED
@@ -8,14 +8,14 @@ class IRC
|
|
8
8
|
|
9
9
|
## EventMachine callbacks
|
10
10
|
def post_init
|
11
|
-
send_data("USER #{@server.ident || @server.irc.ident} * *
|
11
|
+
send_data("USER #{@server.ident || @server.irc.ident} * * :#{@server.realname || @server.irc.realname}\r\n")
|
12
12
|
send_data("NICK #{@server.nick || @server.irc.nick}\r\n")
|
13
13
|
rescue => e
|
14
14
|
p e
|
15
15
|
end
|
16
16
|
|
17
17
|
def receive_line(line)
|
18
|
-
@server.receive_line(line.force_encoding('utf-8'))
|
18
|
+
@server.receive_line(RUBY_VERSION < "1.9" ? line : line.force_encoding('utf-8'))
|
19
19
|
end
|
20
20
|
|
21
21
|
def unbind
|
data/lib/on_irc/parser.rb
CHANGED
@@ -8,11 +8,11 @@ class IRC
|
|
8
8
|
|
9
9
|
if msg.peek(1) == ':'
|
10
10
|
msg.pos += 1
|
11
|
-
prefix = msg.scan /\S+/
|
11
|
+
prefix = msg.scan /\S+/u
|
12
12
|
msg.skip /\s+/
|
13
13
|
end
|
14
14
|
|
15
|
-
command = msg.scan /\S+/
|
15
|
+
command = msg.scan /\S+/u
|
16
16
|
|
17
17
|
until msg.eos?
|
18
18
|
msg.skip /\s+/
|
@@ -22,7 +22,7 @@ class IRC
|
|
22
22
|
params << msg.rest
|
23
23
|
msg.terminate
|
24
24
|
else
|
25
|
-
params << msg.scan(/\S+/)
|
25
|
+
params << msg.scan(/\S+/u)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
metadata
CHANGED
@@ -1,36 +1,34 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: on_irc
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.1.3
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Scott Olson
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-12-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: eventmachine
|
16
|
+
requirement: &14911800 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
17
22
|
type: :runtime
|
18
|
-
|
19
|
-
version_requirements:
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: "0"
|
24
|
-
version:
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *14911800
|
25
25
|
description: An event driven IRC library with an easy to use DSL
|
26
26
|
email: scott@scott-olson.org
|
27
27
|
executables: []
|
28
|
-
|
29
28
|
extensions: []
|
30
|
-
|
31
|
-
extra_rdoc_files:
|
29
|
+
extra_rdoc_files:
|
32
30
|
- LICENSE
|
33
|
-
files:
|
31
|
+
files:
|
34
32
|
- LICENSE
|
35
33
|
- Rakefile
|
36
34
|
- VERSION
|
@@ -45,35 +43,28 @@ files:
|
|
45
43
|
- lib/on_irc/parser.rb
|
46
44
|
- lib/on_irc/sender.rb
|
47
45
|
- lib/on_irc/server.rb
|
48
|
-
has_rdoc: true
|
49
46
|
homepage: http://github.com/tsion/on_irc
|
50
47
|
licenses: []
|
51
|
-
|
52
48
|
post_install_message:
|
53
|
-
rdoc_options:
|
54
|
-
|
55
|
-
require_paths:
|
49
|
+
rdoc_options: []
|
50
|
+
require_paths:
|
56
51
|
- lib
|
57
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
69
64
|
requirements: []
|
70
|
-
|
71
65
|
rubyforge_project:
|
72
|
-
rubygems_version: 1.
|
66
|
+
rubygems_version: 1.8.11
|
73
67
|
signing_key:
|
74
68
|
specification_version: 3
|
75
69
|
summary: An event driven IRC library with an easy to use DSL
|
76
|
-
test_files:
|
77
|
-
- examples/regex_bot.rb
|
78
|
-
- examples/relay.rb
|
79
|
-
- examples/bot.rb
|
70
|
+
test_files: []
|
data/examples/bot.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.join(File.dirname(__FILE__), '..', 'lib', 'on_irc')
|
3
|
-
|
4
|
-
bot = IRC.new do
|
5
|
-
nick 'on_irc'
|
6
|
-
ident 'on_irc'
|
7
|
-
realname 'on_irc Ruby IRC library'
|
8
|
-
|
9
|
-
server :eighthbit do
|
10
|
-
address 'irc.eighthbit.net'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
bot[:eighthbit].on '001' do
|
16
|
-
join '#bots'
|
17
|
-
end
|
18
|
-
|
19
|
-
bot.on :privmsg do
|
20
|
-
case params[1]
|
21
|
-
when '!ping'
|
22
|
-
respond "#{sender.nick}: pong"
|
23
|
-
when /^!echo (.*)/
|
24
|
-
respond "#{sender.nick}: #{$1}"
|
25
|
-
when /^!join (.*)/
|
26
|
-
join $1
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
bot.on :ping do
|
31
|
-
pong params[0]
|
32
|
-
end
|
33
|
-
|
34
|
-
bot.on :all do
|
35
|
-
p = "(#{sender}) " unless sender.empty?
|
36
|
-
puts "#{server.name}: #{p}#{command} #{params.inspect}"
|
37
|
-
end
|
38
|
-
|
39
|
-
bot.connect
|
40
|
-
|
data/examples/regex_bot.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.join(File.dirname(__FILE__), '..', 'lib', 'on_irc')
|
3
|
-
|
4
|
-
MAX_BANGS = 3
|
5
|
-
CH_USER_MEMORY = {}
|
6
|
-
CHANNEL_MEMORY = {}
|
7
|
-
|
8
|
-
bot = IRC.new do
|
9
|
-
nick 'reggie'
|
10
|
-
ident 'reggie'
|
11
|
-
realname 'uses on_irc Ruby IRC library'
|
12
|
-
|
13
|
-
server :eighthbit do
|
14
|
-
address 'irc.eighthbit.net'
|
15
|
-
end
|
16
|
-
|
17
|
-
# server :freenode do
|
18
|
-
# address 'irc.freenode.org'
|
19
|
-
# end
|
20
|
-
end
|
21
|
-
|
22
|
-
bot[:eighthbit].on :'001' do
|
23
|
-
join '#programming'
|
24
|
-
join '#offtopic'
|
25
|
-
end
|
26
|
-
|
27
|
-
bot.on :privmsg do
|
28
|
-
next unless params[0][0,1] == '#' # make sure regex replace only happens in channels
|
29
|
-
channel = params[0]
|
30
|
-
message = params[1]
|
31
|
-
|
32
|
-
CHANNEL_MEMORY[channel] ||= []
|
33
|
-
CH_USER_MEMORY[channel] ||= {}
|
34
|
-
CH_USER_MEMORY[channel][sender.nick] ||= []
|
35
|
-
|
36
|
-
if params[1] =~ %r"^(!*)s/((?:[^\\/]|\\.)*)/((?:[^\\/]|\\.)*)/(?:(\w*))?"
|
37
|
-
bangs = $1
|
38
|
-
match = $2
|
39
|
-
replace = $3
|
40
|
-
flags = $4
|
41
|
-
|
42
|
-
if bangs.length > MAX_BANGS
|
43
|
-
respond "#{sender.nick}: I only support up to #{MAX_BANGS} !'s."
|
44
|
-
respond 'in bed' if rand(1000) == 42
|
45
|
-
next
|
46
|
-
end
|
47
|
-
|
48
|
-
begin
|
49
|
-
match = Regexp.new match
|
50
|
-
rescue RegexpError => err
|
51
|
-
respond "RegexpError: #{err.message}"
|
52
|
-
next
|
53
|
-
end
|
54
|
-
|
55
|
-
target = if bangs.length == 0
|
56
|
-
CHANNEL_MEMORY[channel][1] || ''
|
57
|
-
else
|
58
|
-
CH_USER_MEMORY[channel][sender.nick][-bangs.length] || ''
|
59
|
-
end
|
60
|
-
|
61
|
-
if flags.chars.include? 'g'
|
62
|
-
answer = target.gsub(match, replace)
|
63
|
-
else
|
64
|
-
answer = target.sub(match, replace)
|
65
|
-
end
|
66
|
-
|
67
|
-
if bangs.length > 0 || CHANNEL_MEMORY[channel][0] == sender.nick
|
68
|
-
respond "#{sender.nick} meant: #{answer}"
|
69
|
-
else
|
70
|
-
respond "#{sender.nick} thinks #{CHANNEL_MEMORY[channel][0]} meant: #{answer}"
|
71
|
-
end
|
72
|
-
|
73
|
-
else
|
74
|
-
if message =~ /^\x01(\S+) (.*)\x01$/
|
75
|
-
next unless $1 == 'ACTION'
|
76
|
-
|
77
|
-
message = "* #{sender.nick} #{$2}"
|
78
|
-
end
|
79
|
-
|
80
|
-
CH_USER_MEMORY[channel][sender.nick] << message
|
81
|
-
CH_USER_MEMORY[channel][sender.nick].unshift if CH_USER_MEMORY[channel][sender.nick].length > MAX_BANGS
|
82
|
-
|
83
|
-
CHANNEL_MEMORY[channel] = [sender.nick, message]
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
bot.on :ping do
|
88
|
-
pong params[0]
|
89
|
-
end
|
90
|
-
|
91
|
-
bot.on :all do
|
92
|
-
p = "(#{sender}) " unless sender.empty?
|
93
|
-
puts "#{server.name}: #{p}#{command} #{params.inspect}"
|
94
|
-
end
|
95
|
-
|
96
|
-
bot.connect
|
data/examples/relay.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.join(File.dirname(__FILE__), '..', 'lib', 'on_irc')
|
3
|
-
|
4
|
-
bot = IRC.new do
|
5
|
-
nick 'on_irc-relay'
|
6
|
-
ident 'on_irc'
|
7
|
-
realname 'on_irc Ruby IRC library - relay example'
|
8
|
-
|
9
|
-
server :eighthbit do
|
10
|
-
address 'irc.eighthbit.net'
|
11
|
-
end
|
12
|
-
|
13
|
-
server :freenode do
|
14
|
-
address 'irc.freenode.org'
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
bot[:freenode].on '001' do
|
20
|
-
join '#botters'
|
21
|
-
end
|
22
|
-
|
23
|
-
bot[:eighthbit].on '001' do
|
24
|
-
join '#offtopic'
|
25
|
-
end
|
26
|
-
|
27
|
-
bot.on :privmsg do
|
28
|
-
case params[1]
|
29
|
-
when /^fn> (.*)/
|
30
|
-
bot[:freenode].msg('#botters', "<8b:#{sender.nick}> #{$1}") if params[0] == '#offtopic' && server.name == :eighthbit
|
31
|
-
when /^8b> (.*)/
|
32
|
-
bot[:eighthbit].msg('#offtopic', "<fn:#{sender.nick}> #{$1}") if params[0] == '#botters' && server.name == :freenode
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
bot.on :ping do
|
37
|
-
pong params[0]
|
38
|
-
end
|
39
|
-
|
40
|
-
bot.on :all do
|
41
|
-
p = "(#{sender}) " unless sender.empty?
|
42
|
-
puts "#{server.name}: #{p}#{command} #{params.inspect}"
|
43
|
-
end
|
44
|
-
|
45
|
-
bot.connect
|
46
|
-
|