Я построил бот IRC, используя фреймворк PHP bot под названием Philip (https://github.com/epochblue/philip). Когда команда !hello
отправляется в чат кому-либо, бот должен сказать «привет ...» в канал, подождать 45 секунд, сказать «foo», подождать 15 секунд, а затем сказать «бар» (я знаю, что doesn ' t имеет смысл, просто пытается заставить этот код работать).Использование sleep() задерживает весь вывод
Вот код, который я пытался до сих пор:
Попытка # 1
$bot->onChannel('/^!hello$/', function($event) {
$event->addResponse(Response::msg($event->getRequest()->getSource(), "hello..."));
$now = time();
while ($now + 45 > time()) {
}
$event->addResponse(Response::msg($event->getRequest()->getSource(), "foo"));
while ($now + 60 > time()) {
}
$event->addResponse(Response::msg($event->getRequest()->getSource(), "bar"));
});
Попытка # 2
$bot->onChannel('/^!hello$/', function($event) {
$event->addResponse(Response::msg($event->getRequest()->getSource(), "hello..."));
sleep(45);
$event->addResponse(Response::msg($event->getRequest()->getSource(), "foo"));
sleep(15);
$event->addResponse(Response::msg($event->getRequest()->getSource(), "bar"));
});
С обоими из этих попыток, бот будет ждать полные 60 секунд, прежде чем выводить что-либо вообще. Поэтому вместо отправки одного сообщения, затем ожидания, затем отправки другого сообщения, затем ожидания, затем отправки третьего сообщения, он просто ждал все 60 секунд, после чего отправил сообщения.
Любая идея о том, как я могу заставить это работать так, как я бы хотел?
Благодаря
Попробуйте http://www.php.net/flush после каждого сообщения – Reeno
Я не знаю рамки, но смотрю на код (https://github.com/epochblue/philip/blob/master/ src/Philip/Philip.php) похоже, что вы хотите отправлять отдельные ответы с помощью метода 'send()' («На самом деле переместите данные обратно в сокет (giggity)».). – CompuChip
@ Рино просто попробовал это. Кажется, не работает. – 585connor