【发布时间】:2010-09-06 15:53:09
【问题描述】:
我从小就开始使用 IRC,并且一直对它着迷。作为一个语言练习,我正在考虑用 Shoes 作为图形前端在 Ruby 中编写一个简单的 IRC 客户端。好心的先生们,我的问题是,我需要熟悉什么才能开始这次伟大的冒险(当然除了鞋子和 Ruby)?我想有某种关于 IRC 协议的规范。有什么指点吗?
【问题讨论】:
我从小就开始使用 IRC,并且一直对它着迷。作为一个语言练习,我正在考虑用 Shoes 作为图形前端在 Ruby 中编写一个简单的 IRC 客户端。好心的先生们,我的问题是,我需要熟悉什么才能开始这次伟大的冒险(当然除了鞋子和 Ruby)?我想有某种关于 IRC 协议的规范。有什么指点吗?
【问题讨论】:
之前的一篇文章提到了 RFC1459。虽然这是对 IRC 的一个很好的介绍,但它实际上已被 RFC 2810-2813 所取代。以下是编写任何与 IRC 相关的程序所需的更完整的文档列表:
【讨论】:
! 频道的主要网络。 005 解析和理解每个标记是.. 困难的。不同的网络支持其他频道模式(如q、a 和h 作为所有者、管理员和半运营商)
005 解析其实并不复杂。不经常添加新令牌(在 IRCv3 被采用后,未来更是如此),解析当前令牌相当简单:github.com/cinchrb/cinch/blob/master/lib/cinch/isupport.rb
CNOTICE 或 CPRIVMSG 令牌。
CNOTICE 或CPRIVMSG)或字符串值如果它们包含'='(例如SOMETHING=foobar)。所以它支持这些类型的任何未来令牌。事实上,任何对复杂标记值(如CHANMODES=b,k,l,imnpstr 中的值)的特殊解析都是为了方便。万一添加了类似的新令牌并且库还没有专门解析它,用户仍然能够以字符串的形式访问该值。
IRC 规范在 RFC 1459 中列出
【讨论】:
我在 Wikipedia 上找到了这颗宝石。听起来很吓人。
其实不然。
Telnet 到 IRC 服务器,亲眼目睹协议的简单性。最难的部分是握手,之后就很简单了。
【讨论】:
我曾经用另外 2 个人实现了一个客户端和一个服务器(作为课程的一部分)。
我可以告诉你,你已经链接到的 RFC 很棒。
我还会尝试简单地嗅探与现有客户端的连接,以亲眼看看它们是如何工作的。
【讨论】:
不完全是您问题的答案,但它可能会有所帮助。如果您使用 Ruby,我发现 Autumn Leaves 项目是使用 Ruby 构建 IRC 机器人的好方法:
http://github.com/RISCfuture/autumn/tree/master
这几乎是 Ruby 世界的 Jibble。
【讨论】: