¿Cómo puedo comprobar si un usuario se autentica con NiCK usando POE :: componentes :: :: IRC Estado en Perl?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de probar si un usuario se ha registrado en freenode. nick_info () no parece devolver información acerca de esto, así que quiero utilizar $ IRC-> rendimiento (whois => $ nick); y luego agarrar la respuesta del evento irc_whois. El problema es que yo quiero esperar hasta que se disparó este evento, por lo que creó una variable global $ whois_result y escribió un sub así:

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

con el manejador irc_whois mirando como:

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

Por desgracia, el evento no puede disparar mientras que el bucle se ejecuta por lo que este se cuelga. Estoy seguro de que hay una mejor manera de hacer esto, pero no estoy lo suficientemente familiarizado con este tipo de programación saber. Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Lo siguiente se aplica a FreeNode al menos (o cualquier servidor soporta la característica de identificar-msg).

Si usted está reaccionando a un mensaje (irc_msg, irc_public o irc_ctcp_action) de un usuario, se puede decir si se ha identificado a NiCK mirando el tercer argumento ($_[ARG3]) proporcionada al controlador de eventos. Será cierto si el usuario ha identificado, en caso contrario.

Otros consejos

En el sub para los estados de POE ... Usted tiene que ceder o llamarlo en otro estado.

Además, cuando se dispone de datos desde el comando IRC, ceder el paso a otro estado para procesarlo.

_start    - Poner en marcha un temporizador, etc. Temporizador    - rendimiento on_whois

on_whois    - corra el que es    - Conjunto de datos    - rendimiento al siguiente temporizador

_STOP    - Matar el temporizador    - vaciar los datos

Tengo un bot en Freenode y resuelva el problema pidiendo Nickserv el comando: ACC [nick] *

Nickserv le responderán con un aviso en el formato: [Apodo] -> [nickservname registerd] ACC [nivel]

Donde nivel 3 significa que el usuario se identifica a nickserv.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top