确定用户是否在IRC上缩进

时间:2009-11-05 19:19:56

标签: irc bots

在我的IRC Bot中,有一些命令我只想被我使用,我想检查以确保使用我的名字的任何人都被识别为nickserv(已设想)。但是,我无法找到一种简单的方法来确定这一点,这就是我在这里的原因。

如果重要的话,

FreenodeRizon是主要的目标网络。

编辑:我实际上已经知道了为用户提供的各种用户模式(尽管我没有足够的注意力去认识到它们的不同!);很抱歉以前没有提过。但是,我从用户那里获得的原始响应不包括他们的用户模式;它看起来像这样:

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

然后,我想,我正试图找到一种方法(用各种ircds,grr)来获得那些旗帜。如果像有人提到的那样,Rizon会返回某人是否在WHOIS查询中被提名,那么这就是我正在寻找的东西。

7 个答案:

答案 0 :(得分:20)

在freenode上,使用消息ACC <nickname>向nickserv发送私信将返回一个数字,表示用户的身份状态:

  

答案的格式为<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

STATUS <nickname>命令在Rizon上给出了类似的结果:

  

响应的格式为:

     

<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

此方法优于WHOIS的优势:

  1. 始终包含有关身份状态的信息。对于WHOIS,如果用户不是,那么您就不会说“使用nickserv识别为”这样的内容。事实上,这是理所当然的。
  2. 返回一致的行数。由于我想在将控制传递给程序的其余部分之前获取消息,因此我可以轻松地从缓冲区中读取一行(我看到同步问题在你的未来!),确定状态,继续正常。

答案 1 :(得分:6)

在某些网络上,您可以启用名为“identify-msg”的功能。在FreeNode上,您可以在首次连接服务器时发送“CAP REQ identify-msg”和“CAP END”。服务器将回复确认该功能的回复。之后,所有消息(和CTCP ACTION)将以“+”(用户已使用NickServ标识)或“ - ”(用户未使用NickServ标识)开头,例如:

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

答案 2 :(得分:2)

尼克注册不是IRC标准的一部分。它始终由定制的IRC服务器和/或机器人提供。我不认为你会找到一个真正通用的解决方案,但NickServ是一个常见的可用实现,它可以在许多网络上运行。维基百科有more info

您可能希望完全回避问题并让您的用户注册您的机器人,而不是使用nickserv。然后,您的机器人将执行密码检查,并在用户注销时使用户的凭据无效。这将是一个通用的解决方案。

答案 3 :(得分:1)

当您的用户名已注册时,在您的僵尸程序登录之前,您执行以下命令:

/ns ghost username password

此命令将删除用户登录的所有用户,请记住我只在Freenode中使用过此功能,我不知道它是否可以在其他服务器上运行。

答案 4 :(得分:1)

使用Freenode,如果用户被识别为NickServ,则其用户具有+e mode set。不确定Rizon是否有类似的东西。

答案 5 :(得分:1)

UnrealIRCd和hybrd将+ r设置为注册用户,我不确定所有IRC服务器是否都这样做,但它非常不标准化。同样在Rizon你可以告诉你,如果用户已经注册,它会告诉你。

答案 6 :(得分:1)

{{1}}

这将告诉您用户是否已注册。

我通过以下站点发现了该命令:http://www.deepspace.org/nickserv.htm