2009-11-05 19 views
8

En mi IRC Bot, hay algunos comandos que quiero que solo yo pueda usar, y quiero verificar que cualquier persona que use mi nombre esté identificado con nickserv (idented) . Sin embargo, no pude encontrar una manera fácil de determinar esto, y es por eso que estoy aquí.Determinar si un usuario es ideal en el IRC

Freenode y Rizon son las principales redes de destino, si eso es importante.

Editar: Estaba al tanto de los diversos modos de usuario para usuarios ideados (¡aunque no presté suficiente atención para darme cuenta de que son diferentes!); perdón por no mencionar eso antes. La respuesta sin procesar que recibo de un usuario, sin embargo, no incluye sus modos de usuario; se ve algo como esto:

:[email protected] PRIVMSG #erasmus-testing :foo 

Supongo, entonces, que estoy tratando de encontrar una manera (con varias IRCds, GRR) para conseguir esas banderas. Si, como alguien mencionó, Rizon responde si alguien está o no identificado en una consulta de WHOIS, entonces ese es el tipo de cosa que estoy buscando.

Respuesta

16

en freenode, el envío de un mensaje privado a NICKSERV con el mensaje ACC <nickname> devolverá un número que indica el estado de ident del usuario:

La respuesta está en la 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 

El comando STATUS <nickname> da resultados similares en Rizon:

La respuesta tiene el siguiente 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 

Las ventajas que este método tiene más de una base de datos WHOIS:

  1. Información sobre el estado de ident se incluye siempre. Con WHOISes, simplemente no obtendrá una línea que diga algo como "identificado con nickserv como tal y tal" si el usuario no está, de hecho, ideado.
  2. Número constante de líneas devueltas. Como quiero tomar el mensaje antes de pasar el control al resto de mi programa, puedo leer fácilmente una línea del búfer (veo problemas de sincronización en el futuro), determinar el estado y continuar como siempre.
+2

Las salidas de las llamadas varían ligeramente entre redes, por ejemplo, en Rizon, obtengo 'STATUS nick #', pero en OFTC obtengo algo como '1 (en línea, no identificado)'. El método más portátil que puedo pensar es probar primero el comando 'ACC' y escanear el resultado para un número * fuera del nick *, si no, probar el comando' STATUS' (en algunos 'ACC' usando servidores' STATUS' se usa para diferentes propósitos, así que pruébalo por última vez) y usa una lista de excepciones.** La clave: ** no escanee en busca de un formato rígido, sino que cree un analizador flexible que busque números. Además, no todas las redes tienen 'NickServ', así que haz un repliegue. – bgw

+0

En ciertas redes, se da el modo '+ r' (como se menciona otra respuesta). Me imaginé que debería estar más arriba aquí. – Qix

0

Como se ha registrado su nombre de usuario, antes de que sus registros de bot en, que hace este comando:

/ns ghost username password 

Este comando a continuación eliminará cualquier usuario que se registra en en el usuario, recuerdo que yo sólo utilizamos esto en Freenode , No sé si funcionará en otro servidor.

+0

Ambas redes de destino admiten el efecto fantasma, sí, pero no quiero que mi bot me dé un fantasma ! Estoy intentando darle a mi bot una manera de reconocer que soy verdaderamente quien yo afirmo que soy, y evitar las personificaciones. –

1

Con Freenode, si un usuario es identificado para NickServ entonces su usuario tiene el +e mode set. No estoy seguro si Rizon tiene algo similar.

2

El registro de Nick no es parte del estándar IRC. Siempre es ofrecido por servidores IRC personalizados y/o bots. No creo que encuentres una solución verdaderamente universal, pero NickServ es una implementación disponible común, que funcionaría en muchas redes. Wikipedia tiene more info.

Es posible que desee eludir por completo el problema y hacer que su usuario se registre con su bot, en lugar de con nickserv. Su bot haría la verificación de la contraseña e invalidaría las credenciales del usuario cuando el usuario cierre la sesión. Esta sería una solución universal.

+0

Consideré esto para otra característica, pero la forma en que lo estaba implementando en mi cabeza implicaba indicaciones separadas para nombre de usuario y contraseña, y me arriesgué a retrasar todas las funciones a menos que generara otro hilo, que realmente no tengo ganas de hacer atm. Ahora que no son las 2 a.m. :), el método que está sugiriendo es mucho más esperanzador. Aunque preferiría no manejar la autenticación, parece probable que esto sea lo que termine haciendo. –

+0

Es una pena: alguien debería crear un nuevo RFC para agregar estas características (al igual que han actualizado FTP un par de veces) ... Especialmente características que admitirían mejor los bots (como la estandarización de ACC NickName o STATUS NickName en el servidor con nickserv: si los servidores no son compatibles con la autenticación del usuario, deben crear un nickserv "ficticio" de todos modos, uno sin comandos, solo para evitar que las personas usen ese nombre y engañen a otros con él). –

1

UnrealIRCd y hybrd set + r a los usuarios registrados, no estoy seguro si todos los servidores de IRC hacen esto, es bastante no estandarizado. También en Rizon puede whois y le dirá si el usuario está registrado.

5

En algunas redes puede habilitar una característica llamada 'identificar-mensaje'. En FreeNode lo hace enviando "CAP REQ identify-msg" y "CAP END" cuando se conecta por primera vez al servidor. El servidor responderá con una respuesta confirmando esa característica. Después, todos los mensajes (y ACCIONES CTCP) irán precedidos de un "+" (el usuario se identificó con NickServ) o un "-" (el usuario no se identificó con NickServ), por ejemplo:

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

Cuestiones relacionadas