J'essaie de tester si un utilisateur est enregistré sur FreeNode. nick_info() ne semble pas retourner d'informations à ce sujet, donc je veux utiliser $ irc-> yield (whois => $ nick); puis récupérez la réponse de l'événement irc_whois. Le problème est que je veux attendre que cet événement est tiré, donc je créé une whois_result variable globale $ et a écrit un sous comme ceci:Comment vérifier si un utilisateur est authentifié avec NickServ en utilisant POE :: Component :: IRC :: State en Perl?
sub whois {
my $nick = $_[0];
$whois_result = 0;
$irc->yield(whois => $nick);
while($whois_result == 0) { }
return $whois_result;
}
avec le gestionnaire de irc_whois ressemblant à:
sub on_whois {
$whois_result = $_[ARG0];
print "DEBUG: irc_whois fired.\n";
}
Malheureusement, l'événement ne peut pas se déclencher tant que la boucle est en cours d'exécution. Je suis sûr qu'il y a une meilleure façon de le faire, mais je ne connais pas assez ce type de programmation pour le savoir. Toute aide serait grandement appréciée.
Merci, mais mon problème principal n'est pas sur la fin IRC, c'est sur la fin POE. Je veux demander si l'utilisateur est enregistré et ne rien faire d'autre jusqu'à ce que j'obtienne une réponse. Le problème que je rencontre est que tout cela est piloté par un événement, et la requête et la réponse sont des événements séparés. Cela signifie que je dois envoyer la demande, puis laisser le robot faire son travail pendant un certain temps, puis chaque fois qu'une réponse arrive, je dois le traiter. Ma solution ci-dessus consistait à demander au gestionnaire de réponse de définir une variable globale et d'interroger cette variable, mais elle a échoué. – Troy
D'accord, j'ai trouvé une solution. Ce que j'ai fait, c'est que j'ai créé une file d'attente globale. Chaque fois que je fais un appel whois, je débloque une fonction anonyme sur la file d'attente qui va gérer les informations qui en résultent.Mon gestionnaire de réponse whois ressemble à ceci: sub on_whois { my $ function = pop (@whois_queue); $ function -> ($ _ [ARG0]); } – Troy