]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
[irssiq] remove irssiq.pl
authorbw1 <redacted>
Mon, 23 Dec 2019 22:29:28 +0000 (23:29 +0100)
committerbw1 <redacted>
Mon, 23 Dec 2019 22:29:28 +0000 (23:29 +0100)
_testing/config.yml
scripts/irssiq.pl [deleted file]

index a6adb3e461837265f27acdabfbbe105c7ca43379..8c4e9ddd66eb9f21f24bd47d0eac6f50990a3f55 100644 (file)
@@ -33,7 +33,6 @@ whitelist:
   - cap_sasl
   - idonkey
   - ircgallery
-  - irssiq
   - isdn
   - ixmmsa
   - l33tmusic
diff --git a/scripts/irssiq.pl b/scripts/irssiq.pl
deleted file mode 100644 (file)
index d29724c..0000000
+++ /dev/null
@@ -1,831 +0,0 @@
-#!/usr/bin/perl
-#
-# by Stefan "tommie" Tomanek
-#
-use strict;
-
-use vars qw($VERSION %IRSSI);
-$VERSION = "2003231101";
-%IRSSI = (
-    authors     => "Stefan 'tommie' Tomanek",
-    contact     => "stefan\@pico.ruhr.de",
-    name        => "IrssiQ",
-    description => "integrates ICQ instant-messaging into irssi",
-    license     => "GPLv2",
-    changed     => "$VERSION",
-    modules     => "Net::vICQ Data::Dumper",
-    sbitems     => "irssiq",
-    commands   => "irssiq"
-);
-
-use Irssi 20020324;
-use Irssi::TextUI;
-use Net::vICQ;
-use Data::Dumper;
-use vars qw($icq $timer $old_status %contacts @requested $want_connect);
-
-sub draw_box ($$$$) {
-    my ($title, $text, $footer, $colour) = @_;
-    my $box = '';
-    $box .= '%R,--[%n%9%U'.$title.'%U%9%R]%n'."\n";
-    foreach (split(/\n/, $text)) {
-        $box .= '%R|%n '.$_."\n";
-    }
-    $box .= '%R`--<%n'.$footer.'%R>->%n';
-    $box =~ s/%.//g unless $colour;
-    return $box;
-}
-
-sub show_help() {
-    my $help="IrssiQ $VERSION
-/irssiq
-    List contact list
-/irssiq connect
-    Connect to the ICQ network
-/irssiq disconnect
-    Disconnect from ICQ network
-/irssiq add <uin>
-    Add uin to contact list
-/irssiq del <uin>
-    Delete uin from contact list
-/irssiq auth <uin>
-    Authorize user to add your UIN to his contact list
-/irssiq info <uin1> <uin2>....
-    Retrieve information about the uins
-/irssiq invisible <uin>
-    Add or remove the UIN from your invisible list
-/irssiq visible <uin>
-    Add or remove the UIN from your visible list
-/irssiq hidden <uin>
-    Hide (or show) a uin in the statusbar
-/irssiq msg <uin>
-    Send a message to uin
-/irssiq query <uin>
-    Create a new query window with uin
-/irssiq email
-    Send an email to uin
-/irssiq status (away|online|na|occupied|dnd|invisible)
-    Change to the selected status
-/irssiq save
-    Save contact list to file
-/irssiq load
-    (Re-)Load contact list (reconnect afterwards)
-";      
-    my $text = '';
-    foreach (split(/\n/, $help)) {
-        $_ =~ s/^\/(.*)$/%9\/$1%9/;
-        $text .= $_."\n";
-    }
-    print CLIENTCRAP draw_box($IRSSI{name}, $text, "help", 1);
-}
-
-sub call_openurl ($) {
-    my ($url) = @_;
-    no strict "refs";
-    # check for a loaded openurl
-    if (defined %{ "Irssi::Script::openurl::" }) {
-        &{ "Irssi::Script::openurl::launch_url" }($url);
-    } else {
-        print CLIENTCRAP "%R>>%n Please install openurl.pl";
-    }
-}
-
-sub store_openurl ($$$) {
-    my ($uin, $text, $url) = @_;
-    $url =~ s/\n/ /g;
-    $text =~ s/\n/ /g;
-    no strict "refs";
-    if (defined %{ "Irssi::Script::openurl::" }) {
-       &{ "Irssi::Script::openurl::new_url" }(undef, "IrssiQ", $uin, $text, $url);
-    } else {
-       print CLIENTCRAP "%R>>%n Please install openurl.pl";
-    }
-}
-
-sub output ($) {
-    print CLIENTCRAP $_ foreach split(/\n/, $_[0]);
-}
-
-sub icq_connect {
-    my $uin = Irssi::settings_get_int('irssiq_uin');
-    my $password = Irssi::settings_get_str('irssiq_password');
-    $icq = Net::vICQ->new($uin, $password, 0);
-    #$icq->{_Hide_IP} = 0;
-    $icq->Add_Hook("Srv_Mes_Received", \&MessageHandler);
-    $icq->Add_Hook("Srv_Srv_Message", \&MessageHandler);
-    $icq->Add_Hook("Srv_BLM_Contact_Online", \&MessageHandler);
-    $icq->Add_Hook("Srv_BLM_Contact_Offline", \&MessageHandler);
-    $icq->{_Status} = 'Online';
-    my $err;
-    output "%R>>%n Trying to connect to ICQ server...";
-    {
-       $icq->{_Auto_Login} = 1;
-       open FOO, '>>/dev/null';
-       my $oldfh = select(FOO);
-       $icq->Connect();
-       if(!($err = $icq->GetError())) {
-           while(!$icq->{_LoggedIn} && !($err = $icq->GetError())) {
-               $icq->Execute_Once();
-           }
-       }
-       select($oldfh);
-    }
-    if(!$err) {
-        output "%R<<%n ..connected!";
-       #my ($details);
-       #$details->{Status} = 'Online';
-       #$icq->Send_Command("Cmd_GSC_Set_Status", $details);
-       add_uin($uin) unless $contacts{$uin};
-       send_contacts();
-       $timer = Irssi::timeout_add(2000, 'icq_cycle', undef);
-        return 1;
-    } else {
-        output "%R<<%n ..failed!";
-       $want_connect = 0;
-        my $s = $err;
-        chomp($s);
-        print("%R>>%n ".$s);
-        return 0;
-    }
-}
-
-sub write_to_log ($$$$) {
-    my ($who, $direction, $type, $text) = @_;
-    my $dir = Irssi::get_irssi_dir();
-    mkdir $dir."/irssiq/" unless (-e $dir."/irssiq/");
-    
-    my $data = $type." ".$direction." ".$who.":\n";
-    $data .= scalar(localtime())."\n";
-    $data .= $text."\n\n";
-
-    local *F;
-    open(F, '>>'.$dir."/irssiq/".$who);
-    print F $data;
-    close(F);
-}
-
-sub MessageHandler ($$) {
-    my ($icq, $details) = @_;
-    if (Irssi::settings_get_bool('irssiq_debug')) {
-       my $text;
-       foreach (keys %$details) {
-           my $content = $details->{$_};
-           no warnings;
-           #$content =~ s/\c.//g;
-           #$content =~ s/\pC//g;
-           $content =~ s/(?:(\n)|\pC)/$1/g;
-           $content =~ s/%/%%/g;
-           $text .=  $_." -> <".$content.">\n";
-       }
-       #print CLIENTCRAP $_." -> <".$details->{$_}.">" foreach keys %$details;
-       print CLIENTCRAP &draw_box('IrssiQ', $text, 'debug', 1);
-    }
-    my $type = $details->{MessageType};
-    if ($type eq 'text_message' || $type eq 'offline_text_message' ) {
-       my $text = $details->{text};
-       # FIXME unicode stuff?!
-       no warnings;
-       #$text =~ s/\c.//g;
-       #$text =~ s/\pC//g;
-       $text =~ s/(?:(\n)|\pC)/$1/g;
-       write_to_log($details->{Sender}, 'from', 'msg', $text);
-       $text =~ s/%/%%/g;
-       my $output = draw_box("IrssiQ", $text, "msg from ".get_nick($details->{Sender}), 1);
-       # autocancels if there is already a window
-       start_query($details->{Sender}) if Irssi::settings_get_bool('irssiq_auto_open_query');
-       my $win = Irssi::window_find_name('<IrssiQ-'.$details->{Sender}.'>');
-       if (ref $win) {
-           if (Irssi::settings_get_bool('irssiq_msg_border_in_query')) {
-               $win->print($output, MSGLEVEL_MSGS);
-           } else {
-               $win->print("<".get_nick($details->{Sender})."> ".$text, MSGLEVEL_MSGS);
-           }
-       } else {
-           print MSGS $_ foreach split(/\n/, $output);
-       }
-    } elsif ($type eq 'URL') {
-       write_to_log($details->{Sender}, 'from', 'URL', $details->{URL});
-       my $output = draw_box("IrssiQ", "%U".$details->{URL}."%U", "URL from ".get_nick($details->{Sender}), 1);
-       my $win = Irssi::window_find_name('<IrssiQ-'.$details->{Sender}.'>');
-       unless (ref $win) {
-           print MSGS $_ foreach split(/\n/, $output);
-       } else {
-           $win->print("<".get_nick($details->{Sender})."> ".$details->{URL}, MSGLEVEL_MSGS);
-       }
-       store_openurl($details->{Sender}, $details->{URL}, $details->{URL});
-    } elsif ($type eq 'status_change') {
-       if ($details->{Sender} == Irssi::settings_get_int('irssiq_uin')) {
-           unless ($contacts{$details->{Sender}}{status} eq $details->{Status}) {
-               output "%R<<%n Changed own status to '".$details->{Status}."'.";
-           }
-       }
-       $contacts{$details->{Sender}}{status} = $details->{Status};
-       Irssi::statusbar_items_redraw('irssiq');
-    } elsif ($type eq 'user_info_main') {
-       my $uin = shift(@requested);
-       if ($contacts{$uin}) {
-           foreach (keys %$details) {
-               next if (/Ref|Our_UIN|MessageType|SubMessageType/);
-               $contacts{$uin}{user_info_main}{$_} = $details->{$_};
-               $contacts{$uin}{user_info_main}{$_} =~ s/ /_/g if $_ eq 'Nickname';
-           }
-       }
-       show_short_info($uin, $details);
-       Irssi::statusbar_items_redraw('irssiq');
-       next_info();
-    } elsif ($type eq 'user_info_not_found') {
-       my $uin = shift(@requested);
-       output "%R>>%n Information about UIN ".$uin." not found";
-       next_info();
-    } elsif ($type eq 'add_message') {
-       output draw_box("IrssiQ", $details->{Sender}." added you to his/her contact list", "added by ".$details->{Sender}, 1);
-    } elsif ($type eq 'auth_request') {
-       get_userinfo($details->{Sender});
-       output draw_box("IrssiQ", $details->{reason}, "auth-request from ".$details->{Sender}, 1);
-    } elsif ($type eq 'Invalid tagged message') {
-       # Webmessage
-       my $string = $details->{TaggedDataString};
-       $string =~ s/\pC//g;
-       $string =~ /\d+\.\d+\.\d+\.\d+(.*)/;
-       write_to_log("Webmessage", 'from', 'msg', $1);
-       print CLIENTCRAP &draw_box("IrssiQ", $1, "WebMessage", 1);
-    }
-}
-
-sub next_info {
-    return unless defined $requested[0];
-    my $uin = $requested[0];
-    output "%B>>%n Requesting user information for UIN #$uin";
-    my %details = (
-        MessageType => "Get_WP_Info",
-        TargetUIN => $uin,
-    );
-    $icq->Send_Command("Cmd_Srv_Message", \%details);
-}
-
-sub get_userinfo ($) {
-    my ($uin) = @_;
-    push @requested, $uin;
-    next_info if (scalar(@requested) == 1);
-}
-
-sub icq_cycle {
-    return unless ($icq);
-    $icq->Send_Keep_Alive();
-    $icq->Execute_Once();
-    unless ($icq->{_Connected}) {
-        Irssi::timeout_remove($timer);
-       output "%R>>%n IrssiQ disconnected";
-       $contacts{$_}{status} = 'Offline' foreach keys %contacts;
-       if (Irssi::settings_get_bool('irssiq_auto_reconnect') && $want_connect) {
-           icq_connect();
-       }
-    }
-}
-
-sub send_message ($$$) {
-    my ($icq, $uin, $text) = @_;
-    my $details = { uin => $uin,
-                    MessageType => 'text',
-                    text =>  $text
-    };
-    write_to_log($uin, 'to', 'msg', $text);
-    $icq->Send_Command("Cmd_Send_Message", $details);
-    my $win = Irssi::window_find_name('<IrssiQ-'.$uin.'>');
-    my $output = draw_box("IrssiQ", $text, "msg to ".get_nick($uin), 1);
-    unless (ref $win) {
-       print CLIENTCRAP $_ foreach split(/\n/, $output);
-    } else {
-       my $my_uin = Irssi::settings_get_int('irssiq_uin');
-       $win->print("<".get_nick($my_uin)."> ".$text, MSGLEVEL_CLIENTCRAP);
-    }
-}
-
-sub array2table {
-    my (@array) = @_;
-    my @width;
-    foreach my $line (@array) {
-        for (0..scalar(@$line)) {
-            my $l = $line->[$_];
-            $l =~ s/%[^%]//g;
-            $l =~ s/%%/%/g;
-            $width[$_] = length($l) if $width[$_]<length($l);
-        }
-    }   
-    my $text;
-    foreach my $line (@array) {
-        for (0..scalar(@$line)) {
-            my $l = $line->[$_];
-            $text .= $line->[$_];
-            $l =~ s/%[^%]//g;
-            $l =~ s/%%/%/g;
-            $text .= " "x($width[$_]-length($l)+1);
-        }
-        $text .= "\n";
-    }
-    return $text;
-}
-
-
-sub list_contacts {
-    my $text;
-    my @array;
-    my $my_uin = Irssi::settings_get_int('irssiq_uin');
-    foreach (sort {$contacts{$a}{status} cmp $contacts{$b}{status}} keys %contacts) {
-       my @line;
-       next if $_ eq $my_uin;
-       my $status = $contacts{$_}{status};
-       next if ($status eq 'Offline' && not Irssi::settings_get_bool('irssiq_list_show_offline'));
-       if ($status eq "Online") {
-           push @line, "%go%n";
-       } else {
-           push @line, "%ro%n";
-       }
-       push @line, $status;
-       if ($contacts{$_}{user_info_main} && $contacts{$_}{user_info_main}{Nickname}) {
-           push @line, '['.$contacts{$_}{user_info_main}{Nickname}.']';
-       } else {
-           push @line, '';
-       }
-       push @line, $_;
-       if ($contacts{$_}{invisible}) {
-           push @line, '%B<Inv>%n';
-       } else {
-           push @line, "";
-       }
-       if ($contacts{$_}{visible}) {
-            push @line, '%G<Vis>%n';
-        } else {
-            push @line, "";
-        }
-       if ($contacts{$_}{hide_in_sb}) {
-           push @line, '%B<Hidden>%n';
-       } else {
-           push @line, "";
-       }
-       push @array, \@line;
-    }
-    my %table = (Online           => '%G==Online==%n',
-                Away             => '%R===Away===%n',
-                'Do Not Disturb' => '%B===DnD====%n',
-                Occupied         => '%Y=Occupied=%n',
-                Invisible        => '%C===Inv====%n',
-                'N/A'            => '%Y===N/A====%n',
-                Offline          => '%R=Offline==%n'
-                );
-    $text = array2table(@array);
-    $text .= $table{$contacts{$my_uin}{status}}."\n";
-    output draw_box('IrssiQ', $text, 'contacts', 1);
-}
-
-sub add_uin ($) {
-    my ($uin) = @_;
-    $contacts{$uin} = { status => 'Offline' } unless defined $contacts{$uin};
-    Irssi::statusbar_items_redraw('irssiq');
-    get_userinfo($uin) if ($icq && $icq->{_Connected});
-}
-
-sub del_uin ($) {
-    my ($uin) = @_;
-    return unless defined $contacts{$uin};
-    delete $contacts{$uin};
-}
-
-sub send_contacts {
-    my ($details, $details2, $details3);
-    my @uins;
-    my @inv;
-    my @vis;
-    foreach (keys(%contacts)) {
-       push @uins, $_;
-       push @inv, $_ if $contacts{$_}{invisible}; 
-       push @vis, $_ if $contacts{$_}{visible}; 
-    }
-    $details->{ContactList} = \@uins;
-    $icq->Send_Command("Cmd_Add_ContactList", $details);
-    $icq->Send_Command("Cmd_CTL_UploadList", $details);
-    $details2->{InVisibleList} = \@inv;
-    $details3->{VisibleList} = \@vis;
-    $icq->Send_Command("Cmd_BOS_Add_InVisibleList", $details2) if @inv;
-    $icq->Send_Command("Cmd_BOS_Add_VisibleList", $details3) if @vis;
-}
-
-sub save_contacts {
-    my $dir = Irssi::get_irssi_dir();
-    my $dumper = Data::Dumper->new([\%contacts], ['contacts']);
-    $dumper->Purity(1)->Deepcopy(1);
-    my $data = $dumper->Dump;
-    local *F;
-    open(F, '>'.$dir.'/irssiq_contacts');
-    print F $data;
-    close(F);
-    output "%R>>%n IrssiQ contacts saved";
-}
-
-sub load_contacts {
-    my $text;
-    my $dir = Irssi::get_irssi_dir();
-    return unless (-e $dir.'/irssiq_contacts');
-    local *F;
-    open F, "<".$dir.'/irssiq_contacts';
-    $text .= $_ foreach (<F>);
-    close(F);
-    if ($text) {
-       no strict;
-       my %friends = %{ eval "$text" };
-       foreach (keys %friends) {
-           next if defined $contacts{$_};
-           $contacts{$_} = $friends{$_};
-           $contacts{$_}{status} = 'Offline';
-       }
-    }
-}
-
-sub show_short_info ($$) {
-    my ($uin, $details) = @_;
-    my $text = "== ".$details->{Nickname}." ==\n";
-    $text .= "Name : ".$details->{Firstname}." ".$details->{Lastname}."\n";
-    $text .= "eMail: ".$details->{Email}."\n";
-    output draw_box('IrssiQ', $text, $uin, 1);
-}
-
-sub set_status ($) {
-    my ($status) = @_;
-    $status =~ s/ /_/g;
-    my %table = (online    => 'Online',
-                 away      => 'Away',
-                na        => 'Not_Available',
-                occupied  => 'Occupied',
-                dnd       => 'Do_Not_Disturb',
-                invisible => 'Invisible',
-                ffc       => 'Free_For_Chat'
-                );
-    my %options = %table;
-    $options{'N/A'} = 'Not_Available';
-    $options{ $table{$_}  } = $table{$_} foreach keys %table;
-    unless (defined $options{$status}) {
-       output "%R>>%n '".$status."' is an invalid status";
-       output "%R>>%n Valid options are: ".join(" ", keys(%table));
-       return;
-    }
-    my ($details);
-    $details->{Status} = $options{$status};
-    $icq->Send_Command("Cmd_GSC_Set_Status", $details);
-}
-
-sub sig_away ($) {
-    my ($server) = @_;
-    return unless ($icq && $icq->{_Connected});
-    my $away_status = Irssi::settings_get_str('irssiq_away_status');
-    if ($server->{usermode_away}) {
-        my $uin = Irssi::settings_get_str('irssiq_uin');
-        $old_status = $contacts{$uin}{status};
-       set_status($away_status);
-    } else {
-       set_status($old_status);
-    }
-}
-
-sub sb_show ($$) {
-    my ($item, $get_size_only) = @_;
-    my $line = "";
-    my %users;
-    my $more = 0;
-    foreach my $uin (sort {$contacts{$a}{status} cmp $contacts{$b}{status}} keys %contacts) {
-       next if $uin eq Irssi::settings_get_str('irssiq_uin');
-       my $status = $contacts{$uin}{status};
-       next if $status eq '';
-       next if ($status eq 'Online' && not Irssi::settings_get_bool('irssiq_statusbar_show_online'));
-       next if ($status eq 'Offline' && not Irssi::settings_get_bool('irssiq_statusbar_show_offline'));
-       next if ($status eq 'Away' && not Irssi::settings_get_bool('irssiq_statusbar_show_away'));
-       next if ($status eq 'Do Not Disturb' && not Irssi::settings_get_bool('irssiq_statusbar_show_dnd'));
-       next if ($status eq 'Occupied' && not Irssi::settings_get_bool('irssiq_statusbar_show_occupied'));
-       next if ($status eq 'Invisible' && not Irssi::settings_get_bool('irssiq_statusbar_show_invisible'));
-       next if ($status eq 'N/A' && not Irssi::settings_get_bool('irssiq_statusbar_show_not_available'));
-       if ($contacts{$uin}{hide_in_sb}) { $more = 1; next; }
-       # FIXME Irssi bug?!
-       my %table = (Online           => '%gO%n',
-                   Away             => '%rA%n',
-                   'Do Not Disturb' => '%bD%n',
-                   Occupied         => '%yOc%n',
-                   Invisible        => '%cI%n',
-                   'N/A'            => '%yN%n',
-                   'Offline'        => '%RO%n'
-                   );
-       unless (Irssi::settings_get_bool('irssiq_statusbar_compact')) {
-           $line .= '<';
-           if (defined $table{$status}) {
-               $line .= $table{$status};
-           } else {
-               $line .= substr($status, 0, 1);
-           }
-           $line .= '%bI%n' if $contacts{$uin}{invisible};
-           $line .= '%gV%n' if $contacts{$uin}{visible};
-           $line .= '>';
-           if ($contacts{$uin}{user_info_main} && $contacts{$uin}{user_info_main}{Nickname}) {
-               $line .= $contacts{$uin}{user_info_main}{Nickname}." ";
-           } else {
-               $line .= $uin." ";
-           }
-       } else {
-           push @{ $users{$table{$status}} }, $uin;
-       }
-    }
-    if (Irssi::settings_get_bool('irssiq_statusbar_compact')) {
-       foreach (keys %users) {
-           $line .= '<'.$_;
-           foreach my $uin (@{ $users{$_} }) {
-               $line .= ' '.get_nick($uin);
-           }
-           $line .= '>';
-       }
-    }
-    my %table = (Online           => '%G==Online==%n',
-                 Away             => '%R===Away===%n',
-                 'Do Not Disturb' => '%B===DnD====%n',
-                 Occupied         => '%Y=Occupied=%n',
-                 Invisible        => '%C===Inv====%n',
-                 'N/A'            => '%Y===N/A====%n',
-                Offline          => '%R=Offline==%n'
-                 );
-    if (Irssi::settings_get_bool('irssiq_statusbar_short_status')) {
-       %table = (Online           => '%G(On)%n',
-                 Away             => '%R(Aw)%n',
-                 'Do Not Disturb' => '%B(DnD)%n',
-                 Occupied         => '%Y(Inv)%n',
-                 'N/A'            => '%Y(NA)%n',
-                 Offline          => '%R(Off)%n'
-                );
-    }
-    my $my_uin = Irssi::settings_get_int('irssiq_uin');
-    $line .= '...' if $more;
-    $line .= $table{$contacts{$my_uin}{status}};
-
-    my $format = "{sb ".$line."}";
-    $item->{min_size} = $item->{max_size} = length($line);
-    $item->default_handler($get_size_only, $format, 0, 1);
-}
-
-sub get_uin ($) {
-    my ($input) = @_;
-    return $input if $input =~ /^[0-9]+$/;
-    
-    foreach (keys %contacts) {
-       if ($contacts{$_}{user_info_main} && $contacts{$_}{user_info_main}{Nickname}) {
-           return $_ if lc($contacts{$_}{user_info_main}{Nickname}) eq lc($input);
-       }
-    }
-    return undef;
-}
-
-sub get_nick ($) {
-    my ($uin) = @_;
-    if ($contacts{$uin} && $contacts{$uin}{user_info_main}) {
-       return $contacts{$uin}{user_info_main}{Nickname};
-    }
-    # Fallback
-    return $uin;
-}
-
-sub send_auth ($) {
-    my ($uin) = @_;
-    return unless $uin =~ /^[0-9]+$/;
-    my ($details);
-    $details->{uin} = $uin;
-    $icq->Send_Command("Cmd_Authorize", $details);
-    output "%R>>%n Authorization sent to ".$uin;
-}
-
-sub start_query ($) {
-    my ($uin) = @_;
-    return if ref Irssi::window_find_name('<IrssiQ-'.$uin.'>');
-    Irssi::command("window new hide");
-    my $win = Irssi::active_win;
-    $win->set_name('<IrssiQ-'.$uin.'>');
-    $win->set_history('<IrssiQ-'.$uin.'>');
-    $win->print('Starting IrssiQ query with '.get_nick($uin).' ('.$uin.')');
-}
-
-sub sig_send_text ($) {
-    my ($text, $foo1, $foo2) = @_;
-    my $win = Irssi::active_win;
-    return unless (ref $win && $win->{name} =~ /<IrssiQ-(\d+)>/);
-    my $uin = $1;
-    if ($icq && $icq->{_Connected}) {
-       send_message($icq, $uin, $text);
-    } else {
-       $win->print("%R>>%n You are not connected to ICQ", MSGLEVEL_CLIENTCRAP);
-    }
-}
-
-sub send_url ($$$) {
-    my ($uin, $url, $description) = @_;
-    return unless ($icq && $icq->{_Connected});
-    my %details = ( uin => $uin,
-                   MessageType => 'url',
-                   URL =>  $url,
-                   Description => $description
-                   );
-    write_to_log($uin, 'to', 'url', $url."\n".$description);
-    $icq->Send_Command("Cmd_Send_Message", \%details);
-    my $win = Irssi::window_find_name('<IrssiQ-'.$uin.'>');
-    my $output = draw_box("IrssiQ", $url, "url to ".get_nick($uin), 1);
-    unless (ref $win) {
-        output $output;
-    } else {
-       my $my_uin = Irssi::settings_get_int('irssiq_uin');
-       $win->print("<".get_nick($my_uin)."> ".$url, MSGLEVEL_CRAP);
-    }
-
-}
-# calles by scriptassist on reload
-sub pre_unload {
-    save_contacts();
-    return unless $icq->{_Connected};
-    $icq->Disconnect() if ($icq && $icq->{_Connected});
-    while ($icq->{_Connected}) {
-       $icq->Execute_Once();
-    }
-    $contacts{$_}{status} = 'Offline' foreach keys %contacts;
-    output "%R>>%n IrssiQ disconnected";
-}
-
-sub sig_complete_word ($$$$$) {
-    my ($list, $window, $word, $linestart, $want_space) = @_;
-    return unless $linestart =~ /^.irssiq (\w+)/;
-    my @newlist;
-    if ($1 eq 'status') {
-       foreach (('online', 'away', 'na', 'occupied', 'dnd', 'invisible', 'ffc')) {
-           push @newlist, $_ if /^(\Q$word\E.*)?$/i;
-       }
-    } else {
-       foreach (keys %contacts) {
-           push @newlist, $_ if /^(\Q$word\E.*)?$/;
-           if ($contacts{$_}{user_info_main} && $contacts{$_}{user_info_main}{Nickname}) {
-               push @newlist, $contacts{$_}{user_info_main}{Nickname} if $contacts{$_}{user_info_main}{Nickname} =~ /^(\Q$word\E.*)?$/i;
-           }
-       }
-    }
-    $want_space = 0;
-    push @$list, $_ foreach @newlist;
-
-}
-
-sub toggle_inv_list ($) {
-    my ($uin) = @_;
-    return unless defined $contacts{$uin};
-    $contacts{$uin}{invisible} = not $contacts{$uin}{invisible};
-    my ($details);
-    $details->{InVisibleList} = [$uin];
-    if ($contacts{$uin}{invisible}) {
-       $icq->Send_Command("Cmd_BOS_Add_InVisibleList", $details) if $icq->{_Connected};
-       output "%B>>%n You are now invisible for ".get_nick($uin)." (".$uin.")";
-    } else {
-       $icq->Send_Command("Cmd_BOS_Remove_InVisibleList", $details) if $icq->{_Connected};
-       output "%B>>%n You are no longer invisible for ".get_nick($uin)." (".$uin.")";
-    }
-}
-
-sub toggle_vis_list ($) {
-    my ($uin) = @_;
-    return unless defined $contacts{$uin};
-    $contacts{$uin}{visible} = not $contacts{$uin}{visible};
-    my ($details);
-    $details->{VisibleList} = [$uin];
-    if ($contacts{$uin}{visible}) {
-        $icq->Send_Command("Cmd_BOS_Add_VisibleList", $details) if $icq->{_Connected};
-        output "%B>>%n You are now visible for ".get_nick($uin)." (".$uin.")";
-    } else {
-        $icq->Send_Command("Cmd_BOS_Remove_VisibleList", $details) if $icq->{_Connected};
-        output "%B>>%n You are no longer visible for ".get_nick($uin)." (".$uin.")";
-    }
-}
-
-sub toggle_hidden ($) {
-    my ($uin) = @_;
-    return unless defined $contacts{$uin};
-    $contacts{$uin}{hide_in_sb} = not $contacts{$uin}{hide_in_sb};
-    if ($contacts{$uin}{hide_in_sb}) {
-        output "%B>>%n ".get_nick($uin)." (".$uin.") is now hidden";
-    } else {
-        output "%B>>%n ".get_nick($uin)." (".$uin.") is no longer hidden";
-    }
-    Irssi::statusbar_items_redraw('irssiq');
-}       
-
-sub cmd_irssiq ($$$) {
-    my ($args, $server, $witem) = @_;
-    my @arg = split / +/, $args;
-    if (scalar(@arg) == 0) {
-       list_contacts();
-    } elsif ($arg[0] eq 'connect') {
-       $want_connect = 1;
-       icq_connect();
-    } elsif ($arg[0] eq 'disconnect') {
-       $want_connect = 0;
-       $icq->Disconnect() if ($icq && $icq->{_Connected});
-    } elsif ($arg[0] eq 'msg' && defined $arg[1] && defined $arg[2]) {
-       my $uin = get_uin($arg[1]);
-       return unless $uin;
-       shift @arg;
-       shift @arg;
-       send_message($icq, $uin, join(" ", @arg));
-    } elsif ($arg[0] eq 'url' && defined $arg[1] && defined $arg[2]) {
-       my $uin = get_uin($arg[1]);
-       return unless $uin;
-       my $url = $arg[2];
-       shift @arg;
-       shift @arg;
-       send_url($uin, $url, join(" ", @arg));
-    } elsif ($arg[0] eq 'auth' && defined $arg[1]) {
-       send_auth($arg[1]) if ($icq && $icq->{_Connected});
-    } elsif ($arg[0] eq 'email' && defined $arg[1]) {
-       my $uin = get_uin($arg[1]);
-       return unless $uin;
-       if ($contacts{$uin} && $contacts{$uin}{user_info_main}) {
-           call_openurl($contacts{$uin}{user_info_main}{Email}) if $contacts{$uin}{user_info_main}{Email};
-       }
-    } elsif ($arg[0] eq 'add' && defined $arg[1]) {
-       shift @arg;
-       foreach (@arg) {
-           next unless $_ =~ /^[0-9]+$/;
-           add_uin($_);
-           output "%B>>%n Added UIN ".$_." to contact list";
-       }
-       send_contacts() if ($icq && $icq->{_Connected});
-    } elsif ($arg[0] eq 'del' && defined $arg[1]) {
-       shift @arg;
-       foreach (@arg) {
-           next unless $_ =~ /^[0-9]+$/;
-           del_uin($_);
-           output "%B>>%n Removed UIN ".$_." from contact list";
-       }
-       send_contacts() if ($icq && $icq->{_Connected});
-    } elsif ($arg[0] eq 'save') {
-       save_contacts();
-    } elsif ($arg[0] eq 'load') {
-       load_contacts();
-       send_contacts if ($icq && $icq->{_Connected});
-    } elsif ($arg[0] eq 'info') {
-       shift @arg;
-       foreach (@arg) {
-           my $uin = get_uin($_);
-           get_userinfo($uin) if $uin;
-       }
-    } elsif ($arg[0] eq 'status' && defined $arg[1]) {
-       set_status($arg[1]) if ($icq && $icq->{_Connected});
-    } elsif ($arg[0] eq 'query' && defined $arg[1]) {
-       my $uin = get_uin($arg[1]);
-       start_query($uin) if $uin;
-    } elsif ($arg[0] eq 'invisible') {
-       my $uin = get_uin($arg[1]);
-       toggle_inv_list($uin);
-    } elsif ($arg[0] eq 'visible') {
-        my $uin = get_uin($arg[1]);
-        toggle_vis_list($uin);
-    } elsif ($arg[0] eq 'hidden') {
-       my $uin = get_uin($arg[1]);
-       toggle_hidden($uin);
-    } elsif ($arg[0] eq 'help') {
-       show_help();
-    }
-}
-
-Irssi::settings_add_int($IRSSI{name}, 'irssiq_uin', '');
-Irssi::settings_add_str($IRSSI{name}, 'irssiq_password', '');
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_debug', 0);
-
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_show_online', 1);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_show_offline', 0);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_show_away', 1);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_show_dnd', 1);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_show_occupied', 1);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_show_invisible', 1);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_show_not_available', 1);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_short_status', 0);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_list_show_offline', 1);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_statusbar_compact', 0);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_auto_open_query', 0);
-
-Irssi::settings_add_str($IRSSI{name}, 'irssiq_away_status', 'away');
-
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_msg_border_in_query', 0);
-Irssi::settings_add_bool($IRSSI{name}, 'irssiq_auto_reconnect', 1);
-
-Irssi::signal_add_first('complete word', \&sig_complete_word);
-Irssi::signal_add('setup saved', \&save_contacts);
-Irssi::signal_add('away mode changed', \&sig_away);
-Irssi::signal_add('send text', \&sig_send_text);
-
-Irssi::statusbar_item_register('irssiq', 0, 'sb_show');
-
-Irssi::command_bind('irssiq', \&cmd_irssiq);
-
-foreach my $cmd ('help', 'connect', 'disconnect', 'msg', 'auth', 'email', 'save', 'load', 'add', 'del', 'info', 'status', 'query', 'url', 'invisible', 'visible', 'hidden' ) {
-Irssi::command_bind('irssiq '.$cmd => sub {
-                   cmd_scripassist("$cmd ".$_[0], $_[1], $_[2]); });
-}
-
-load_contacts();
-
-print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded: /irssiq help for help';
git clone https://git.99rst.org/PROJECT