我的任务是编写一个 IRC 机器人,它将在这里加入内部 IRC 系统上的频道,并向似乎不再使用的频道发布消息,警告任何潜在用户该频道即将停用。我们的 IRC 系统有大约 6,500 个频道,需要将这些消息发布到它们,我们使用的 IRC 服务器(混合的自定义分支)将并发频道加入限制为每个连接 100 个。为了不达到这个限制,我得到的代码是这样的:
if ($channel_list->{$channel}{joined}) {
# If we're already joined, privmsg immediately
$logger->info("Trying to message $channel");
$data_entry->notified('true');
$data_entry->update;
$irc->yield(privmsg => $msg_channel, $message);
$irc->yield(part => $msg_channel);
} else {
# Otherwise join, and let the join event do the privmsg and part
$logger->info("Trying to join $channel");
$data_entry->notified('true');
$data_entry->update;
$irc->yield(join => $msg_channel);
}
即它会查看我们是否已经加入,如果是,请尝试发布通知消息,然后立即分手。如果我们没有加入,它会先尝试加入(加入事件将触发消息发送)。
问题是代码似乎永远不会运行
$irc->yield(part => $msg_channel);
行,因为最终我开始从 IRC 服务器返回 irc_405 事件,说代码加入了太多频道。有人知道我在做什么错吗?