2011-06-01 68 views
0

[编辑]抱歉标题关闭。我正在考虑我遇到的另一个问题,并且意外地越过了这两个问题。IRC功能难题

大家好,我正在用Python编写我的IRC bot骨架。

为了在我问我的问题之前解释一些事情,我正在写一个IRC bot,并附带一个可以接收信号的插件系统(例如,当收到一条消息,一个人被看到加入一个频道,.. ),并调用插件中包含的这些函数,我将使用一个辅助方法,即如果我们看到一条消息,请致电sawMessagesawMessage将定位哪些插件需要处理消息,使用PluginManager类等。我已将整个系统考虑在内。

我也有每个IRC的作用,即“doJoin”,“doPart”等,这样的插件可以调用这些没有我暴露我的套接字连接直接插件的功能。 - 这些功能是否应自动调用sawMessagesawJoin等?还是应该由电话doMessage之后由插件调用sawMessage?我问的原因是因为如果doMessage调用sawMessagesawMessage处理一些调用doMessage的东西,它会在展开堆栈之前结束递归。

使得插件负责调用sawMessage通知其他插件的缺点是,插件将有选择不通知其他插件,并且还说明如果插件是否调用sawMessage函数,递归问题可能会立即弹出。

我不知道如何解决这个问题。让doMessage自动调用sawMessage来通知其他插件似乎是一种很好的做法,但如果插件设计不正确(即不响应它自己的消息),则通常会由于递归而出现堆栈溢出的可能性。 ,但是如果插件无论如何都要拨打sawMessage,那也是同样的问题。

对此有任何想法/意见?我知道这不是一个简单的问题/答案,但我不能决定如何处理这个问题。通常,如果我只是为自己的用途写一个小型机器人,我不会在乎可能发生的递归问题。不过,我正在为分发目的撰写这篇文章(我希望它可以成为下一个巨大的机器人,就像所有其他IRC机器人开发人员一样),并且我希望它能够正确制作。

谢谢!

+3

如果实施难以解释,这是一个坏主意。 '__import __('this')' – JBernardo 2011-06-01 23:30:59

+0

下一个“巨大的”机器人将被分发。想想天网。 – 2011-06-01 23:37:05

+0

@JBernardo +1引用[The Zen of Python](http://www.python.org/dev/peps/pep-0020/) – Tadeck 2011-06-01 23:37:05

回答

1

听起来你需要在Publish/subscribeChain of Responsibility之间做出决定或阅读更多内容。不幸的是,我在这方面没有太多经验。刚刚恰巧最近读了一个相关的article

+0

非常感谢:)我现在创建了一个更好的系统,谢谢你! – FurryHead 2011-06-02 19:45:21