确定用户是否在IRC上缩进

Xio*_*iov 10 irc bots

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

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

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

:liam_neeson!n=pearson@71-9-55-124.dhcp.snlo.ca.charter.com PRIVMSG #erasmus-testing :foo
Run Code Online (Sandbox Code Playgroud)

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

Xio*_*iov 20

在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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

该方法优于WHOIS的优点:

  1. 始终包含有关身份状态的信息. 有了WHOIS,如果用户实际上没有被认可,那么你就不会说"如同使用nickserv这样的东西".
  2. 返回的行数一致. 由于我想在将控制传递给程序的其余部分之前获取消息,因此我可以轻松地从缓冲区中读取一行(我将来会看到同步问题!),确定状态,并继续正常运行.

  • 调用的输出在网络之间略有不同,例如,在Rizon上,我得到`STATUS nick #`,但在OFTC上,我得到类似于'1(在线,未识别)的东西.我能想到的最便携的方法是首先尝试`ACC`命令并扫描输出中的**以外的数字*,如果没有尝试`STATUS`命令(在某些'ACC`上使用服务器`STATUS`用于不同的目的,所以最后尝试,并使用例外列表.**关键:**不扫描刚性格式,而是构建一个扫描数字的灵活解析器.此外,并非所有网络都有"NickServ",因此请进行后备. (2认同)

Hin*_*rik 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