module Net::IRC::Client::ChannelManager

Public Instance Methods

init_channel(channel) click to toggle source

For managing channel

    # File lib/net/irc/client/channel_manager.rb
136 def init_channel(channel)
137         @channels[channel] ||= {
138                 :modes => [],
139                 :users => [],
140         }
141 end
on_join(m) click to toggle source

For managing channel

   # File lib/net/irc/client/channel_manager.rb
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
on_kick(m) click to toggle source

For managing channel

   # File lib/net/irc/client/channel_manager.rb
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
on_mode(m) click to toggle source

For managing channel

    # File lib/net/irc/client/channel_manager.rb
116 def on_mode(m)
117         channel = m[0]
118         @channels.synchronize do
119                 init_channel(channel)
120 
121                 modes = @server_config.mode_parser.parse(m)
122                 modes[:negative].each do |mode|
123                         @channels[channel][:modes].delete(mode)
124                 end
125 
126                 modes[:positive].each do |mode|
127                         @channels[channel][:modes] << mode
128                 end
129 
130                 @channels[channel][:modes].uniq!
131                 [modes[:negative], modes[:positive]]
132         end
133 end
on_nick(m) click to toggle source

For managing channel

    # File lib/net/irc/client/channel_manager.rb
 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! {|mode, target|
109                                 (target == oldnick) ? [mode, newnick] : [mode, target]
110                         }
111                 end
112         end
113 end
on_part(m) click to toggle source

For managing channel

   # File lib/net/irc/client/channel_manager.rb
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
on_quit(m) click to toggle source

For managing channel

   # File lib/net/irc/client/channel_manager.rb
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
on_rpl_namreply(m) click to toggle source

For managing channel

   # File lib/net/irc/client/channel_manager.rb
 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(" ").each do |u|
11                         _, mode, nick = *u.match(/\A([@+]?)(.+)/)
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