src/Controller/Cronjob/BanCheck/BanCheckController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Cronjob\BanCheck;
  3. use App\DependencyInjection\JDF;
  4. use App\Entity\VPN\Service\Service;
  5. use App\Repository\Telegram\AgentPublicBot\BotRepository;
  6. use App\Repository\Telegram\AgentPublicBot\BotUserRepository;
  7. use App\Repository\VPN\Service\ServiceRepository;
  8. use App\Service\SettingService;
  9. use App\Service\Util\NotificationService;
  10. use App\Service\Util\OcServSSHApi;
  11. use App\Service\Util\Telegram;
  12. use DateTimeImmutable;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Doctrine\Persistence\ManagerRegistry;
  15. use Exception;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Stopwatch\Stopwatch;
  20. class BanCheckController extends AbstractController
  21. {
  22.     public EntityManagerInterface $entityManager;
  23.     private Telegram $telegram;
  24.     public function __construct(EntityManagerInterface $entityManagerTelegram $telegram)
  25.     {
  26.         $this->entityManager $entityManager;
  27.         $this->telegram $telegram;
  28.     }
  29.     #[Route('/cronjob/ban-check'name'app_cronjob_ban_check')]
  30.     public function OcBanCheck(ServiceRepository $serviceRepository,NotificationService $notificationService\App\Repository\Generic\UserRepository $userRepositoryBotRepository $botRepositoryBotUserRepository $botUserRepository): JsonResponse
  31.     {
  32.         $now = new \DateTimeImmutable();
  33.         $jdf = new JDF();
  34. // گرفتن تاریخ امروز در جلالی
  35.         $monthNumber $jdf->trNum($jdf->date('m'));
  36.         $yearNumber $jdf->trNum($jdf->date('Y'));
  37. // گرفتن تعداد روزهای ماه جلالی
  38.         $lastDayOfMonth $jdf->trNum($jdf->date('t''''fa'$monthNumber));
  39. // پیدا کردن تاریخ آخرین روز ماه جلالی
  40.         $endJalali '1404/' $monthNumber '/' $lastDayOfMonth;
  41. // تبدیل به میلادی
  42.         [$gy$gm$gd] = $jdf->jalaliToGregorian($yearNumber$monthNumber$lastDayOfMonth);
  43.         $endDateTime = new \DateTime("$gy-$gm-$gd 23:59:59");
  44. // چک کردن پنج دقیقه آخر روز
  45.         $isLastDayOfMonth $now->format('Y-m-d') === $endDateTime->format('Y-m-d');
  46.         $isLastFiveMinutes $now->format('H:i') >= '23:55' && $isLastDayOfMonth;
  47.         if ($isLastFiveMinutes) {
  48.             foreach ($userRepository->findAll() as $user) {
  49.                 $user->setGiftWallet(0);
  50.             }
  51.         }
  52.         $this->entityManager->flush();
  53. //        دو روزه که سرویس فعال نشده
  54.         $now = new \DateTimeImmutable();
  55.         foreach ($serviceRepository->getMoreThanDaysNotStarted(2) as $service) {
  56.             /**
  57.              * @var Service $service
  58.              */
  59.             $service->setExpireAt($now->modify("+{$service->getPlan()->getDays()} day"));
  60.         }
  61.         $this->entityManager->flush();
  62.         foreach ($botRepository->findBy(['active' => 1]) as $bot) {
  63.             $bot->setUsersCount(count($botUserRepository->findBy(['active' => 1'bot' => $bot])));
  64.             $bot->setServicesCount(count($serviceRepository->findBy(['isEnabled' => 1'creatorBot' => $bot])));
  65.         }
  66.         $this->entityManager->flush();
  67.         foreach ($serviceRepository->findBy(['isEnabled' => 1]) as $service) {
  68.             $service->setUsed(
  69.                 $service->getOcServUsage() +
  70.                 $service->getV2rayUsage() +
  71.                 $service->getOpenVpnUsage()
  72.             );
  73.             if ($service->getExpireAt() == null && ((int)$service->getUsed() !== || (int)$service->getV2rayUsage() !== || (int)$service->getOpenVpnUsage() !== || (int)$service->getOcServUsage() !== 0)) {
  74.                 $now $service->getCreatedAt();
  75.                 $expiredAt $now->add(new \DateInterval("P{$service->getPlan()->getDays()}D"));
  76.                 $service->setExpireAt(new \DateTimeImmutable($expiredAt->format('Y-m-d H:i:s')));
  77.             }
  78.         }
  79.         $this->entityManager->flush();
  80.         $this->entityManager->flush();
  81.         try {
  82.             foreach ($serviceRepository->getMoreSizes() as $service) {
  83.                 /**
  84.                  * @var Service $service
  85.                  */
  86.                 $service->setIsEnabled(0);
  87.                 $mainBot $botRepository->findOneBy(['isBotForWebsite' => 1]);
  88.                 try {
  89.                     /**
  90.                      * @var Service $service
  91.                      */
  92.                     $keyboard json_encode([
  93.                         "inline_keyboard" => [
  94.                             [
  95.                                 [
  96.                                     "text" => "تمیدید مستقیم سرویس {$service->getClientId()} - {$service->getUsername()}",
  97.                                     "url" => "https://tehrannet.org/panel/user/vpn/service/charge/{$service->getId()}"
  98.                                 ]
  99.                             ]
  100.                         ]
  101.                     ]);
  102.                     $message "#اطلاعیه" PHP_EOL;
  103.                     $message $message "#پایان" PHP_EOL;
  104.                     $message $message "سرویس شما به پایان رسید برای جلو گیری از قطعی سرویس را تمدید فرمایید" PHP_EOL;
  105.                     $message $message "شناسه سرویس : " $service->getClientId() . PHP_EOL;
  106.                     $message $message "نام کاربری سرویس : " $service->getUsername() . PHP_EOL;
  107.                     $service->setDoneNotif(1);
  108.                     $this->sendMessage($mainBot->getToken(), $service->getOwner()->getConnectedTelegramUserId()['userId'], $message$keyboard);
  109.                     try {
  110.                         $creatorBot $service->getCreatorBot();
  111.                         $botUser $service->getBotUser();
  112.                         if ($creatorBot && $botUser) {
  113.                             $message "#اطلاعیه" PHP_EOL;
  114.                             $message $message "#پایان" PHP_EOL;
  115.                             $message $message "سرویس شما به پایان رسید برای جلو گیری از قطعی سرویس را تمدید فرمایید" PHP_EOL;
  116.                             $message $message "شناسه سرویس : " $service->getClientId() . PHP_EOL;
  117.                             $message $message "نام کاربری سرویس : " $service->getUsername() . PHP_EOL;
  118.                             $userBot $service->getBotUser();
  119.                             $this->sendMessage($creatorBot->getToken(), $userBot->getUserId(), $message);
  120.                         }
  121.                     } catch (\Exception $exception) {
  122.                     $notificationService->exception($exception);
  123.                     }
  124.                 } catch (\Exception $exception) {
  125.                     $notificationService->exception($exception);
  126.                     $service->getOwner()->setConnectedTelegramUserId([]);
  127.                     $this->entityManager->flush();
  128.                 }
  129.                 $this->entityManager->flush();
  130.             }
  131.             $this->entityManager->flush();
  132.             foreach ($serviceRepository->getMoreDates() as $service) {
  133.                 /**
  134.                  * @var Service $service
  135.                  */
  136.                 $service->setIsEnabled(0);
  137.                 $mainBot $botRepository->findOneBy(['isBotForWebsite' => 1]);
  138.                 try {
  139.                     /**
  140.                      * @var Service $service
  141.                      */
  142.                     $keyboard json_encode([
  143.                         "inline_keyboard" => [
  144.                             [
  145.                                 [
  146.                                     "text" => "تمیدید مستقیم سرویس {$service->getClientId()} - {$service->getUsername()}",
  147.                                     "url" => "https://tehrannet.org/panel/user/vpn/service/charge/{$service->getId()}"
  148.                                 ]
  149.                             ]
  150.                         ]
  151.                     ]);
  152.                     $message "#اطلاعیه" PHP_EOL;
  153.                     $message $message "#پایان" PHP_EOL;
  154.                     $message $message "سرویس شما به پایان رسید برای جلو گیری از قطعی سرویس را تمدید فرمایید" PHP_EOL;
  155.                     $message $message "شناسه سرویس : " $service->getClientId() . PHP_EOL;
  156.                     $message $message "نام کاربری سرویس : " $service->getUsername() . PHP_EOL;
  157.                     $service->setDoneNotif(1);
  158.                     $this->sendMessage($mainBot->getToken(), $service->getOwner()->getConnectedTelegramUserId()['userId'], $message$keyboard);
  159.                     try {
  160.                         $creatorBot $service->getCreatorBot();
  161.                         $botUser $service->getBotUser();
  162.                         if ($creatorBot && $botUser) {
  163.                             $message "#اطلاعیه" PHP_EOL;
  164.                             $message $message "#پایان" PHP_EOL;
  165.                             $message $message "سرویس شما به پایان رسید برای جلو گیری از قطعی سرویس را تمدید فرمایید" PHP_EOL;
  166.                             $message $message "شناسه سرویس : " $service->getClientId() . PHP_EOL;
  167.                             $message $message "نام کاربری سرویس : " $service->getUsername() . PHP_EOL;
  168.                             $userBot $service->getBotUser();
  169.                             $this->sendMessage($creatorBot->getToken(), $userBot->getUserId(), $message);
  170.                         }
  171.                     } catch (\Exception $exception) {
  172.     $notificationService->exception($exception);
  173.                     }
  174.                 } catch (\Exception $exception) {
  175.                     $notificationService->exception($exception);
  176.                     $service->getOwner()->setConnectedTelegramUserId([]);
  177.                     $this->entityManager->flush();
  178.                 }
  179.                 $this->entityManager->flush();
  180.             }
  181.             $this->entityManager->flush();
  182.         } catch (Exception $exception) {
  183.             $notificationService->exception($exception);
  184. //            $this->telegram->exception($exception);
  185.         }
  186.         $this->entityManager->clear();
  187.         return $this->json(['res' => true]);
  188.     }
  189.     public function sendMessageToKhan($text$userId)
  190.     {
  191.         $khanToken '7643631774:AAHCQFpLwIDEyPGeljpCRIvlOolgxZD2jhk';
  192.         $khanUsername "@khanvpn_official";
  193.         try {
  194.             $this->bot('sendMessage', [
  195.                 'chat_id' => $userId,
  196.                 'text' => $text,
  197.                 'reply_markup' => json_encode([
  198.                         "inline_keyboard" => [
  199.                             [
  200.                                 [
  201.                                     "text" => "شروع",
  202.                                     "callback_data" => "/start"
  203.                                 ]
  204.                             ]
  205.                         ]]
  206.                 )
  207.             ], $khanToken);
  208.         } catch (\Exception $exception) {
  209. //            $telegramUser->setActive(0);
  210. //            $telegramUser->setDeletedAt(new \DateTime());
  211. //            $this->entityManager->flush();
  212.         }
  213.     }
  214.     public function bot($method$data$token null): bool|string
  215.     {
  216.         $setting = new SettingService($this->entityManager);
  217.         if ($token == null) {
  218.             $token $setting->getSetting('superBotToken');
  219.         }
  220.         $telegramApiUrl 'https://api.telegram.org/bot' $token '/';
  221.         return file_get_contents($telegramApiUrl $method '?' str_replace('&amp;''&'http_build_query($data)));
  222.     }
  223.     private function sendMessage($tokenstring $chatIdstring $text$keyboard = [], $markdown nullbool $silent false): void
  224.     {
  225.         $url sprintf(
  226.             'https://api.telegram.org/bot%s/sendMessage',
  227.             $token
  228.         );
  229.         $payload = [
  230.             'chat_id' => $chatId,
  231.             'text' => ($text),
  232.             'disable_notification' => $silent// Set to true for silent messages
  233.             'reply_markup' => $keyboard
  234.         ];
  235.         if ($markdown) {
  236.             $payload['parse_mode'] = $markdown;
  237.         }
  238.         $this->sendRequest($url$payload);
  239.     }
  240.     private function sendRequest(string $url, array $payload)
  241.     {
  242.         $ch curl_init($url);
  243.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  244.         curl_setopt($chCURLOPT_POSTtrue);
  245.         curl_setopt($chCURLOPT_POSTFIELDS$payload);
  246.         $response curl_exec($ch);
  247.         if (curl_errno($ch)) {
  248.             // Log or handle the error
  249.             throw new \Exception('Curl error: ' curl_error($ch));
  250.         }
  251.         curl_close($ch);
  252.         return $response// Return the response for further processing
  253.     }
  254. }