From: bw1 Date: Mon, 23 Dec 2019 22:29:28 +0000 (+0100) Subject: [irssiq] remove irssiq.pl X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=f2326729b57110510b2c9ef2c0d2f54a567a7989;p=irssi-scripts.irssi.org.git [irssiq] remove irssiq.pl --- diff --git a/_testing/config.yml b/_testing/config.yml index a6adb3e..8c4e9dd 100644 --- a/_testing/config.yml +++ b/_testing/config.yml @@ -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 index d29724c..0000000 --- a/scripts/irssiq.pl +++ /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 - Add uin to contact list -/irssiq del - Delete uin from contact list -/irssiq auth - Authorize user to add your UIN to his contact list -/irssiq info .... - Retrieve information about the uins -/irssiq invisible - Add or remove the UIN from your invisible list -/irssiq visible - Add or remove the UIN from your visible list -/irssiq hidden - Hide (or show) a uin in the statusbar -/irssiq msg - Send a message to uin -/irssiq query - 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('{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('{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(''); - 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[$_][$_]; - $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%n'; - } else { - push @line, ""; - } - if ($contacts{$_}{visible}) { - push @line, '%G%n'; - } else { - push @line, ""; - } - if ($contacts{$_}{hide_in_sb}) { - push @line, '%B%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 (); - 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(''); - Irssi::command("window new hide"); - my $win = Irssi::active_win; - $win->set_name(''); - $win->set_history(''); - $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} =~ //); - 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(''); - 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';