Public Instance methods
For managing channel
# File lib/net/irc/client/channel_manager.rb, line 136
136: def init_channel(channel)
137: @channels[channel] ||= {
138: :modes => [],
139: :users => [],
140: }
141: end
For managing channel
# File lib/net/irc/client/channel_manager.rb, line 86
86: def on_join(m)
87: nick = m.prefix.nick
88: channel = m[0]
89:
90: @channels.synchronize do
91: init_channel(channel)
92:
93: @channels[channel][:users] << nick
94: @channels[channel][:users].uniq!
95: end
96: end
For managing channel
# File lib/net/irc/client/channel_manager.rb, line 66
66: def on_kick(m)
67: users = m[1].split(/,/)
68:
69: @channels.synchronize do
70: m[0].split(/,/).each do |chan|
71: init_channel(chan)
72: info = @channels[chan]
73: if info
74: users.each do |nick|
75: info[:users].delete(nick)
76: info[:modes].delete_if {|u|
77: u[1] == nick
78: }
79: end
80: end
81: end
82: end
83: end
For managing channel
# File lib/net/irc/client/channel_manager.rb, line 116
116: def on_mode(m)
117: channel = m[0]
118: @channels.synchronize do
119: init_channel(channel)
120:
121: mode = @server_config.mode_parser.parse(m)
122: mode[:negative].each do |m|
123: @channels[channel][:modes].delete(m)
124: end
125:
126: mode[:positive].each do |m|
127: @channels[channel][:modes] << m
128: end
129:
130: @channels[channel][:modes].uniq!
131: [mode[:negative], mode[:positive]]
132: end
133: end
For managing channel
# File lib/net/irc/client/channel_manager.rb, line 99
99: def on_nick(m)
100: oldnick = m.prefix.nick
101: newnick = m[0]
102:
103: @channels.synchronize do
104: @channels.each do |channel, info|
105: info[:users].map! {|i|
106: (i == oldnick) ? newnick : i
107: }
108: info[:modes].map! {|m, target|
109: (target == oldnick) ? [m, newnick] : [m, target]
110: }
111: end
112: end
113: end
For managing channel
# File lib/net/irc/client/channel_manager.rb, line 35
35: def on_part(m)
36: nick = m.prefix.nick
37: channel = m[0]
38: init_channel(channel)
39:
40: @channels.synchronize do
41: info = @channels[channel]
42: if info
43: info[:users].delete(nick)
44: info[:modes].delete_if {|u|
45: u[1] == nick
46: }
47: end
48: end
49: end
For managing channel
# File lib/net/irc/client/channel_manager.rb, line 52
52: def on_quit(m)
53: nick = m.prefix.nick
54:
55: @channels.synchronize do
56: @channels.each do |channel, info|
57: info[:users].delete(nick)
58: info[:modes].delete_if {|u|
59: u[1] == nick
60: }
61: end
62: end
63: end
For managing channel
# File lib/net/irc/client/channel_manager.rb, line 4
4: def on_rpl_namreply(m)
5: type = m[1]
6: channel = m[2]
7: init_channel(channel)
8:
9: @channels.synchronize do
10: m[3].split(/\s+/).each do |u|
11: _, mode, nick = *u.match(/^([@+]?)(.+)/)
12:
13: @channels[channel][:users] << nick
14: @channels[channel][:users].uniq!
15:
16: op = @server_config.mode_parser.mark_to_op(mode)
17: if op
18: @channels[channel][:modes] << [op, nick]
19: end
20: end
21:
22: case type
23: when "@" # secret
24: @channels[channel][:modes] << [:s, nil]
25: when "*" # private
26: @channels[channel][:modes] << [:p, nil]
27: when "=" # public
28: end
29:
30: @channels[channel][:modes].uniq!
31: end
32: end