代码之家  ›  专栏  ›  技术社区  ›  Xiong Chiamiov

确定用户是否在IRC上识别

  •  10
  • Xiong Chiamiov  · 技术社区  · 15 年前

    在我的IRC bot中,有一些命令我希望只能由我使用,我希望检查以确保使用我名字的任何人都可以使用nickserv(idented)进行标识。然而,我找不到一个简单的方法来确定这一点,这就是我来这里的原因。

    Freenode Rizon 是主要的目标网络,如果这很重要的话。

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

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

    那么,我想我正在设法(使用各种IRCD、GRR)获取这些标志。如有人所说,如果rizon返回某人是否在whois查询中被识别,那么这就是我要查找的类型。

    7 回复  |  直到 6 年前
        1
  •  18
  •   Jishaxe Xiong Chiamiov    10 年前

    在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. 始终包括有关标识状态的信息。 对于whoises,如果用户实际上没有被识别出来,那么你就不会得到一行这样的行来表达“用nickserv标识为某某”。
    2. 返回的行数一致。 因为我想在将控制权传递给程序的其余部分之前获取消息,所以我可以很容易地从缓冲区中读取一行信息(在将来我会看到同步问题!),确定状态,然后像正常一样继续。
        2
  •  5
  •   Hinrik    14 年前

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

    莉安娜·尼森!n=pearson@71-9-55-124.dhcp.snlo.ca.charter.com privmsg erasmus测试: +FO

        3
  •  2
  •   rmeador    15 年前

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

    你可能想要完全回避这个问题,让你的用户注册到你的机器人上,而不是使用nickserv。然后,bot会进行密码检查,并在用户注销时使用户的凭据失效。这将是一个普遍的解决方案。

        4
  •  1
  •   Nathan Campos    15 年前

    注册用户名后,在bot登录之前,执行以下命令:

    /ns ghost username password
    

    此命令将删除登录到您的用户的任何用户,请记住,我只在freenode中使用此命令,我不知道它是否在其他服务器上运行。

        5
  •  1
  •   jamessan    15 年前

    使用freenode时,如果用户被标识为nickserv,则其用户具有 +e mode set . 不确定里森是否有类似的东西。

        6
  •  1
  •   L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳    15 年前

    未实现和hybrd将+r设置为注册用户,但我不确定所有IRC服务器是否都这样做,这是相当不规范的。在Rizon上,你可以选择谁,它会告诉你用户是否注册了。

        7
  •  1
  •   aude    6 年前

    /NickServ INFO <username>

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

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