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);
}
}
}