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