我正在用PHP编写一个IRC聊天机器人,我想让它比其他大多数聊天机器人更复杂一点。
我的应用程序中有以下类:
-
Bot
-实际的bot类,它处理bot可以获得的所有功能和命令。 -
Registry
-全局设置和变量,传递给任何功能类,这样我就不必用变量乱扔全局命名空间。 -
Channel
-定义通道对象,属性:$name, $nicklist
,其中$name
是通道名称,$nicklist
是User
对象的数组。 -
User
-定义用户对象properties:$nickname, $fullAddress
,其中$fullAddress
是用户的地址,以nick!user@host
的形式表示。
到目前为止一切顺利,但是,一个用户可能在多个通道上,由于我不想拥有来自同一用户的多个对象(例如,如果一个用户更改了他的昵称,我将不得不更新多个元素,而不仅仅是一个)。
我该怎么做呢?我在考虑在Bot
类的基础上持有一个大用户池,并将这些引用传递给通道,但我真的不知道如何做到这一点:p
谢谢。
你可以添加一个频道id的列表给你的用户,每次用户加入到一个新的频道,你会添加一个新的频道id的列表,所以如果一个用户离开一个频道,你会从他的列表中删除频道id
由于Bot
对象是需要进行跟踪的对象,因此在其上有一个User
对象数组,并将指向这些对象(也称为$bot->users['name']
)的指针传递给Channel
对象。
这样,同一个指针可以传递两次,以防用户已经在用户列表中找到。