File: /var/www/heifetz/heifetz-app/crons/TelegramSender.php
<?php
declare(strict_types=1);
namespace Crons;
use Core\Models\Message;
use Exception;
use Exceptions\ModuleException;
use Helpers\TelegramHelper;
use Models\Modules\TelegramModule;
use Models\TelegramMessageQueue;
class TelegramSender extends AbstractCron
{
protected string $title = 'Рассылаем сообщения в Telegram';
public function execute(): void
{
if (!TelegramModule::isActive()) {
$this->cronError = 'Модуль Telegram выключен';
$this->stopCron = true;
return;
}
/** @var TelegramMessageQueue[] $queue */
$queue = TelegramMessageQueue::getMessagesToSend();
if (empty($queue)) {
$this->log('Очередь пуста');
return;
}
foreach ($queue as $queueItem) {
$this->log('Посылаем ID: ' . $queueItem->id);
TelegramMessageQueue::setStatusInProgress($queueItem->id);
$message = Message::create($queueItem->message)->toTelegram();
try {
$result = TelegramHelper::send($queueItem->telegram_id, $message, ['parse_mode' => TelegramHelper::PARSE_MODE_MD], $queueItem->message_type);
TelegramMessageQueue::setStatusSent($queueItem->id, $result->get('message_id'));
} catch (ModuleException $exception) {
TelegramMessageQueue::setStatusNew($queueItem->id);
throw $exception;
} catch (Exception $exception) {
$this->error($exception->getMessage());
TelegramMessageQueue::setStatusError($queueItem->id);
continue;
}
}
}
}