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