当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《检测IRC用户是否为"语音"或更高[C#ircbot]》经验,为你挑选了2个好方法。

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

我看了这个: 在此输入图像描述

但我仍然不确定我能做些什么来检查用户排名.

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

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

例如:

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

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

Adam Maras.. 6

WHOIS您需要使用该NAMES命令查询适用的通道,而不是使用命令查询用户.

来自RFC 2812 - Internet Relay Chat:Client Protocol:

3.2.5 名称消息

命令: NAMES

参数: [ *( "," ) [ ] ]

通过使用该NAMES命令,用户可以列出对他可见的所有昵称.有关可见内容和不可见内容的更多详细信息,请参阅"Internet中继聊天:频道管理"[IRC-CHAN].该参数指定返回信息的通道.错误的频道名称没有错误回复.

如果未给出参数,则返回所有通道及其占用者的列表.在此列表的末尾,可见但不在任何频道上或不在可见频道上的用户列表被列为"频道"" *".

如果指定了参数,则将请求转发到将生成回复的服务器.

参数中允许使用通配符.

数学运算:

ERR_TOOMANYMATCHES ERR_NOSUCHSERVER
RPL_NAMREPLY RPL_ENDOFNAMES

例子:

NAMES #twilight_zone,#42; 命令列出#twilight_zone和#42上的可见用户

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

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

353 RPL_NAMREPLY

"( "=" / "*" / "@" )
:[ "@" / "+" ] *( " " [ "@" / "+" ] )

" @"用于秘密频道," *"用于私人频道," ="用于其他(公共频道).

以及:

366 RPL_ENDOFNAMES

" :End of NAMES list"

您可以在空白字符分割刻痕的列表,并确定切口的第一个字符是否为模式标识符(+,@等.)或字母数字字符(这意味着用户具有在通道上没有特殊的模式. )

IRC标准仅定义+为有声用户和@频道运营商,但可以知道其他服务器使用特殊字符,例如~频道所有者和&"超级"频道运营商.作为一般规则,您可以简单地检查用户是否具有任何通道模式(默认值除外)以验证它们是否有声音或更好.



1> Adam Maras..:

WHOIS您需要使用该NAMES命令查询适用的通道,而不是使用命令查询用户.

来自RFC 2812 - Internet Relay Chat:Client Protocol:

3.2.5 名称消息

命令: NAMES

参数: [ *( "," ) [ ] ]

通过使用该NAMES命令,用户可以列出对他可见的所有昵称.有关可见内容和不可见内容的更多详细信息,请参阅"Internet中继聊天:频道管理"[IRC-CHAN].该参数指定返回信息的通道.错误的频道名称没有错误回复.

如果未给出参数,则返回所有通道及其占用者的列表.在此列表的末尾,可见但不在任何频道上或不在可见频道上的用户列表被列为"频道"" *".

如果指定了参数,则将请求转发到将生成回复的服务器.

参数中允许使用通配符.

数学运算:

ERR_TOOMANYMATCHES ERR_NOSUCHSERVER
RPL_NAMREPLY RPL_ENDOFNAMES

例子:

NAMES #twilight_zone,#42; 命令列出#twilight_zone和#42上的可见用户

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

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

353 RPL_NAMREPLY

"( "=" / "*" / "@" )
:[ "@" / "+" ] *( " " [ "@" / "+" ] )

" @"用于秘密频道," *"用于私人频道," ="用于其他(公共频道).

以及:

366 RPL_ENDOFNAMES

" :End of NAMES list"

您可以在空白字符分割刻痕的列表,并确定切口的第一个字符是否为模式标识符(+,@等.)或字母数字字符(这意味着用户具有在通道上没有特殊的模式. )

IRC标准仅定义+为有声用户和@频道运营商,但可以知道其他服务器使用特殊字符,例如~频道所有者和&"超级"频道运营商.作为一般规则,您可以简单地检查用户是否具有任何通道模式(默认值除外)以验证它们是否有声音或更好.


顺便说一句,我从没想过聚合的IRC时间的几个月(如果不是几年)会在Stack Overflow上派上用场.我觉得*真棒*!

2> Jon Lin..:

除非您使用的是提供此信息的API,否则IRC的协议不会在311回复WHOIS的"ident @ vhost"中为您提供任何usermod.我过去写过的IRC机器人,你必须自己跟踪这类东西.虽然当您发送WHOIS 命令时,319响应行将包含缺口所在的通道列表,以及通道前面的@/+ /%/〜,表示该通道中缺口的用户模式.您可以解析这些但如果您每次有人在频道中执行某项操作时必须发送WHOIS,则会增加流量.

当你第一次加入一个频道时,你会得到一堆可以的353 @ :地方:

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

你可以在每个缺口前面看到+(声音),%(半操作),@(op),~(所有者)修饰符.此外,如果你发出一个WHO (取决于服务器,你可能需要在频道中取回任何东西),你会得到一行一行的回复:352 [*][@|+|%|~] : .并且您可以在H/G之后解析出来以获得用户模式.

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

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有