Twisted IM 概述¶
Twisted IM(即时通讯)是一个多协议聊天框架,基于我们都熟悉和喜爱的 Twisted 框架。它相当简单且可扩展,有两个方向 - 添加新协议非常容易,添加新前端也很容易。
代码流程¶
AccountManager¶
控制流程从 baseaccount.AccountManager
的相关子类开始。AccountManager 负责管理帐户 - 记住哪些帐户可用、它们的设置、添加和删除帐户,以及在启动时让帐户登录。
这是一个开始你的界面的好地方,从磁盘加载帐户列表并告诉它们登录。大多数方法名称在 AccountManager
中都很直白,你的子类可以覆盖它想要的任何内容,但你需要覆盖 __init__
。类似这样
...
def __init__(self):
self.chatui = ... # Your subclass of basechat.ChatUI
self.accounts = ... # Load account list
for a in self.accounts:
a.logOn(self.chatui)
ChatUI¶
帐户对象通过 basechat.ChatUI
的子类与用户交谈。此类跟踪所有当前活动的对话,以便当帐户收到传入消息时,它可以将该消息置于其正确的上下文中。
你需要覆盖多少此类取决于你需要做什么。你需要覆盖 getConversation
(一对一对话,如 IRC DCC 聊天)和 getGroupConversation
(多人对话,如 IRC 频道)。你可能想覆盖 getGroup
和 getPerson
。
上述例程的默认版本的主要问题是它们接受一个参数 Class
,它默认为该类的抽象实现 - 例如,getConversation
有一个 Class
参数,它默认为 basechat.Conversation
,它会引发很多 NotImplementedError
。在你的子类中,用一个新的方法覆盖该方法,该方法的 Class 参数默认为你自己的 Conversation
实现,它只是调用父类的实现。
Conversation 和 GroupConversation¶
这些类是你的界面与聊天协议相遇的地方。聊天协议获取消息,找到合适的 Conversation
或 GroupConversation
对象,并在发生各种有趣的事情时调用其方法。
覆盖你想要获取的信息的方法。但是,你必须覆盖 hide
和 show
方法 - 它们被频繁调用,默认实现会引发 NotImplementedError
。
帐户¶
帐户是 basesupport.AbstractAccount
的子类的实例。有关更多详细信息和示例代码,请参阅 twisted.words.im
中的各种 *support
文件。