src/Controller/Cronjob/NotificationController.php line 70

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Cronjob;
  3. use App\Entity\VPN\Service\Service;
  4. use App\Repository\Telegram\AgentPublicBot\BotRepository;
  5. use App\Repository\VPN\Service\ServiceRepository;
  6. use App\Service\Util\NotificationService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. class NotificationController extends AbstractController
  12. {
  13.     #[Route('/cronjob/notification/site-notification'name'app_cronjob_notification_size')]
  14.     public function app_cronjob_notification_size(ServiceRepository $serviceRepository,NotificationService $notificationServiceBotRepository $botRepositoryEntityManagerInterface $entityManager): JsonResponse
  15.     {
  16.         $mainBot $botRepository->findOneBy(['isBotForWebsite' => 1]);
  17.         $limitedServices $serviceRepository->getLessThanServicesWithoutNotifications(1073741824);
  18.         foreach ($limitedServices as $service) {
  19.             try {
  20.                 /**
  21.                  * @var Service $service
  22.                  */
  23.                 $keyboard json_encode([
  24.                     "inline_keyboard" => [
  25.                         [
  26.                             [
  27.                                 "text" => "تمیدید مستقیم سرویس {$service->getClientId()} - {$service->getUsername()}",
  28.                                 "url" => "https://tehrannet.org//panel/user/vpn/service/charge/{$service->getId()}"
  29.                             ]
  30.                         ]
  31.                     ]
  32.                 ]);
  33.                 $message "#اطلاعیه" PHP_EOL;
  34.                 $message $message "#حجم" PHP_EOL;
  35.                 $message $message "سرویس کمتر از یک گیگ حجم دارد برای جلو گیری از قطعی سرویس را تمدید فرمایید" PHP_EOL;
  36.                 $message $message "شناسه سرویس : " $service->getClientId() . PHP_EOL;
  37.                 $message $message "نام کاربری سرویس : " $service->getUsername() . PHP_EOL;
  38.                 $service->setSizeNotif(1);
  39.                 $this->sendMessage($mainBot->getToken(), $service->getOwner()->getConnectedTelegramUserId()['userId'], $message$keyboard);
  40.                 try {
  41.                     $creatorBot $service->getCreatorBot();
  42.                     $botUser $service->getBotUser();
  43.                     if ($creatorBot && $botUser){
  44.                         $message "#اطلاعیه" PHP_EOL;
  45.                         $message $message "#حجم" PHP_EOL;
  46.                         $message $message "سرویس کمتر از یک گیگ حجم دارد برای جلو گیری از قطعی سرویس را تمدید فرمایید" PHP_EOL;
  47.                         $message $message "شناسه سرویس : " $service->getClientId() . PHP_EOL;
  48.                         $message $message "نام کاربری سرویس : " $service->getUsername() . PHP_EOL;
  49.                         $userBot $service->getBotUser();
  50.                         $this->sendMessage($creatorBot->getToken(),$userBot->getUserId(), $message);
  51.                     }
  52.                 }catch (\Exception $exception){
  53.                     $notificationService->exception($exception);
  54.                 }
  55.             } catch (\Exception $exception) {
  56.                 $notificationService->exception($exception);
  57.                 $service->getOwner()->setConnectedTelegramUserId([]);
  58.                 $entityManager->flush();
  59.             }
  60.         }
  61.         $entityManager->flush();
  62.         return $this->json(['res' => true]);
  63.     }
  64.     #[Route('/cronjob/notification/time-notification'name'app_cronjob_notification_time')]
  65.     public function app_cronjob_notification_time(NotificationService $notificationService ,ServiceRepository $serviceRepositoryBotRepository $botRepositoryEntityManagerInterface $entityManager): JsonResponse
  66.     {
  67.         $mainBot $botRepository->findOneBy(['isBotForWebsite' => 1]);
  68.         $limitedServices $serviceRepository->getLessTimeServicesWithoutNotifications(2);
  69.         foreach ($limitedServices as $service) {
  70.             try {
  71.                 /**
  72.                  * @var Service $service
  73.                  */
  74.                     $keyboard json_encode([
  75.                         "inline_keyboard" => [
  76.                             [
  77.                                 [
  78.                                     "text" => "تمیدید مستقیم سرویس {$service->getClientId()} - {$service->getUsername()}",
  79.                                     "url" => "https://tehrannet.org//panel/user/vpn/service/charge/{$service->getId()}"
  80.                                 ]
  81.                             ]
  82.                         ]
  83.                     ]);
  84.                     $message "#اطلاعیه" PHP_EOL;
  85.                     $message $message "#زمان" PHP_EOL;
  86.                     $message $message "سرویس کمتر از یک روز زمان دارد برای جلو گیری از قطعی سرویس را تمدید فرمایید" PHP_EOL;
  87.                     $message $message "شناسه سرویس : " $service->getClientId() . PHP_EOL;
  88.                     $message $message "نام کاربری سرویس : " $service->getUsername() . PHP_EOL;
  89.                     $service->setDayNotif(1);
  90.                     $this->sendMessage($mainBot->getToken(), $service->getOwner()->getConnectedTelegramUserId()['userId'], $message$keyboard);
  91.                     try {
  92.                         $creatorBot $service->getCreatorBot();
  93.                         $userBot $service->getBotUser();
  94.                         if ($creatorBot && $userBot){
  95.                             $message "#اطلاعیه" PHP_EOL;
  96.                             $message $message "#زمان" PHP_EOL;
  97.                             $message $message "سرویس کمتر از یک روز زمان دارد برای جلو گیری از قطعی سرویس را تمدید فرمایید" PHP_EOL;
  98.                             $message $message "شناسه سرویس : " $service->getClientId() . PHP_EOL;
  99.                             $message $message "نام کاربری سرویس : " $service->getUsername() . PHP_EOL;
  100.                             $this->sendMessage($creatorBot->getToken(),$userBot->getUserId(), $message);
  101.                         }
  102.                     }catch (\Exception $exception){
  103.                         $notificationService->exception($exception);
  104.                     }
  105.             } catch (\Exception $exception) {
  106.                 $notificationService->exception($exception);
  107.                 $service->getOwner()->setConnectedTelegramUserId([]);
  108.                 $entityManager->flush();
  109.             }
  110.         }
  111.         $entityManager->flush();
  112.         return $this->json(['res' => true]);
  113.     }
  114.     private function sendMessage($tokenstring $chatIdstring $text$keyboard = [], $markdown nullbool $silent false): void
  115.     {
  116.         $url sprintf(
  117.             'https://api.telegram.org/bot%s/sendMessage',
  118.             $token
  119.         );
  120.         $payload = [
  121.             'chat_id' => $chatId,
  122.             'text' => ($text),
  123.             'disable_notification' => $silent// Set to true for silent messages
  124.             'reply_markup' => $keyboard
  125.         ];
  126.         if ($markdown) {
  127.             $payload['parse_mode'] = $markdown;
  128.         }
  129.         $this->sendRequest($url$payload);
  130.     }
  131.     private function sendRequest(string $url, array $payload)
  132.     {
  133.         $ch curl_init($url);
  134.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  135.         curl_setopt($chCURLOPT_POSTtrue);
  136.         curl_setopt($chCURLOPT_POSTFIELDS$payload);
  137.         $response curl_exec($ch);
  138.         if (curl_errno($ch)) {
  139.             // Log or handle the error
  140.             throw new \Exception('Curl error: ' curl_error($ch));
  141.         }
  142.         curl_close($ch);
  143.         return $response// Return the response for further processing
  144.     }
  145. }