IRC 协议的 JOIN 命令

Posted

技术标签:

【中文标题】IRC 协议的 JOIN 命令【英文标题】:JOIN command for IRC Protocol 【发布时间】:2017-04-13 18:46:21 【问题描述】:

使用自己的 IRC 客户端并有一些问题。

当我加入频道时,我在发送 JOIN 命令后收到来自 IRC 服务器的多个响应。它们按以下顺序出现:

-服务器重复/验证 JOIN 命令

-服务器发送频道主题

-服务器发送加入频道中的用户列表(有时可以分块发送,由于 IRC 的消息大小限制)。

第一个问题:这个流程正确吗?

第二个问题:我是否保证服务器会在发送更多命令之前发送所需的所有内容。 (例如,如果我加入一个频道,那么有人恰好在完整的 JOIN 响应完成之前发送了一个 PRIVMSG,服务器会在发送 PRIVMSG 之前完成 JOIN)

我希望这是有道理的! 谢谢

【问题讨论】:

【参考方案1】:

第一个问题:这个流程正确吗?

是的。对于 JOIN 命令,服务器将发送以下三个响应。

回复 1::&lt;UserJID&gt; JOIN :&lt;ChannelName&gt; 回复 2::&lt;Domain&gt; &lt;[RPL_TOPIC][1]&gt; &lt;NickName&gt; &lt;ChannelName&gt; :&lt;Topic&gt; 回复 3::<Domain> <[RPL_NAMREPLY][1]> <NickName> = <ChannelName> : <NameList> :<Domain> <[RPL_ENDOFNAMES][1]> <NickName> <ChannelName> :End of Names list

第二个问题:我是否保证服务器会在发送更多命令之前发送所需的所有内容。 (例如,如果我加入一个频道,那么有人恰好在完整的 JOIN 响应完成之前发送了一个 PRIVMSG,服务器会在发送 PRIVMSG 之前完成 JOIN)

是的,我们可以确定。在完成 JOIN 过程之前,服务器不应向该通道发送任何消息。

PS:在某些客户端中必须发送响应 3 才能完成 JOIN 命令过程,而某些客户端将单独执行 1 和 2。

【讨论】:

【参考方案2】:

是的,您应该始终在任何其他通道事件(如 PRIVMSG)之前从服务器获取 JOIN。

【讨论】:

以上是关于IRC 协议的 JOIN 命令的主要内容,如果未能解决你的问题,请参考以下文章

Twisted Python IRC Bot - 如何在 bot 运行命令时监听命令?

iOS 中的 IRC /TOPIC 命令修剪问题

获取 IRC 命令响应

在我的 IRC 客户端中使用命令

在 IRC 机器人 (Haskell) 中实现 CTCP 命令

golang 一个简单的命令行聊天室,如irc