⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a_protocols_irc.pl

📁 AndyChat 是一种用Perl 来编写的多协议的控制台聊天程序。它的目的在于提供一种共同的控制台界面
💻 PL
📖 第 1 页 / 共 5 页
字号:
    $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 + -