Pergunta

No meu BOT IRC, existem alguns comandos que eu quero ser utilizável por mim e quero verificar se qualquer pessoa que use meu nome seja identificada com o Nickserv (identificado). No entanto, não consegui encontrar uma maneira fácil de determinar isso, e é por isso que estou aqui.

Freenode e Rizon são as principais redes de destino, se isso importa.

EDIT: Eu estava realmente ciente dos vários Usermodes para usuários identificados (embora eu não tenha prestado atenção suficiente para perceber que eles diferem!); Desculpe por não mencionar isso antes. A resposta bruta que recebo de um usuário, no entanto, não inclui seus Usermodes; Parece algo assim:

:liam_neeson!n=pearson@71-9-55-124.dhcp.snlo.ca.charter.com PRIVMSG #erasmus-testing :foo

Suponho, então, que estou tentando encontrar uma maneira (com vários IRCDs, GRR) para obter essas bandeiras. Se, como alguém mencionou, Rizon retornará se alguém é ou não identificado em uma consulta Whois, esse é o tipo de coisa que estou procurando.

Foi útil?

Solução

No FreeNode, enviando uma mensagem privada para o Nickserv com a mensagem ACC <nickname> retornará um número que indica o status de identificação do usuário:

A resposta está na forma <nickname> ACC <digit>:

 0 - account or user does not exist
 1 - account exists but user is not logged in
 2 - user is not logged in but recognized (see ACCESS)
 3 - user is logged in

o STATUS <nickname> O comando fornece resultados semelhantes no Rizon:

A resposta tem esse formato:

<nickname> <digit>

 0 - no such user online or nickname not registered
 1 - user not recognized as nickname's owner
 2 - user recognized as owner via access list only
 3 - user recognized as owner via password identification

As vantagens que esse método tem sobre um whois:

  1. As informações sobre o status de identificação estão sempre incluídas. Com o WHOESS, você simplesmente não receberá uma linha dizendo algo como "identificado com o Nickserv como tal e such" se o usuário não for, de fato, identificado.
  2. Número consistente de linhas retornadas. Como quero pegar a mensagem antes de passar o controle para o restante do meu programa, posso ler facilmente uma linha fora do buffer (vejo problemas de sincronização no seu futuro!), Determine o status e continue como normal.

Outras dicas

Em algumas redes, você pode ativar um recurso chamado 'Identify-MSG'. No Freenode, você faz isso enviando "Cap Req Identify-MSG" e "Cap End" quando você se conecta ao servidor. O servidor responderá com uma resposta confirmando esse recurso. Posteriormente, todas as mensagens (e ações do CTCP) serão precedidas com um "+" (o usuário identificou com o Nickserv) ou um "-" (o usuário não se identificou com o Nickserv), por exemplo:

: liam_neesson! n=pearson@71-9-55-124.dhcp.snlo.ca.charter.com Privmsg #Erasmus-testing:+foo

O registro de Nick não faz parte do padrão IRC. É sempre oferecido por servidores IRC personalizados e/ou bots. Eu não acho que você encontrará uma solução verdadeiramente universal, mas o Nickserv é uma implementação comum disponível, que funcionaria em muitas redes. Wikipedia tem mais informações.

Você pode evitar o problema completamente e fazer com que seu usuário se registre no seu bot, em vez de com o Nickserv. Seu bot faria a verificação de senha e invalidaria as credenciais do usuário quando o usuário fizer o login. Esta seria uma solução universal.

À medida que seu nome de usuário é registrado, antes que seu bot faça login, você faz o comando:

/ns ghost username password

Este comando removerá qualquer usuário conectado ao seu usuário, lembre -se de que eu só usei isso no Freenode, não sei se ele funcionará em outro servidor.

Com o Freenode, se um usuário for identificado como Nickserv, então seu usuário tem o +conjunto de modo e. Não tenho certeza se Rizon tem algo semelhante.

Conjunto irrealircd e hybrd +r para usuários registrados, não tenho certeza se todos os servidores do IRC fazem isso, é bastante não padronizado. Também no Rizon, você pode quem pode e isso informará se o usuário está registrado.

/NickServ INFO <username>

Isso lhe dirá se o usuário está registrado ou não.

Eu descobri o comando através deste site: http://www.deepspace.org/nickserv.htm

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