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::<UserJID> JOIN :<ChannelName>
回复 2::<Domain> <[RPL_TOPIC][1]> <NickName> <ChannelName> :<Topic>
回复 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 运行命令时监听命令?