检测IRC用户是否为“语音”或更高[C#irc bot]

时间:2011-11-18 20:19:36

标签: c# irc

我有一个命令,我想只限制某些等级。我正在使用unreal3.2.6 IRC。

我读到了这个:enter image description here

但我仍然不确定如何检查用户排名。

我想看看用户是否是“语音”或更高。什么可以查找用户,我该怎么做才能检查他们是否是一个声音或更高的声音?为了让我检查,每个等级的价值是多少?

我只是想检查当前频道,而不是整个IRC服务器。

例如:

当用户尝试执行命令!roll (Rolls a dice)并且不是语音或更高级别时,不会发生任何事情。

if (data.Equals("!roll"))
{
    //Check if user contains (@,+,etc?) 
    if(nickname.StartsWith(@..+..etc))
    {
        roll(nickname);
    }
}

2 个答案:

答案 0 :(得分:6)

您需要使用WHOIS命令查询适用的频道,而不是使用NAMES命令查询用户。

来自RFC 2812 - Internet Relay Chat: Client Protocol

  

3.2.5 命名消息

     

命令:NAMES

     

参数:[ <channel> *( "," <channel> ) [ <target> ] ]

     

通过使用NAMES命令,用户可以列出对他可见的所有昵称。有关可见内容和不可见内容的更多详细信息,请参阅"Internet Relay Chat: Channel Management" [IRC-CHAN]<channel>参数指定返回信息的通道。错误的频道名称没有错误回复。

     

如果没有给出<channel>参数,则返回所有频道及其占用者的列表。在此列表的末尾,可见但不在任何频道上或不在可见频道上的用户列表列在“频道”“*”上。

     

如果指定了<target>参数,请求将转发到将生成回复的服务器。

     

<target>参数中允许使用通配符。

     

数学运算:

     

ERR_TOOMANYMATCHES ERR_NOSUCHSERVER
  RPL_NAMREPLY RPL_ENDOFNAMES

     

示例:

     

NAMES #twilight_zone,#42;用于列出#twilight_zone和#42

上的可见用户的命令      

NAMES;用于列出所有可见渠道和用户的命令

使用NAMES命令查询频道将产生以下两个回复:

  

353 RPL_NAMREPLY

     

"( "=" / "*" / "@" ) <channel>
  :[ "@" / "+" ] <nick> *( " " [ "@" / "+" ] <nick> )

     
      
  • @”用于隐私频道,“*”用于私人频道,“=”用于其他频道(公共频道)。
  •   

以及:

  

366 RPL_ENDOFNAMES

     

"<channel> :End of NAMES list"

您可以在空白字符上拆分缺刻列表,并确定缺刻的第一个字符是模式标识符(+@等等。)还是字母数字字符(这意味着用户在频道上没有特殊模式。)

IRC标准仅将+定义为有声用户,将@定义为频道操作符,但可以知道其他服务器可以使用~等特殊字符作为频道所有者和{{{ 1}}用于“超级”通道运算符。作为一般规则,您只需检查用户是否具有任何频道模式(默认值除外),以验证其是否有声音或更好。

答案 1 :(得分:5)

除非您使用提供此信息的API,否则IRC的协议不会在311回复WHOIS的“ident @ vhost”中为您提供任何usermod。我过去写过的IRC机器人,你必须自己跟踪这类东西。虽然当您发送WHOIS <nick>命令时,响应的319行将包含切口所在的通道列表,并且通道前面的@ / + /%/〜表示nick在该频道中拥有的用户模式。您可以解析这些内容,但如果您每次有人在频道中做某事时都必须发送WHOIS,那么它会增加流量。

当您第一次加入某个频道时,您会收到一堆353 <your nick> @ <channel> :<user_list>,其中<user_list>可以是:

:snowcloud Chibi-Ryu CUF Nere~thundra vatar nm449 |笔记本电脑Klapo Apocalypse + Skull_Leader%KagaminBot Razaekel Kloacy&amp; Cherry-chan @happytang MagusHrist%Frostii hexerr

您可以在每个缺口前看到+(声音),%(半操作),@(op),~(所有者)修饰符。此外,如果您发出WHO <channel>(取决于服务器,您可能需要在频道中获取任何内容),您会逐行回复:352 <your nick> <channel> <user> <host> <server> <nick> <H|G>[*][@|+|%|~] :<hopcount> <real name>。并且您可以在H / G之后解析出来以获得用户模式。

这是您查询用户模式的唯一方法,但是当您的机器人位于频道中时,它会收到MODE <channel> +|-<v|h|a|o> <nick>之类的消息。因此,当您看到其中一个时,您可以在内部跟踪谁获得了+ v或者-v等等。然后,每当通道中的某个人执行“!roll”时,您就不需要向服务器发送命令。 “(如果您继续发送WHOIS,一些IRC服务器会引发您的洪水)。