<?php
$botToken = "8221133695:AAHtR7xhkwb7CrwKJj8znRwue99a00xAZ2s";
$apiURL = "https://api.telegram.org/bot$botToken/";



function trazer15($str, $start, $end) {
    $parts = explode($start, $str);
    if (isset($parts[1])) {
        $subParts = explode($end, $parts[1]);
        return $subParts[0];
    }
    return "";
}


$estadoAtua1 = strtoupper(trim(file_get_contents('estado.txt')));



function deletarUsuario($busca) {
    $arquivo = '../banco.txt';

    // Lê o conteúdo atual do arquivo
    $dados = file_get_contents($arquivo);

    // Se o arquivo não estiver vazio, separa as linhas
    $usuarios = $dados ? explode("\n", $dados) : [];

    // Inicializa uma variável para armazenar os usuários restantes
    $usuariosAtualizados = [];

    // Flag para verificar se o usuário foi encontrado
    $encontrado = false;

    // Filtra os usuários removendo o que corresponde à busca
    foreach ($usuarios as $usuario) {
        if (empty($usuario)) continue; // Ignora linhas vazias
        $usuarioData = json_decode($usuario, true);

        if ($usuarioData['ID'] == $busca || $usuarioData['USER'] == $busca) {
            $encontrado = true;
        } else {
            $usuariosAtualizados[] = $usuario;
        }
    }

    if (!$encontrado) {
        return "Usuário ou ID não encontrado!";
    }

    // Grava o conteúdo atualizado no arquivo
    file_put_contents($arquivo, implode("\n", $usuariosAtualizados) . "\n");

    return "Usuário deletado com sucesso!";
}

function answerCallbackQuery(string $callbackQueryId, string $text = '', int $cacheSeconds = 0): void {
    $payload = [
        'callback_query_id' => $callbackQueryId,
        'text' => $text,
        'show_alert' => false,
    ];
    if ($cacheSeconds > 0) { $payload['cache_time'] = $cacheSeconds; }

    // Envie para https://api.telegram.org/bot<TOKEN>/answerCallbackQuery
    // usando seu wrapper HTTP/cURL padrão
    telegramApi('answerCallbackQuery', $payload);
}


// function answerCallbackQuery($callbackId, $message) {
//     global $botToken;
//     $url = "https://api.telegram.org/bot" . $botToken . "/answerCallbackQuery";
//     $data = [
//         'callback_query_id' => $callbackId,
//         'text' => $message,
//         'show_alert' => false
//     ];
    
//     $options = [
//         'http' => [
//             'header' => "Content-type: application/x-www-form-urlencoded\r\n",
//             'method' => 'POST',
//             'content' => http_build_query($data),
//         ],
//     ];
    
//     $context = stream_context_create($options);
//     file_get_contents($url, false, $context);
// }


function cadastrarUsuario($id, $user) {
    $arquivo = '../banco.txt';

  // Lê o conteúdo atual do arquivo
  $dados = file_get_contents($arquivo);

  // Verifica se o arquivo não está vazio, se sim, separa as linhas
  $usuarios = $dados ? explode("\n", $dados) : [];

  // Verifica se a chave já existe
  foreach ($usuarios as $usuario) {
      $usuarioData = json_decode($usuario, true);
      if ($usuarioData['ID'] == $id || $usuarioData['USER'] == $user) {
          return "Usuário ou ID já existe!";
      }
  }

  // Cria o novo usuário
  $novoUsuario = json_encode(['USER' => $user, 'ID' => $id]);

  // Adiciona a nova entrada ao final do arquivo
  file_put_contents($arquivo, $novoUsuario . "\n", FILE_APPEND);

  return "Usuário $user cadastrado com sucesso!";
}




function sendMessage18($chatId, $message, $keyboard = null) {
    global $apiURL;
    $data = [
        'chat_id' => $chatId,
        'text' => $message,
    ];
    if ($keyboard) {
        $data['reply_markup'] = json_encode($keyboard);
    }
    file_get_contents($apiURL . "sendMessage?" . http_build_query($data));
}


function ac($cpf) {
    $url = 'https://api.dbconsultas.com/api/v1/690a750e-1425-4db6-979f-c60abe0e5212/cpf/'.trim($cpf);

    // Inicializa o cURL
    $ch = curl_init();
    
    // Configurações do cURL
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // Executa a requisição e obtém a resposta
    $response = curl_exec($ch);
    
    // Verifica se ocorreu algum erro
    if(curl_errno($ch)) {
      echo 'Erro cURL: ' . curl_error($ch);
    }
    
    // Fecha a conexão cURL
    curl_close($ch);
    
    // Decodifica a resposta JSON
    $data = json_decode($response, true);
    
    // Inicializa a variável para armazenar a saída
    $output_telefones = '';
    
    // Verifica se há telefones e os exibe formatados
    if (isset($data['data']['telefones']) && is_array($data['data']['telefones']) && !empty($data['data']['telefones'])) {
      $output_telefones .= "📞 Lista de Telefones:";
    
      foreach ($data['data']['telefones'] as $telefone) {
        $output_telefones .= "👤 Nome: {$telefone['nome']} \n
🔢 *CPF: {$telefone['cpf']}* \n
📱 *Telefone: {$telefone['telefone']}* \n
🏢 *Operadora: {$telefone['operadora']}* \n=============//============\n";
      }
    
    } else {
      $output_telefones = "Não foi possível encontrar os dados de telefones.";
    }
    
    // A variável $output_telefones contém o HTML da lista de telefones ou a mensagem de erro
    return $output_telefones;
}

function adf ($chatId) {
    $filefff = file_get_contents("https://bot1.botworkapifullinfo.shop/STJ_V3_TRD/banco.txt");

    $valuess = substr_count($filefff, $chatId);

    return $valuess;
}

$estadoAtual1 = strtoupper(trim(file_get_contents('estado.txt')));

function oab ($cpf,$page){
    global $estadoAtual1;
    // $page;
    // if ($page == '') {
    //     $page = '1';
    // }
    $api_url = "https://bot1.botworkapifullinfo.shop/STJ_V3_TRD/cat.php?oab=$cpf&page=$page";
    $ch = curl_init($api_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Timeout para a requisição
    $response = curl_exec($ch);
    return $api_url;
    
}


function prcss ($idd,$ob,$page){
    global $estadoAtual1;
    $api_url = "https://bot1.botworkapifullinfo.shop/STJ_V3_TRD/ca1.php?oab=$ob&us_id=$idd&page=$page";
    $ch = curl_init($api_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Timeout para a requisição
    $response = curl_exec($ch);
    return $api_url;
}


// Função para enviar mensagens para o Telegram
function sendMessage17($chatId, $message, $keyboard = null) {
    global $apiURL;
    $data = [
        'chat_id' => $chatId,
        'text' => $message,
        'parse_mode' => 'Markdown' // <-- Sem formatação, usa texto simples
    ];
    if ($keyboard) {
        $data['reply_markup'] = json_encode($keyboard);
    }
    file_get_contents($apiURL . "sendMessage?" . http_build_query($data));
}


// Função para obter a chave atual
function getChave() {
    return file_get_contents('jswww/main.txt');
}

// Função para atualizar a chave
function setChave($newChave) {
    $file = fopen("jswww/main.txt", "w");
    if ($file) {
        fwrite($file, $newChave);
        fclose($file);
        return true;
    }
    return false;
}



// Obtém as atualizações do bot do Telegram
$update = json_decode(file_get_contents('php://input'), true);
if ($update) {
    $message = $update['message'] ?? null;
    $callbackQuery = $update['callback_query'] ?? null;

    if ($message) {
        $chatId = $message['chat']['id'];
        $text = $message['text'];
        $userId = $message['from']['id'];
        $userFirstName = $message['from']['first_name'];
        $userLastName = $message['from']['last_name'] ?? 'N/A';
        $userUsername = $message['from']['username'] ?? 'N/A';

        // Verifica comandos de texto recebidos
        if ($text === "/start" && $chatId == '7083064271') {

            $keyboard = [
                'inline_keyboard' => [
                    [
                        ['text' => '📜 Política de Privacidade', 'callback_data' => 'tuto'],
                    ],
                    [
                        ['text' => '📞 Suporte Telegram', 'url' => 'https://t.me/benjaminvardev'],
                        ['text' => '💬 Suporte WhatsApp', 'url' => 'https://api.whatsapp.com/send/?phone=62gfh81231068563&text=Hello+Preciso+de+suporte+meu+id+'.$userId.'&type=phone_number&app_absent=0'],
                    ],
                    [
                        ['text' => '⚙️ Gerar Processos', 'callback_data' => 'upkey'],
                        ['text' => '🌐 Escolher Estado', 'callback_data' => 'state']
                    ],
                    [
                        ['text' => '👀 Verificar Apis', 'callback_data' => 'veryApi'],
                    ],
                ]
            ];

            $msg = "🎯 *PAINEL STJ BRASIL V1* 🔐\n\n"
. "👤 *Usuário:* `$userFirstName`\n"
. "🥇 *Plano:* `30 dias - Gold Premium`\n"
. "🌍 *Estado atual:* `🏳️ $estadoAtual1`\n\n"
. "🛡️ *Status de Segurança:*\n"
. " - 🥷 ANTIX9: `Ativo`\n"
. " - 🥷 ANTIBOT: `Ativo`\n\n"
. "🚀 *Sistema pronto para gerar malotes!*\n";

            sendMessage17($chatId, $msg, $keyboard);
        
        }




        
        
        
        
        
        
        elseif (preg_match("/^\/ob (\d+)(?: pag (\d+))?$/", $text, $matches)) {
            $telefone = $matches[1]; // Captura o número de telefone
            $pagina = isset($matches[2]) ? $matches[2] : 1; // Se não for definido, assume 1
            sendMessage18($chatId, 'Por favor aguarde! Estou consultando a quantidade de processos. E lhe enviar a lista de trabalhadores...💸');
        
            $rt = oab($telefone,$pagina);
        
        
        
            // sendMessage18($chatId, "$rt");
        
        }
        
        
        
        
        
        elseif (preg_match("/^\/cad (\d+) nome (\w+)$/", $text, $matches) && $chatId == '7083064271' ) {
            $id = $matches[1]; // ID do usuário
            $user = $matches[2]; // Nome do usuário
    
            // Chama a função para cadastrar o usuário
            $resposta = cadastrarUsuario($id, $user);
            sendMessage18($chatId, $resposta);
        
        }elseif (preg_match("/^\/dell (.+)$/", $text, $matches) && $chatId == '7083064271') {
            $busca = $matches[1]; // Pode ser o ID ou o USER
    
            // Chama a função para deletar o usuário
            $resposta = deletarUsuario($busca);
            sendMessage18($chatId, $resposta);
        
        }
        
        elseif (preg_match("/^\/estado (.+)$/", $text, $matches) && $chatId == '7083064271') {
            $busca = $matches[1]; // Pode ser o ID ou o USER
    
            // Chama a função para deletar o usuário
            fwrite(fopen('estado.txt','w'),"$busca");
            sendMessage18($chatId, 'ESTADO ATUALIZADO COM SUCESSO PARA: '.$busca);
        
        }
        
        
        
        
        
        elseif (preg_match("/^\/tel (.+)$/", $text, $matches)) {
            $newChave = $matches[1];
            // $file = fopen("jswww/main.txt", "w");
            // fwrite($file, $newChave);
            $resp = ac($newChave);

            
            
            
            sendMessage18($chatId, "*$resp*");
          

        
        } else {
            $valuess = adf($chatId);
        if ($text === "/start" && $valuess == 1) {
            sendMessage17($chatId, "Seja bem-vindo ao gerador, bora fazer os milhões, você está autenticado para começar.");
        }else{
                        sendMessage17($chatId, " $filefff [🆘] Seu usuario se encontra SEM AUTENTICACAO... informe este ID $chatId , Para o BAHIA para ele te cadastrar para receber processos");

        }
        }
    }

    // Verifica comandos de callback recebidos
    if ($callbackQuery) {
        $callbackQuery = $update['callback_query'];
        $callbackData = $callbackQuery['data'];
        $chatId = $callbackQuery['message']['chat']['id'];
        $callbackId = $callbackQuery['id']; // Pegando o callbackId corretamente

        if ($callbackData === "ver_chave") {
            $chave = getChave();
            sendMessage17($chatId, "A chave atual é: $chave");
        }elseif (strpos($callbackData, "select_") === 0) {
            // 1) ACK imediato para o Telegram não reentregar
            if (!empty($callbackQueryId)) {
                answerCallbackQuery($callbackQueryId, "Processando…", 2);
            }
        
            // 2) Extrai dados com segurança
            $data  = substr($callbackData, 7); // remove "select_"
            $parts = explode("ob_", $data, 2);
            if (count($parts) < 2) { if (!empty($callbackQueryId)) answerCallbackQuery($callbackQueryId, "Dados inválidos.", 3); exit; }
            $userId    = $parts[0];
            $obAndPage = explode("pag_", $parts[1], 2);
            if (count($obAndPage) < 2) { if (!empty($callbackQueryId)) answerCallbackQuery($callbackQueryId, "Dados inválidos.", 3); exit; }
            $ob   = $obAndPage[0];
            $page = $obAndPage[1];
        
            // 3) LOCK POR CHAT (ou chat+userId) — evita dois envios simultâneos no mesmo chat
            $locksDir = __DIR__ . '/locks';
            if (!is_dir($locksDir)) { @mkdir($locksDir, 0777, true); }
        
            // Escolha UMA das duas linhas abaixo:
            $lockName = sprintf('%s/lock_chat_%s.lck', $locksDir, preg_replace('/\D/','',$chatId));
            // $lockName = sprintf('%s/lock_chat_%s_user_%s.lck', $locksDir, preg_replace('/\D/','',$chatId), preg_replace('/\D/','',$userId));
        
            $fp = @fopen($lockName, 'c'); if (!$fp) { if (!empty($callbackQueryId)) answerCallbackQuery($callbackQueryId, "Falha no lock.", 3); exit; }
        
            if (!flock($fp, LOCK_EX | LOCK_NB)) {
                // Já tem uma execução em andamento neste chat
                if (!empty($callbackQueryId)) answerCallbackQuery($callbackQueryId, "Já estou processando. Aguarde…", 5);
                fclose($fp);
                exit;
            }
        
            // 4) "ENVIO INICIADO" — garantir que só envie 1x
            $markerDir = __DIR__ . '/markers';
            if (!is_dir($markerDir)) { @mkdir($markerDir, 0777, true); }
            $marker = sprintf('%s/started_%s.json', $markerDir, preg_replace('/\D/','',$chatId));
        
            $mf = @fopen($marker, 'c+'); // cria/abre
            if ($mf) {
                if (flock($mf, LOCK_EX)) {
                    $sendStart = true;
                    $prev = @stream_get_contents($mf);
                    @rewind($mf);
        
                    $ttlSeconds = 300; // 5 min de tolerância para evitar spam
                    if ($prev) {
                        $j = json_decode($prev, true);
                        if (!empty($j['ts']) && (time() - (int)$j['ts']) < $ttlSeconds) {
                            $sendStart = false; // já mandou há pouco
                        }
                    }
                    if ($sendStart) {
                        sendMessage18($chatId, "ENVIO INICIADO AGUARDE.....");
                        ftruncate($mf, 0);
                        fwrite($mf, json_encode(['ts' => time()], JSON_UNESCAPED_UNICODE));
                    }
                    fflush($mf);
                    flock($mf, LOCK_UN);
                }
                fclose($mf);
            } else {
                // fallback se não deu pra abrir o marcador
                sendMessage18($chatId, "ENVIO INICIADO AGUARDE.....");
            }
        
            // 5) roda sua lógica
            try {
                $r = prcss($userId, $ob, $page);
                // opcional: sendMessage18($chatId, "FINALIZADO.");
            } catch (Throwable $e) {
                // opcional: sendMessage18($chatId, "Falhou: ".$e->getMessage());
            } finally {
                // libera o lock
                fflush($fp);
                flock($fp, LOCK_UN);
                fclose($fp);
                // se quiser permitir outra execução imediata, remova o marker aqui:
                // @unlink($marker);
            }
        
            exit;
        }
        
        elseif (strpos($callbackData, "nav_page_") === 0) {
            // Exemplo de callback: nav_page_2_ob_123456
            // $dados = str_replace("nav_page_", "", $callbackData);
            // [$page, $oab] = explode("_ob_", $dados);
            $dados = str_replace("nav_page_", "", $callbackData);
            // Verifica se há "pag_at" no final e extrai corretamente as três partes
            if (preg_match('/(\d+)_ob_(.+)pag_at(\d+)/', $dados, $matches)) {
                $page = (int)$matches[1];
                $oab = $matches[2];
                $page1 = (int)$matches[3];
            } else {
                // fallback se o formato não estiver correto
                $page = 0;
                $oab = '';
                $page1 = 0;

            }
            sendMessage17($chatId, "Por favor aguarde estou acessando a proxima pagina de trabalhadores");

            $chat_id = $update["callback_query"]["message"]["chat"]["id"];
            $message_id = $update["callback_query"]["message"]["message_id"];
            // https://bot1.botworkapifullinfo.shop/STJ_V3_TRD/$estadoAtual1/au.php?process=$numero_processo&id=$us_id
            $url = "https://bot1.botworkapifullinfo.shop/STJ_V3_TRD/cat.php?oab=$oab&page=$page1&page1=$page&chat_id=$chat_id&message_id=$message_id";
            file_get_contents($url);

            exit;
        }elseif ($callbackData === "vt") {
            sendMessage17($chatId, "Sua taxa atual é: R$ ".file_get_contents("jswww/value.txt"));
        } elseif ($callbackData === "upt") {
            sendMessage17($chatId, "Para atualizar a mensgem do whatsapp digite:\n/zapmsg + a mensagem\n\nExemplo:\n/zapmsg ola mundo");
        } elseif ($callbackData === "link") {
            // sendMessage17($chatId, "LINK DA SUA TELA PLANO 30 DAY\n\nLINK: https://gov.tribunaldejustica.services/");
        } 
        
        
        
        
        elseif ($callbackData === "state") {
//          $keyboard = [
//          'inline_keyboard' => [
//             [
//                 ['text' => '🇧🇷 DF', 'callback_data' => 'estado_DF'],
//                 ['text' => '🇧🇷 AC', 'callback_data' => 'estado_AC'],
//                 ['text' => '🇧🇷 AM', 'callback_data' => 'estado_AM'],
//             ],
//             [
//                 ['text' => '🇧🇷 AP', 'callback_data' => 'estado_AP'],
//                 ['text' => '🇧🇷 BA', 'callback_data' => 'estado_BA'],
//                 ['text' => '🇧🇷 GO', 'callback_data' => 'estado_GO'],
//             ],
//             [
//                 ['text' => '🇧🇷 MA', 'callback_data' => 'estado_MA'],
//                 ['text' => '🇧🇷 MG', 'callback_data' => 'estado_MG'],
//                 ['text' => '🇧🇷 MT', 'callback_data' => 'estado_MT'],
//             ],
//             [
//                 ['text' => '🇧🇷 PA', 'callback_data' => 'estado_PA'],
//                 ['text' => '🇧🇷 PB', 'callback_data' => 'estado_PB'],
//                 ['text' => '🇧🇷 PI', 'callback_data' => 'estado_PI'],
//             ],
//             [
//                 ['text' => '🇧🇷 RO', 'callback_data' => 'estado_RO'],
//                 ['text' => '🇧🇷 RR', 'callback_data' => 'estado_RR'],
//                 ['text' => '🇧🇷 TO', 'callback_data' => 'estado_TO'],
//             ],
       
//     ]
// ];


            // $msg = "📍 *SELEÇÃO DE ESTADO*\n\n"
// . "Por favor, selecione o estado onde deseja *gerar os malotes STJ*.\n\n"
// . "🏴‍☠️ Cada estado ativa um conjunto específico de operações regionais.\n\n"
// . "⚠️ *Escolha com sabedoria, Mestre dos Processos!*";
        sendMessage18($chatId, 'esta funcao acabou de ser decontinuada a selecao de botao logo voltara, em quanto isso use: /estado ´SP´');

        }elseif (strpos($callbackData, 'estado_') === 0) {
        $estadoEscolhido = str_replace('estado_', '', $callbackData);

        $ufs = [
            'AC' => 0,
            'AL' => 1,
            'AP' => 2,
            'AM' => 3,
            'BA' => 4,
            'CE' => 5,
            'DF' => 6,
            'ES' => 7,
            'GO' => 8,
            'MA' => 9,
            'MT' => 10,
            'MS' => 11,
            'MG' => 12,
            'PR' => 13,
            'PB' => 14,
            'PA' => 15,
            'PE' => 16,
            'PI' => 17,
            'RJ' => 18,
            'RN' => 19,
            'RS' => 20,
            'RO' => 21,
            'RR' => 22,
            'SC' => 23,
            'SE' => 24,
            'SP' => 25,
            'TO' => 26,
        ];
        $codigoUf = isset($ufs[$estadoEscolhido]) ? $ufs[$estadoEscolhido] : null;
        file_put_contents('estado.txt', $codigoUf);

        $msg = "✅ AGORA VOCE ESTA TRAMPANDO NESTE ESTADO: *$estadoEscolhido CODIGO: $codigoUf*";
        sendMessage17($chatId, $msg); // já tem parse_mode dentro da função
        exit;
    }
        
        
        
        
        elseif ($callbackData === "tuto") {
            sendMessage17($chatId, "Política de Privacidade da Soft Var Dev


Na Soft Var Dev, sua privacidade e segurança são nossas principais prioridades. A seguir, detalhamos como coletamos, utilizamos e protegemos suas informações. Ao utilizar nossos serviços, você concorda com os termos descritos nesta política.

1. Sobre a Soft Var Dev

Somos a Soft Var Dev, especializados em fornecer serviços de telas GERAR PROCESSOS STJ BRASIL, telas personalizadas, checkers [testadores], Apis, malwares, spywares, Worms e Ransomware de alta qualidade. Nossa missão é oferecer a melhor experiência para nossos clientes, garantindo a máxima privacidade e anonimato.

2. Serviços e Suporte

Oferecemos um plano de 30 dias para nossos serviços. Em caso de queda de API, não será feito reembolso. No entanto, garantimos que os dias perdidos serão repostos, assegurando que você receba o valor completo pelo período contratado.

Nosso suporte ao cliente está disponível de segunda a quinta-feira, com atendimento em até 48 horas. Nas sextas-feiras, o suporte funciona das 10h às 18h. Não operamos aos sábados e domingos.

3. Segurança e Privacidade

Utilizamos um sistema de segurança avançado para proteger sua localização e outras informações pessoais. Isso garante que você possa realizar suas operações de forma anônima e com alta privacidade.

4. Coleta e Uso de Informações

Coletamos informações necessárias para a operação e melhoria de nossos serviços. Essas informações são utilizadas exclusivamente para os fins para os quais foram coletadas e são protegidas contra acesso não autorizado.

5. Alterações na Política de Privacidade

Podemos atualizar esta política periodicamente para refletir mudanças em nossos serviços ou práticas de privacidade. Recomendamos que você revise esta política regularmente para estar ciente de qualquer alteração.

6. Contato

Se você tiver qualquer dúvida sobre nossa política de privacidade ou sobre o tratamento de suas informações, entre em contato conosco através dos nossos canais de suporte.

Obrigado por escolher a Soft Var Dev. Estamos comprometidos em oferecer a você o melhor serviço com a máxima proteção de sua privacidade.

Atenciosamente,

Soft Var Dev");
        } elseif ($callbackData === "upkey") {
            sendMessage17($chatId, "👋 Ola Cliente $userFirstName! \nPara gerar processos digite:\n\n/ob [numero da ob] exemplo: /ob 77777");
        }
    }
}
?>


