我有一个命令,我想只限制某些等级。我正在使用unreal3.2.6 IRC。
我读到了这个:
但我仍然不确定如何检查用户排名。
我想看看用户是否是“语音”或更高。什么可以查找用户,我该怎么做才能检查他们是否是一个声音或更高的声音?为了让我检查,每个等级的价值是多少?
我只是想检查当前频道,而不是整个IRC服务器。
例如:
当用户尝试执行命令!roll
(Rolls a dice)
并且不是语音或更高级别时,不会发生任何事情。
if (data.Equals("!roll"))
{
//Check if user contains (@,+,etc?)
if(nickname.StartsWith(@..+..etc))
{
roll(nickname);
}
}
答案 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服务器会引发您的洪水)。