2011-11-26 56 views
1

我正在用PHP编写一个IRC bot,并且我想让大多数其他机器人更复杂一点。如何跟踪同一用户(对象)的多个实例

我在我的应用程序下面的类:

  1. Bot - 实际BOT类,它处理所有的功能和命令的机器人可以得到的。
  2. Registry - 全局设置和变量,传递给任何正常运行的类,这样我就不必使用变量抛出全局名称空间。
  3. Channel - 定义频道对象,属性:$name, $nicklist,其中$name是频道名称和$nicklistUser对象的数组。
  4. User - 定义用户对象,属性:$nickname, $fullAddress,其中$fullAddress是用户的地址,形式为[email protected]

不过,用户可能在多个通道上,并且由于我不想让来自同一用户的多个对象(例如,如果用户改变了他的昵称,我将不得不更新多个元素而不是一个)。

我该如何去解决这个问题,我正考虑在Bot类的基础上举办一个盛大的用户池,并将这些引用传递给渠道,但我不知道如何做到这一点:P

任何人都可以指向正确的方向吗?如果你愿意,我可以粘贴我的当前代码(它很长,所以如果没有人需要它,我不会这样做)。

谢谢。

回答

0

由于Bot对象是需要执行跟踪的一个,具有在其上User对象的数组,并通过指针那些对象(又名$bot->users['name'])到Channel对象。

这样,如果在用户列表中已找到用户,则可以传递相同的指针两次。

0

您可以为您的用户添加频道ID列表,并且每次用户加入新频道时,您都会在列表中追加新的频道ID,因此如果用户离开频道,您将从他的频道中删除频道ID名单。

+0

但重点是追踪频道上的用户,而不是用户频道,因为我想检查例如用户是否有特定频道的特权,并将他与该频道中的其他用户进行比较。在每个频道中制作一个用户列表比每个用户的频道列表更有意义。 (虽然两者可以合并) –

+0

另外,它也会导致相同的问题。 2个用户可以在同一个频道上,那么我必须将相同的对象给2个用户。 –

+0

您将仅添加通道ID而不是通道对象的实例。根据reqs,一个频道有很多用户,用户可以加入多个频道,同时用户也可以看到他加入的频道名称,因此用户可以看到频道名称列表。 – AlexTheo

相关问题