11

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

如果重要的话,FreenodeRizon是主要的目标网络。

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

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

那么,我想我正在尝试找到一种方法(使用各种 ircd,grr)来获取这些标志。如果正如有人提到的那样,Rizon 返回是否有人在 WHOIS 查询中被识别,那么这就是我正在寻找的东西。

4

7 回答 7

22

在 freenode 上,向 nickserv 发送一条带有该消息的私人消息ACC <nickname>将返回一个指示用户身份状态的数字:

答案是这样的<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. 返回的行数一致。 由于我想在将控制权传递给程序的其余部分之前获取消息,因此我可以轻松地从缓冲区中读取一行(我看到您将来会出现同步问题!),确定状态,然后像往常一样继续。
于 2009-11-14T11:18:23.617 回答
6

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

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

于 2011-04-27T23:23:01.177 回答
2

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

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

于 2009-11-05T20:02:30.557 回答
1

由于您的用户名已注册,在您的机器人登录之前,您执行以下命令:

/ns ghost username password

此命令将删除任何登录到您的用户的用户,记住我只在 Freenode 中使用过,我不知道它是否会在另一台服务器上运行。

于 2009-11-05T19:24:24.783 回答
1

使用 Freenode,如果用户被 NickServ 识别,那么他们的用户设置了 +e 模式。不确定Rizon是否有类似的东西。

于 2009-11-05T19:45:51.247 回答
1

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

于 2009-11-05T20:09:09.493 回答
1

/NickServ INFO <username>

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

我通过这个网站发现了这个命令:http: //www.deepspace.org/nickserv.htm

于 2019-01-31T12:27:30.653 回答