Como posso verificar se um usuário é autenticado com NickServ usando POE :: Component :: IRC :: Estado em Perl?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu estou tentando testar se um usuário está registrado na rede Freenode. não nick_info () não parecem retornar informações sobre isso, então eu quero usar $ irc-> rendimento (whois => $ nick); e em seguida, pegue a resposta do evento irc_whois. O problema é que eu quero esperar até que este evento é acionado, então eu criei uma variável global $ whois_result e escreveu uma sub parecido com isto:

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

com o manipulador irc_whois parecendo:

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

Infelizmente, o evento não pode disparar enquanto o loop está sendo executado de modo que este trava. Eu tenho certeza que há uma maneira melhor de fazer isso, mas eu não sou o suficiente familiarizado com este tipo de programação para saber. Qualquer ajuda seria muito apreciada.

Foi útil?

Solução

O seguinte diz respeito a FreeNode pelo menos (ou qualquer servidor de suporte o recurso de identificar-msg).

Se você está reagindo a uma mensagem (irc_msg, irc_public, ou irc_ctcp_action) de um usuário, você pode dizer se ele identificou a NickServ, olhando para o terceiro argumento ($_[ARG3]) fornecidos para o manipulador de eventos. Será verdade que o usuário tenha identificado, falso caso contrário.

Outras dicas

No sub para os estados em POE ... Você tem que produzir ou chamá-lo em outro estado.

Além disso, quando você tem dados do comando IRC, rendimento para outro estado para processá-lo.

_start - Iniciar um temporizador, etc. cronômetro - rendimento on_whois

on_whois - prazo que é - Conjunto de dados - rendimento para o próximo temporizador

_stop - Matar o temporizador - lave os dados

Eu corro um bot em Freenode e resolveu o problema, pedindo Nickserv o comando: ACC [nick] *

Nickserv irá então responder com um aviso no formato: [Apelido] -> [registerd nickservname] ACC [nível]

Onde 3 significa nível que o usuário é identificado para nickserv.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top