Come posso controllare se un utente è autenticato con NickServ usando POE :: :: Componente IRC :: Stato in Perl?

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

  •  19-09-2019
  •  | 
  •  

Domanda

Sto cercando di verificare se un utente è registrato su freenode. nick_info () non sembra per restituire informazioni su questo, quindi voglio usare $ in stile IRC> yield (whois => $ nick); e poi prendete la risposta della manifestazione irc_whois. Il problema è che voglio aspettare fino a quando viene licenziato questo evento, così ho creato un $ whois_result variabile globale e ha scritto un sub in questo modo:

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

con il gestore irc_whois cercando come:

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

Purtroppo, l'evento non può sparare mentre il ciclo è in esecuzione in modo che questa si blocca. Sono sicuro che c'è un modo migliore per fare questo, ma io non sono abbastanza familiarità con questo tipo di programmazione di sapere. Qualsiasi aiuto sarebbe molto apprezzato.

È stato utile?

Soluzione

Quanto segue si applica FreeNode almeno (o qualsiasi server di supporto la funzione identificare-msg).

Se si stanno reagendo a un messaggio (irc_msg, irc_public o irc_ctcp_action) da un utente, si può dire se si è identificato a NickServ, cercando in terzo argomento ($_[ARG3]) fornito al gestore di eventi. Sarà vero se l'utente ha individuato, false altrimenti.

Altri suggerimenti

Al sub per gli stati in POE ... Hai cedere o chiamarlo in un altro stato.

Inoltre, quando si dispone di dati dal comando IRC, resa in un altro stato di elaborarlo.

_start    - Avviare un timer, etc. Timer    - resa on_whois

on_whois    - gestito che è    - Set di dati    - resa al successivo timer

_stop    - Uccidere il timer    - svuotare i dati

ho eseguito un bot su Freenode e risolto il problema, chiedendo il comando Nickserv: ACC [nick] *

NickServ vi risponderà con un avviso nel formato: [Nick] -> [nickservname registerd] ACC [level]

Dove livello 3 significa che l'utente è identificato per nickserv.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top