¿Cómo puedo comprobar si un usuario se autentica con NiCK usando POE :: componentes :: :: IRC Estado en Perl?
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.
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.