RFC 1459 以稀疏着称。它并没有告诉您编写服务器所需的一切。
MODE
在这种情况下,缺少的是查询现有模式的MODE
命令和设置新模式的命令之间的区别。在模式查询的情况下,客户端将收到指示现有模式的数字回复;在更改模式的情况下,除非出现错误,否则客户端将不会收到直接的数字回复。但是,如果模式成功更改,则客户端将收到MODE
来自服务器的通知,通知其更改。
例如,如果客户的昵称是foo
并且它发送:
MODE foo
然后这是查询其当前用户模式 - 它会期望得到RPL_UMODEIS
如下回复:
:irc.example.org 221 foo :+i
如果客户端然后发送:
MODE foo :+w
那么这正在改变它的用户模式——它要么得到一个数字错误,要么得到ERR_USERSDONTMATCH
模式改变的确认:
:foo!foo@bar.com MODE foo :+w
请注意,从技术上讲,此确认不是对的直接回复MODE
- 它是服务器通知客户端其状态的相关更改,这恰好是由客户端命令触发的。
通道模式也存在类似的情况。如果客户端通过以下方式查询当前通道模式:
MODE #channel
那么它将期望一个RPL_CHANNELMODEIS
包含当前“简单”通道模式的RPL_CREATIONTIME
响应,并且可能是一个给出通道创建时间的响应。如果它使用以下命令查询当前的禁止列表:
MODE #channel b
然后应该得到零个或多个RPL_BANLIST
响应,然后是RPL_ENDOFBANLIST
.
相反,如果客户端尝试更改通道模式:
MODE #channel :+k zounds
那么直接回复要么是错误回复,要么什么都没有;如果通道模式实际改变了,它会看到MODE
命令回显。在后一种情况下,成功的MODE
命令也将被发送到通道的其他成员——这有助于说明它并不是对初始MODE
命令的直接回复,而是对它的间接响应。