📄 a_protocols_irc.pl
字号:
$irc__servercount--; }}sub irc__newChannel { my ($acy, $acx) = @_;# acy = server num, acx = window to put it in my $acz; if ($irc__server[$acy]{channels}) { for ($acz = 1; $acz <= $irc__server[$acy]{channels}; $acz++) { if (! $irc__channel[$acy][$acz]{status}) { if ($acx) { $irc__channel[$acy][$acz]{window} = $acx; } return $acz; } elsif ($acx && $irc__channel[$acy][$acz]{window} eq $acx) { if ($irc__channel[$acy][$acz]{status} ne 4) { AddLine($thiswin, "Malfunction in irc__newChannel, stolen window -- please report", $__irc_mark14); } else { irc__killChannel($acy, $acz, 1); $irc__channel[$acy][$acz]{window} = $acx; return $acz; } } } $irc__server[$acy]{channels}++; } else { $irc__server[$acy]{channels} = 1; } $acz = $irc__server[$acy]{channels}; irc__killChannel($acy, $acz, 1); if ($acx) { $irc__channel[$acy][$acz]{window} = $acx; } return $irc__server[$acy]{channels};}sub irc__allChannels { my ($acz) = @_; my ($tmpchannels, $irc__i); if (! $irc__server[$acz]{channels}) { return; } else { $tmpchannels = ""; for ($irc__i = 1; $irc__i <= $irc__server[$acz]{channels}; $irc__i++) { $tmpchannels = $tmpchannels . "," . $irc__channel[$acz][$irc__i]{channel}; } return substr($tmpchannels, 1); }}sub irc__eachChannel { my ($acz, $acy); my ($irc__i); if (! $irc__server[$acz]{channels}) { return; } else { for ($irc__i = 1; $irc__i <= $irc__server[$acz]{channels}; $irc__i++) { &{$acy}($acz, $irc__i); } }}sub irc__whichChannel { my ($acz, $acy, $acx) = @_; # (Server, Channel, Status[ni]) my ($irc__i); if (! $irc__server[$acz]{channels}) { return; } else { for ($irc__i = 1; $irc__i <= $irc__server[$acz]{channels}; $irc__i++) { if (uc($irc__channel[$acz][$irc__i]{channel}) eq uc($acy)) { return $irc__i; } } }}sub irc__killChannel { my ($acy, $acz, $acx) = @_; $irc__channel[$acy][$acz]{control} = ""; $irc__channel[$acy][$acz]{status} = ""; $irc__channel[$acy][$acz]{channel} = ""; $irc__channel[$acy][$acz]{window} = ""; $irc__channel[$acy][$acz]{modes} = ""; $irc__channel[$acy][$acz]{key} = ""; $irc__channel[$acy][$acz]{limit} = ""; $irc__channel[$acy][$acz]{users} = 0; while (! $acx && $acz eq $irc__server[$acy]{channels} && ! $irc__channel[$acy][$irc__server[$acy]{channels}]{status} && $irc__server[$acy]{channels}) { $irc__server[$acy]{channels}--; }}sub irc__newQuery { my ($acy, $acx) = @_; my $acz; if ($irc__server[$acy]{queries}) { for ($acz = 1; $acz <= $irc__server[$acy]{queries}; $acz++) { if (! $irc__query[$acy][$acz]{queries}) { $irc__query[$acy][$acz]{window} = $acx; return $acz; } elsif ($acx && $irc__query[$acy][$acz]{window} eq $acx) { if ($irc__query[$acy][$acz]{status} ne 4) { AddLine($thiswin, "Malfunction in irc__newQuery, stolen window -- please report", $__irc_mark14); } else { irc__killQuery($acy, $acz, 1); $irc__query[$acy][$acz]{window} = $acx; return $acz; } } } $irc__server[$acy]{queries}++; } else { $irc__server[$acy]{queries} = 1; } $acz = $irc__server[$acy]{queries}; irc__killQuery($acy, $acz, 1); if ($acx) { $irc__query[$acy][$acz]{window} = $acx; } return $irc__server[$acy]{queries};}sub irc__killQuery { my ($acy, $acz, $acx) = @_; $irc__query[$acy][$acz]{control} = ""; $irc__query[$acy][$acz]{status} = ""; $irc__query[$acy][$acz]{name} = ""; $irc__query[$acy][$acz]{window} = ""; while (! $acx && $acz eq $irc__server[$acy]{queries} && ! $irc__query[$acy][$irc__server[$acy]{queries}]{status} && $irc__server[$acy]{queries}) { $irc__server[$acy]{queries}--; }}sub irc__newDCC { my $acz; if ($irc__dcccount) { for ($acz = 1; $acz <= $irc__dcccount; $acz++) { if (! $irc__dcc[$acz]{status}) { return $acz; } } $irc__dcccount++; } else { $irc__dcccount = 1; } return $irc__dcccount;}sub irc__whichDCC { my ($acz, $acy, $acx, $acw, $acv) = @_; # Self (server), Control (DCC{_socket}), Nick, Type, Status my ($irc__i); if (! $irc__dcccount) { return; } else { for ($irc__i = 1; $irc__i <= $irc__dcccount; $irc__i++) { if ((! $acz || $irc__dcc[$irc__i]{server} eq $acz) && (! $acy || ($irc__dcc[$irc__i]{control} && $irc__dcc[$irc__i]{control} eq $acy) || ($irc__dcc[$irc__i]{ip} eq unpack("N", $acy->peeraddr()) && $irc__dcc[$irc__i]{port} eq $acy->peerport())) && (! $acx || $irc__dcc[$irc__i]{name} eq $acx) && (! $acw || $irc__dcc[$irc__i]{type} eq $acw) && (! $acv || $irc__dcc[$irc__i]{status} eq $acv)) { return $irc__i; } } } return;}sub irc__killDCC { my ($acz) = @_; $irc__dcc[$acz]{control} = ""; $irc__dcc[$acz]{rcontrol} = ""; $irc__dcc[$acz]{server} = ""; $irc__dcc[$acz]{status} = ""; $irc__dcc[$acz]{ip} = ""; $irc__dcc[$acz]{port} = ""; $irc__dcc[$acz]{name} = ""; $irc__dcc[$acz]{type} = ""; $irc__dcc[$acz]{realfile} = ""; $irc__dcc[$acz]{fakename} = ""; $irc__dcc[$acz]{filename} = ""; $irc__dcc[$acz]{filesize} = 0; $irc__dcc[$acz]{viewsize} = 0; $irc__dcc[$acz]{blocksize} = 0; undef $irc__dcc[$acz]{fh}; $irc__dcc[$acz]{progress} = 0; $irc__dcc[$acz]{lastwin} = 1; $irc__dcc[$acz]{started} = ""; $irc__dcc[$acz]{active} = ""; while ($acz eq $irc__dcccount && ! $irc__dcc[$irc__dcccount]{status} && $irc__dcccount > 0) { $irc__dcccount--; }}# IRC Bits!$__irc_mark1 = "`@" . chr(250) . "`%/`@" . chr(250) . " ";$__irc_mark9 = "`9" . chr(250) . "`%/`9" . chr(250) . " `7";$__irc_mark10 = "`0" . chr(250) . "`%/`0" . chr(250) . " `%";$__irc_mark12 = "`@" . chr(250) . "`%/`@" . chr(250) . " `7";$__irc_mark13 = "`#" . chr(250) . "`%/`#" . chr(250) . " ";$__irc_mark14 = "`\$" . chr(250) . "`%/`\$" . chr(250) . " `7";# IRC Listen/Responsesub irc__connect { my ($srv) = @_; my ($irc_s); $whichwin = $irc__server[$srv]{window}; if (! $window[$whichwin]{protocol}) { AddLine($whichwin, "Server window for this IRC network has disappeared", $__irc_mark14); } elsif ($window[$whichwin]{protocol} ne 1) { AddLine($whichwin, "Window already has an attached protocol", $__irc_mark14); } else { $window[$whichwin]{protocol} = 2; if ($irc_s = $irc->newconn(Nick => $irc__server[$srv]{name} || $my[$whichwin]{'name'} || "AndyChat", Server => $irc__server[$srv]{ip}, Port => $irc__server[$srv]{port} || 6667, Ircname => $config{'ircname'} || 'AndyChat ' . $Version . " - http://andy.secret.com.au/")) { $irc_s->add_global_handler(378, \&irc__on_motd); $irc_s->add_global_handler(377, \&irc__on_motd); $irc_s->add_global_handler(376, \&irc__on_connect); $irc_s->add_global_handler('disconnect', \&irc__on_disconnect); $irc_s->add_global_handler(375, \&irc__on_motd); $irc_s->add_global_handler(372, \&irc__on_motd); $irc_s->add_global_handler(353, \&irc__on_names); $irc_s->add_global_handler(255, \&irc__on_lusers); $irc_s->add_global_handler(254, \&irc__on_lusers); $irc_s->add_global_handler(253, \&irc__on_lusers); $irc_s->add_global_handler(252, \&irc__on_lusers); $irc_s->add_global_handler(251, \&irc__on_lusers); $irc_s->add_handler('join', \&irc__on_join); $irc_s->add_handler('quit', \&irc__on_quit); $irc_s->add_handler('nick', \&irc__on_nick); $irc_s->add_handler('nicknameinuse', \&irc__on_nicknameinuse); $irc_s->add_handler('erroneusnickname', \&irc__on_nicknameinuse); $irc_s->add_handler('nowaway', \&irc__on_awaytoggle); $irc_s->add_handler('unaway', \&irc__on_awaytoggle); $irc_s->add_handler('away', \&irc__on_away); $irc_s->add_handler('part', \&irc__on_part); $irc_s->add_handler('kick', \&irc__on_kick); $irc_s->add_handler('msg', \&irc__on_msg); $irc_s->add_handler('whoishelp', \&irc__on_whoishelp); $irc_s->add_handler('whoisuser', \&irc__on_whoisuser); $irc_s->add_handler('whoisserver', \&irc__on_whoisserver); $irc_s->add_handler('whoisoperator', \&irc__on_whoisoperator); $irc_s->add_handler('whoischanop', \&irc__on_whoischanop); $irc_s->add_handler('whoischannels', \&irc__on_whoischannels); $irc_s->add_handler('whoisidle', \&irc__on_whoisidle); $irc_s->add_handler('whoisvworld', \&irc__on_whoisvworld); $irc_s->add_handler('endofwhois', \&irc__on_endofwhois); $irc_s->add_handler('endofnames', \&irc__on_endofnames); $irc_s->add_handler('whoreply', \&irc__on_whoreply); $irc_s->add_handler('notice', \&irc__on_notice); $irc_s->add_handler('public', \&irc__on_public); $irc_s->add_handler('caction', \&irc__on_caction); $irc_s->add_handler('topic', \&irc__on_topic); $irc_s->add_handler('topicinfo', \&irc__on_topicinfo); $irc_s->add_handler('crfinger', \&irc__on_crfinger); $irc_s->add_handler('ctime', \&irc__on_ctime); $irc_s->add_handler('crtime', \&irc__on_crtime); $irc_s->add_handler('cversion', \&irc__on_cversion); $irc_s->add_handler('crversion', \&irc__on_crversion); $irc_s->add_handler('cping', \&irc__on_cping); $irc_s->add_handler('crping', \&irc__on_crping); $irc_s->add_handler('cpizza', \&irc__on_cpizza); $irc_s->add_handler('cnewpizza', \&irc__on_cnewpizza); $irc_s->add_handler('cdcc', \&irc__on_cdcc); $irc_s->add_handler('cunknown', \&irc__on_cunknown); $irc_s->add_handler('umode', \&irc__on_mode); $irc_s->add_handler('mode', \&irc__on_mode); $irc_s->add_handler('channelmodeis', \&irc__on_chanmodeis); $irc_s->add_handler('channelcreate', \&irc__on_channelcreate); $irc_s->add_handler('nosuchnick', \&irc__on_nosuchnick); $irc_s->add_handler('welcome', \&irc__on_motd); $irc_s->add_handler('yourhost', \&irc__on_motd); $irc_s->add_handler('created', \&irc__on_motd); $irc_s->add_handler('myinfo', \&irc__on_motd); $irc_s->add_handler('dcc_open', \&irc__on_dcc_open); $irc_s->add_handler('dcc_update', \&irc__on_dcc_update); $irc_s->add_handler('dcc_close', \&irc__on_dcc_close); $irc_s->add_handler('chat', \&irc__on_chat); $irc_s->add_handler('invite', \&irc__on_invite); # Channel Breakers $irc_s->add_handler('bannedfromchan', \&irc__on_bannedfromchan); $irc_s->add_handler('badchannelkey', \&irc__on_bannedfromchan); $irc_s->add_handler('channelisfull', \&irc__on_bannedfromchan); $irc_s->add_handler('toomanychannels', \&irc__on_bannedfromchan); $irc_s->add_handler('inviteonlychan', \&irc__on_bannedfromchan); # Misc Stuff being implemented right now $irc_s->add_handler('banlist', \&irc__on_error); $irc_s->add_handler('endofinfo', \&irc__on_error); $irc_s->add_handler('cannotsendtochan', \&irc__on_error); $irc_s->add_handler('querytoolong', \&irc__on_error); $irc_s->add_handler('erroneusnickname', \&irc__on_error); $irc_s->add_handler('unknowncommand', \&irc__on_error); $irc_s->add_handler('nonicknamegiven', \&irc__on_error); $irc_s->add_handler('nicknameinuse', \&irc__on_error); $irc_s->add_handler('nicktoofast', \&irc__on_error); $irc_s->add_handler('notonchannel', \&irc__on_error); $irc_s->add_handler('needmoreparams', \&irc__on_error); $irc_s->add_handler('yourebannedcreep', \&irc__on_error); $irc_s->add_handler('passwdmismatch', \&irc__on_error); $irc_s->add_handler('unknownmode', \&irc__on_error); $irc_s->add_handler('badchanmask', \&irc__on_error); $irc_s->add_handler('noprivileges', \&irc__on_error); $irc_s->add_handler('chanoprivsneeded', \&irc__on_error); $window[$whichwin]{control} = $irc_s; $irc__server[$srv]{control} = $irc_s; $irc__server[$srv]{status} = 2; $window[$whichwin]{sortusers} = 1; $window[$whichwin]{channel} = "Server Messages"; $window[$whichwin]{topic} = "irc://" . $irc__server[$srv]{ip} . ":" . $irc__server[$srv]{port} . "/"; if (! $irc__server[$srv]{name}) { $irc__server[$srv]{name} = $my[$whichwin]{name} || "AndyChat"; } if ($whichwin eq $thiswin) { RedrawChanInfo(); ReTitle("[Server Messages] " . $window[$thiswin]{topic}); } else { RedrawActivity(); } } return $irc_s; }}sub irc__on_connect { my $self = shift; my ($irc__i, $tmpchannels); $srv = irc__whichServer($self);# AddLine($thiswin, "Control IRC__: $irc__server[$srv]{control}");# AddLine($thiswin, "Strict Window: $window[$thiswin]{control}");# AddLine($thiswin, "WeThinkWeAre : $self"); $irc__server[$srv]{status} = 5; if ($config{invisonirc}) { if ($irc__server[$srv]{name}) { $self->mode($irc__server[$srv]{name}, "+i"); } else {# $self->mode($my[whichcontrol($self, 2)]{name}, "+i"); AddLine($irc__server[$srv]{window}, "\$my changeover didn't proceed as planned in on_connect -- please report", $__irc_mark14); } } if ($irc__server[$srv]{channels}) { $tmpchannels = ""; for ($irc__i = 1; $irc__i <= $irc__server[$srv]{channels}; $irc__i++) { if ($irc__channel[$srv][$irc__i]{status} eq 6) { $tmpchannels = $tmpchannels . "," . $irc__channel[$srv][$irc__i]{channel} . ($irc__channel[$srv][$irc__i]{key} ? " " . $irc__channel[$srv][$irc__i]{key} : ""); } } if ($tmpchannels) { $self->join(substr($tmpchannels, 1)); } if ($irc__server[$srv]{away}) { $self->away($irc__server[$srv]{away});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -