RFC 1459是着名的稀疏。它不會告訴你編寫服務器所需的一切。
在這種情況下,缺少的是查詢現有模式的MODE
命令和設置新模式的MODE
命令之間的區別。在模式查詢的情況下,客戶端將收到指示現有模式的數字回覆;在更改模式的情況下,客戶端將不會收到直接的數字回覆,除非出現錯誤。但是,如果模式成功更改了,則客戶端將從服務器接收MODE
通知其更改。
因此,舉例來說,如果客戶端的缺口是foo
,並將其發送:
MODE foo
那麼這是查詢其目前的用戶模式 - 它會期待像RPL_UMODEIS
回覆:
:irc.example.org 221 foo :+i
如果然後客戶發送:
MODE foo :+w
然後這是改變它小號用戶模式 - 它要麼得到一個數字錯誤,如ERR_USERSDONTMATCH
或模式改變的確認:
:[email protected] MODE foo :+w
注意,這個確認是技術上沒有直接答覆MODE
- 這是服務器通知相關的客戶端改變其狀態,恰好是由客戶端命令觸發的。
類似的情況存在於通道模式中。如果客戶端查詢當前通道模式:
MODE #channel
那麼它將把包含當前「簡單」的渠道模式的RPL_CHANNELMODEIS
反應,也許RPL_CREATIONTIME
響應給渠道的創建時間。如果查詢與當前禁令名單:
MODE #channel b
那麼應該得到零個或多個RPL_BANLIST
答覆,然後是一個RPL_ENDOFBANLIST
。
相反,如果一個客戶端試圖改變頻道模式:
MODE #channel :+k zounds
然後直接答覆將或者是一個錯誤回答或不存在;並且如果通道模式實際發生了更改,則會看到MODE
命令回顯。在後一種情況下,成功的MODE
命令也將發送給通道的其他成員 - 這有助於說明它不是對初始MODE
命令的直接回復,而是對它的間接回應。
來源
2012-10-15 14:08:32
caf