Pidgin + IrssiNotifier

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Pidgin + IrssiNotifier
Hallo alle zusammen,
der Betreff sagt eigentlich schon das meiste aus: Ich würde gerne den IrssiNotifier (https://irssinotifier.appspot.com/) etwas zweckendfremden und auch für mein Pidgin mit benutzen.

Ich hab mal das wesentliche was man für die Benachrichtigung braucht aus dem Perl-Skript raus kopiert. das funktioniert auch soweit:

use strict;
use IPC::Open2 qw(open2);
use POSIX;

sub send_notification {
    my $api_token = "API-Token";
    
    my $VERSION = 13;
    my $msg = "Neue Nachricht";
    my $lastNick = "pidgin";
    my $lastTarget = "pidgin";    

    my $encryption_password = "hackme";
    my $lastMsg    = encrypt($msg);
    $lastNick   = encrypt($lastNick);
    $lastTarget = encrypt($lastTarget);

    my $data = "--post-data=apiToken=$api_token\\&message=$lastMsg\\&channel=$lastTarget\\&nick=$lastNick\\&version=$VERSION";
    my $result = `wget --tries=1 --timeout=5 --no-check-certificate -qO- /dev/null $data https://irssinotifier.appspot.com/API/Message`;
    if ($? != 0) {
        # Something went wrong, might be network error or authorization issue. Probably no need to alert user, though.
        # Irssi::print("IrssiNotifier: Sending hilight to server failed, check http://irssinotifier.appspot.com for updates");
        return;
    }
    
    if (length($result) > 0) {
        print "$result";
    }
}

sub encrypt {
    my ($text) = @_ ? shift : $_;
    
    local $ENV{PASS} = "hackme";
    my $pid = open2 my $out, my $in, qw(
        openssl enc -aes-128-cbc -salt -base64 -A -pass env:PASS
    );

    print $in "$text ";
    close $in;
	
	my $tmp = $/;
    undef $/;    # read full output at once
    my $result = readline $out;
    waitpid $pid, 0;
	$/ = $tmp;

    $result =~ tr[+/][-_];
    $result =~ s/=//g;
    return $result;
}


send_notification();

Es gibt für Pidgin Plugins, mit denen kann man, wenn man angeschrieben wird, ein Programm ausführen lassen (https://developer.pidgin.im/wiki/ThirdPartyPlugins#Notifications). Soweit ich das sehe kann ich dem Programm, dass ich ausführe aber keine “Parameter” mit übergeben, ich würde ihm gerne den Namen des Buddys und die Nachricht übergeben. (Ich bilde mir ein sowas schonmal gesehen zu haben, aber hab nichts gefunden auch mit Google nicht -.-)
Ich kann leider kein C/C++ und in Perl verstehe ich ganz grob was ich tue.

Meine Frage/Problem kurz zusammengefasst: Bekomme ich iwie aus Pidgin raus wer mich angeschrieben hat und was er mir geschrieben hat und kann ich das iwie in den IrssiNotifier bzw. den Auszug hier rein füttern, damit ich am Handy benachrichtigt werde, wenn ich im Pidgin angeschrieben wurde? Ein Plugin, dass das ohne Umwege über ein externes Perl Programm realisiert wäre natürlich DIE Lösung.
(PS: Ja ich kenn BitlBee und nein, es sagt mir nicht so unbedingt zu. Nur um dem vorweg zu greifen.)

Vielen Dank schonmal
Liebe Grüße
handy


Das geht mit Dbus.


Hallo
ich hab jetzt eine Lösung, die auch schon ziemlich gut funktioniert: Auf Basis von https://code.google.com/p/pidgin-knotifications/. In das Perl Skript hab ich die beiden Methoden vom IrssiNotifier reingebastelt, funktioniert soweit auch, jetzt hab ich nur noch folgendes Problem:

    local $ENV{PASS} = "hackme";
    
    my $pid = open2 my $out, my $in, qw(
        openssl enc -aes-128-cbc -salt -base64 -A -pass env:PASS
    );

Hier klappt die Übergabe des Passworts nicht. Kann mir da jemand helfen? (Mit password:hackme funktioniert es, aber ich würde das Passwort gerne als Variable setzen.)

EDIT:
Fehler:

Can't read environment variable pass
Error getting password

Update: Jetzt geht es
Hier mal meine erste funktionierende Version:

https://handy.libra.uberspace.de/PushNotifier/pidgin-irssinotifier-0.1a.pl

Ja ich weiß, dass ist noch alles ziemlich hässlich und zusammen kopiert, aber für’s erste geht es. HAPPY

1 „Gefällt mir“

Tolle Sache, und die Lösung, das Passwort über STDIN zu schicken, ist auch die einzig saubere. Sonst könnte man das Passwort leicht über die Kommandozeile erspähen. Im Übrigen verstehe ich nicht, wieso du das über eine Environment-Variable abwickeln wolltest, anstelle die Perl-Variable einfach direkt in den command line string einzubauen.


Die Environment-Variable war noch ein relikt aus dem Perlskript für irssi, aber nachdem ich dann in der man für openssl gelesen habe, dass man das auch über stdin rein schmeißen kann empfand ich das als die sauberste Lösung.


Jetzt wäre es noch ganz schön, wenn ich nur benachrichtigt werde, wenn ich abwesend bin. Hab bis dato noch nichts vernünftiges in der Pidgin API gefunden um den aktuellen Status vernünftig auszulesen. Hat da jemand eine Idee?


$ purple-remote getstatus

Edit: [m]PurpleSavedstatusGetCurrent()[/m] ist die entsprechende Funktion, die dabei aufgerufen wird.


Hallo alle zusammen,
gibt jetzt eine neue Version: https://handy.libra.uberspace.de/PushNotifier/pidgin-irssinotifier-0.2a.pl

Man kann sich jetzt entscheiden, ob man jedesmal eine Benachrichtigung bekommen möchte, oder nur wenn man abwesend ist.

Grüße Hendrik

1 „Gefällt mir“