HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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;
            }
        }
    }

}