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/exnova-telegram-bot-v2/app/Jobs/ProcessExnovaData.php
<?php

namespace App\Jobs;

use App\Models\Settings;
use App\Models\User;
use App\Telegram\Messages\Postman;
use App\Twill\Capsules\ExnovaAccounts\Models\ExnovaAccount;
use App\Twill\Capsules\TradingSessions\Models\TradingSession;
use App\Twill\Capsules\TradingSessions\Models\Transaction;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;

class ProcessExnovaData implements ShouldQueue
{

    public $data;
    public $bot_id;

    public function __construct($data, $botId)
    {
        $this->data = $data;
        $this->bot_id = $botId;
    }

    public function handle()
    {
        try {
            // Convert to StdClass
            $data = json_decode(json_encode($this->data));

            $account = ExnovaAccount::where('email', $data->email)->first();
            $user = User::find($account->user_id);

            $data->user = $user;
            $data->result->betPrice = $data->result->invest;
            $data->bot_id = $data->user->bot_id;

            /** @var TradingSession $activeSession */
            $activeSession = $data->user->activeTradingSession();

            $transaction = new Transaction();
            $transaction = $transaction->saveTransaction($data, $activeSession);
            $activeSession = $transaction->tradingSession()->getResults();

            if (is_object($transaction) && !$transaction->repeated) {
                $post = ['message' => ['chat' => ['id' => $user->telegram_id]]];
                $postman = new Postman($user, $post);
                if ($activeSession->is_manual) {
                    $transactionResult = Settings::getTranslated('trading.auto', 'manual_result', $user->locale);
                } else {
                    $transactionResult = Settings::getTranslated('trading.auto', 'result', $user->locale);
                }

                if ($transaction->closeProfit == 0) {
                    $transaction->closeProfit -= $transaction->betPrice;
                }

                $data = [
                    'tradeId' => $transaction->trade_id,
                    'stepId' => $transaction->step_id,
                    'betPrice' => $user->formatCurrency($transaction->betPrice),
                    'profit' => $user->formatCurrency($transaction->closeProfit, true),
                    'directionIcon' => $transaction->closeProfit <= $transaction->betPrice ? '📉' : '📈',
                ];
                foreach ($data as $key => $value) {
                    $transactionResult = str_replace("{{$key}}", $value, $transactionResult);
                }

                try {
                    $activeSession->user()->first()->superDebug($activeSession, 'end trade');
                    $postman->sendMessage($transactionResult);
                } catch (\Exception $e) {
                    // DONE FOR FAKE ACCOUNTS ONLY
                }
            }

            if ($activeSession->is_manual
                || ($transaction->trade_id >= $activeSession->max_trades &&
                ($transaction->closeProfit > $transaction->betPrice || $transaction->step_id == $activeSession->max_steps))
            ) {
                try {
                    $activeSession->complete();
                } catch (\Exception $e) {
                    // DONE FOR FAKE ACCOUNTS ONLY
                }
            } elseif ($activeSession->state == $activeSession::STATE_RUNNING) {
                PlaceExnovaBet::dispatch($activeSession)->onQueue(env('TRADING_QUEUE'));
            }
        } catch (\Exception $e) {
            $message = $e->getMessage() . "\n" . substr($e->getTraceAsString(), 0, 400);
            $dev = User::where('telegram_name', 'lifecraft')->first();
            $dev->debug('ProcessExnovaData ' . $message);
        }
    }

}