Wie kann ich überprüfen, ob ein Benutzer mit NickServ mit POE :: Component :: IRC :: Staat in Perl authentifiziert ist?

StackOverflow https://stackoverflow.com/questions/1897335

  •  19-09-2019
  •  | 
  •  

Frage

Ich versuche, zu testen, ob ein Benutzer auf FreeNode registriert ist. nick_info () scheint nicht Informationen über diese zurück, so möchte ich IRC- $ verwenden> Ausbeute (whois => $ nick); und dann greift das irc_whois Ereignis Antwort. Das Problem ist, dass ich bis dieses Ereignis warten soll abgefeuert, so habe ich eine globale Variable $ whois_result und schrieb ein Unter wie folgt aus:

sub whois {
    my $nick = $_[0];
    $whois_result = 0;
    $irc->yield(whois => $nick);
    while($whois_result == 0) { }
    return $whois_result;
}

mit dem irc_whois Handler suchen, wie:

sub on_whois {
    $whois_result = $_[ARG0];
    print "DEBUG: irc_whois fired.\n";
}

Leider kann das Ereignis nicht ausgelöst, während die Schleife läuft so dies hängt. Ich bin sicher, es gibt einen besseren Weg, dies zu tun, aber ich bin nicht vertraut genug mit dieser Art von Programmierung zu kennen. Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Folgendes gilt für FreeNode mindestens (oder jeden Server die Identifizierung msg-Funktion unterstützen).

Wenn Sie auf eine Nachricht reagieren (irc_msg, irc_public oder irc_ctcp_action) von einem Benutzer, können Sie sagen, ob er durch einen Blick auf das dritte Argument ($_[ARG3]) vorgesehen, um den Ereignishandler zu NickServ identifiziert hat. Es wird richtig sein, wenn der Benutzer identifiziert hat, andernfalls false.

Andere Tipps

Auf der Unter für Staaten in POE ... Sie müssen sich ergeben oder in einem anderen Staat zu nennen.

Auch wenn Sie Daten aus dem IRC-Befehl haben, in einem anderen Zustand ergibt, sie zu verarbeiten.

_start    - Starten Sie einen Timer, usw. Timer    - Ausbeute on_whois

on_whois    - geführt ist    - Set-Daten    - Ausbeute auf die nächste Timer

_stop    Töten Sie den Timer -    - die Daten spülen

Ich betreibe einen Bot auf Freenode und löste die Ausgabe von Nickserv den Befehl zu fragen: ACC [nick] *

Nickserv wird dann mit einer Bekanntmachung im Format antworten: [Nickname] -> [registerd nickservname] ACC [level]

Wo Stufe 3 bedeutet, dass der Benutzer zu nickserv identifiziert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top