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

📄 serverevent.pm

📁 MSN fast change name is new utility 4 you
💻 PM
📖 第 1 页 / 共 2 页
字号:
sub check_autoreply {    my ($self, $oicq, $dstid, $mesg) = @_;    my $ui = $oicq->{UI};    if (defined $ui) {        $ui->beep;        my $idletime = $ui->idle_time;        if ($oicq->{AutoAwayTime} && $idletime > $oicq->{AutoAwayTime}) {            $oicq->{Away} = $idletime;        }    }    $oicq->{Away} or return 0;    my $autoreply = $oicq->{LastAutoReply};    if (defined($autoreply->{$dstid}) && time - $autoreply->{$dstid} < 300) {        return 0;    }    my $me = $oicq->get_nickname($oicq->{Id}) || $oicq->{Id};    my $mm = $oicq->get_nickname($dstid) || $dstid;    my $msg = "对不起$mm, $me不在.你的话已记下来了:\n".substr($mesg, 0, 100);    $oicq->send_msg($dstid, $msg);    $autoreply->{$dstid} = time;    if (defined $ui) {        $ui->msg($oicq->{Id}, $dstid, time, "Auto-reply:\n$msg\n");    }    return 1;}sub get_online_friends {    my ($self) = @_;    my $plain = $self->{Data};    my $oicq = $self->{OICQ};    $oicq->desect($plain, ['H*', 'S_FLIST', 0, 1]);    my @list = ();    my $ui = $oicq->{UI};    my $info = $oicq->{Info};    for(my $i = 1; $i<length($plain); $i+=33) {        $oicq->desect($plain,                      ['N', 'Id', $i, 4],                      ['H*', 'S_FLIST', $i+4, 1],                      ['H*', 'IP', $i+5, 4],                      ['n', 'Port', $i+9, 2],                      ['H*', 'S_FLIST', $i+11, 1],                      ['H*', 'Mode', $i+12, 1],                      ['H*', 'Key', $i+13]);        my $fid =  unpack('N', substr($plain, $i, 4));        my $addr = $self->show_address(substr($plain, $i+5, 6));        my $mode = ord(substr($plain, $i+12, 1));        my $key  = substr($plain, $i+13, 20);        defined $info->{$fid} or $info->{$fid} = {};        $info->{$fid}->{Key} = $key;        $info->{$fid}->{Mode} = $mode;        $info->{$fid}->{Addr} = $addr if $addr =~/[1-9]/;        next unless defined $ui;        push @list, [$fid, $addr, $mode];    }    return unless defined $ui;    $ui->show_online_friends(\@list);    return;}sub recv_service_msg {    my ($self) = @_;    my $oicq = $self->{OICQ};    my ($code, $srcid, $myid, $mesg) = split(/$RS/, $self->{Data});    if (defined $oicq->{Socket}) {        $oicq->ack_service_msg($code, $srcid, $self->seq);    }    my $ui = $oicq->{UI};    if ($code eq "02") {        my $text = "$srcid asked for permission to contact you ($myid):\n$mesg";        $oicq->log_t($text);        if (defined $ui) {            $ui->beep;            my $ok = $ui->ask("$text\nDo you accept this request? [y/n] ");            defined $ok or return;            if ($ok =~ /^y/i) {                $oicq->accept_contact($srcid);                $ui->warn("Accepted contact request from $srcid\n");            } elsif ($ok =~ /^n/i) {                $oicq->reject_contact($srcid);                $ui->warn("Rejected contact request from $srcid\n");            } else {                $ui->warn("Ignored contact request from $srcid\n");            }        }        return;    }    return unless defined $ui;    if ($code eq "03") {        $ui->info("$srcid has accepted your contact request\n$mesg\n");    } elsif ($code eq "04") {        $ui->info("$srcid has rejected your contact request\n$mesg\n");    } else {        $ui->info("Code $code message from $srcid to $myid\n");        if ($srcid eq '10000') {            $oicq->{Trash} = "Code $code from $srcid to $myid:\n$mesg\n";        } else {            $ui->info("$mesg\n");        }    }    return;}sub search_users {    my ($self) = @_;    my $plain = $self->{Data};    my $oicq = $self->{OICQ};    my @list;    foreach my $line (split(/$RS/, $plain)) {        my @f = split(/$FS/, $line);        next unless defined $f[3];        $f[3] = $oicq->get_face($f[3]);        push @list, \@f;    }    my $ui = $oicq->{UI};    if (defined $ui) {        $ui->show_search_result(\@list);    }    return 1;}sub keep_alive {    my $self = shift;    my $oicq = $self->{OICQ};    my $plain = $self->{Data};    $oicq->{UserCount} = (split($RS, $plain))[2];    if ($oicq->{Debug} > 1) {        $self->default(@_);    }}sub add_contact_1 {    my ($self) = @_;    my $plain = $self->{Data};    my $oicq = $self->{OICQ};    my ($id, $reply) = split(/$RS/, $plain);    my $ui = $oicq->{UI};    unless (defined $ui) {        $oicq->log_t("Server reply to add_contact request by $id: $reply\n");        return;    }    $ui->info("Server reply to add_contact request by $id: $reply\n");    if ($reply =~ /^\d+$/ && $reply > 0) {        unless (defined $oicq->{ContactId}) {            $ui->error("ContactId was not set\n");            return;        }        my $mmid = $oicq->{ContactId};        $ui->warn("$mmid requires authentication message\n");        my $msg = $ui->ask("$mmid requires authentication message\n" .                           "Enter authentication message: ");        defined $msg or return 0;        chomp $msg;        $oicq->add_contact_2($msg);    }    1;}sub add_contact_2 {    my ($self) = @_;    my $oicq = $self->{OICQ};    return unless defined $oicq->{UI};    my $plain = $self->{Data};    my $ui = $oicq->{UI};    defined $ui && $ui->info("Server responded to add_contact_2: $plain\n");    1;}# get_friends_list provided by Chen Pengsub get_friends_list {    my ($self) = @_;    my $plain = $self->{Data};    my $oicq = $self->{OICQ};    my $flag = substr($plain, 0, 2);    my $p = 2;    my $len = length($plain);    while ($p < $len) {        my $fid = unpack('N', substr($plain, $p, 4));        $p += 4; # one 0x00 to seperate        my $face = $oicq->get_face(ord(substr($plain, $p+1, 1))); $p += 2;        my $age = ord(substr($plain, $p, 1)); $p += 1;        my $sex = ord(substr($plain, $p, 1)); $p += 1;        my $name_len = ord(substr($plain, $p, 1)); $p += 1;        my $nickname = substr($plain, $p, $name_len); $p += $name_len;        $oicq->{Info}->{$fid} = {} unless defined $oicq->{Info}->{$fid};        my $info =  $oicq->{Info}->{$fid};        $info->{Sex} = $sex;        $info->{Age} = $age;        $info->{Face} = $face;        $info->{Nickname} = $nickname;        $info->{Friend} = 1;    }    if ($flag eq "\xff\xff") {         my $ui = $oicq->{UI};         if (defined $ui) {             $ui->show_friends_list();         } else {             $oicq->log("get_friends_list ServerEvent not finished\n");         }    } else {        $oicq->get_friends_list($flag);    }    return 1;}sub show_address {    my ($self, $data) = @_;    my $ip = join('.', map(ord, split('', substr($data, 0, 4))));    my $port = unpack('n', substr($data, 4, 2));    return "$ip:$port";}sub recv_friend_status {    my ($self) = @_;    my $plain = $self->{Data};    my $oicq  = $self->{OICQ};    my $srcid = unpack('N', substr($plain,  0, 4));    my $dstid = unpack('N', substr($plain, -4, 4));    my $status = unpack('H*', substr($plain, 13));    my $addr = $self->show_address(substr($plain, 5, 6));    my $mode = ord(substr($plain, 12, 1));    defined $oicq->{Info}->{$srcid} or $oicq->{Info}->{$srcid} = {};    my $info = $oicq->{Info}->{$srcid};    $info->{Addr} = $addr if $addr =~ /[1-9]/;    $info->{Mode} = $mode;    $info->{Key}  = substr($plain, 13, 20);    my $ui = $oicq->{UI};    if (defined $ui) {        $ui->on_mode_change($srcid, $mode);    } else {        $oicq->log_t("$srcid changed mode to $mode");    }    return 1 unless $oicq->{Debug};    $oicq->log("Data decrypted by recv_friend_status:\n",               $oicq->hexdump($plain));    1;}sub set_mode { default(@_) }sub update_info { default(@_) }sub del_contact { default(@_) }sub forbid_contact { default(@_) }sub ack_service_msg { default(@_) }sub unknown { default(@_) }sub reg_new_id_1 { return }sub reg_new_id_2 { return }1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -