[
"title" => "Ferrari Diamante Nobile",
"description" => "Edição exclusiva de altíssimo prestígio",
"image_url" => "https://bit.ly/4rvA2pq"
],
2 => [
"title" => "Relógio de Luxo",
"description" => "Peça sofisticada de elevadíssimo padrão",
"image_url" => "https://bit.ly/4AzzcMB"
],
3 => [
"title" => "Iphone de Luxo",
"description" => "Edição especial de prestígio absoluto",
"image_url" => "https://bit.ly/4rHc62E"
]
];
// Calcula o índice do prêmio a partir de 26/09/2026 (Dia 1)
$startDate = new DateTime('2026-09-26');
$todayDate = new DateTime($today);
$daysDiff = (int) $startDate->diff($todayDate)->days;
$prizeIndex = ($daysDiff % 3) + 1;
$todayPrize = $prizes[$prizeIndex];
function callGroq($messages, $temperature = 0.6) {
global $groqApiKey, $model, $endpointUrl;
if (empty($groqApiKey)) {
return ["error" => "Chave do Groq não configurada"];
}
$data = [
"model" => $model,
"messages" => $messages,
"temperature" => $temperature,
"max_tokens" => 900
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $endpointUrl,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 50,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Authorization: Bearer " . trim($groqApiKey)
]
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
curl_close($ch);
if ($curlError) return ["error" => "Erro de conexão: " . $curlError];
if ($httpCode !== 200) return ["error" => "Erro HTTP $httpCode", "details" => $response];
$decoded = json_decode($response, true);
return $decoded ?: ["error" => "Resposta inválida da API"];
}
function getDailyData() {
global $dataFile, $today, $todayPrize;
$secretWord = null;
if (file_exists($dataFile)) {
$existing = json_decode(file_get_contents($dataFile), true);
if ($existing && !empty($existing['secret_word'])) {
$secretWord = $existing['secret_word'];
}
}
if (!$secretWord) {
$system = "Você é o criador do jogo diário de palavras.
Responda APENAS com um JSON válido.
Gere uma palavra secreta: substantivo comum em português, interessante, entre 5 e 11 letras, evite palavras muito comuns.
Formato:
{
\"secret_word\": \"palavra\"
}";
$result = callGroq([
["role" => "system", "content" => $system],
["role" => "user", "content" => "Gere a palavra secreta do dia $today. Seja original."]
], 0.9);
if (isset($result['error'])) {
return ["error" => $result['error']];
}
$content = trim($result['choices'][0]['message']['content'] ?? '');
if (preg_match('/\{.*\}/s', $content, $matches)) {
$content = $matches[0];
}
$parsed = json_decode($content, true);
if (!$parsed || empty($parsed['secret_word'])) {
return ["error" => "Falha ao gerar a palavra do dia"];
}
$secretWord = mb_strtolower(trim($parsed['secret_word']));
}
// Sempre força o prêmio correto do dia
$dailyData = [
"date" => $today,
"secret_word" => $secretWord,
"prize_title" => $todayPrize['title'],
"prize_description" => $todayPrize['description'],
"image_url" => $todayPrize['image_url'],
"generated_at" => date('c')
];
file_put_contents($dataFile, json_encode($dailyData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
return $dailyData;
}
function generateExtraWord() {
// Gera palavras com maior variedade
$system = "Gere uma palavra secreta DIFERENTE e pouco comum.
Deve ser um substantivo comum em português, entre 5 e 11 letras.
Evite palavras muito frequentes como: casa, água, terra, fogo, cachorro, gato, livro, mesa, carro, etc.
Responda APENAS com JSON:
{
\"secret_word\": \"palavra\"
}";
$result = callGroq([
["role" => "system", "content" => $system],
["role" => "user", "content" => "Gere uma palavra secreta original e diferente para treino. Seed: " . rand(10000, 99999)]
], 0.95);
if (isset($result['error'])) return null;
$content = trim($result['choices'][0]['message']['content'] ?? '');
if (preg_match('/\{.*\}/s', $content, $matches)) {
$content = $matches[0];
}
$parsed = json_decode($content, true);
return isset($parsed['secret_word']) ? mb_strtolower(trim($parsed['secret_word'])) : null;
}
function hasPlayedToday($userId) {
global $playsDir, $today;
$file = $playsDir . '/' . $today . '_' . md5($userId) . '.txt';
return file_exists($file);
}
function markAsPlayed($userId) {
global $playsDir, $today;
$file = $playsDir . '/' . $today . '_' . md5($userId) . '.txt';
file_put_contents($file, date('c'));
}
// ==================== ROTAS ====================
$rawInput = file_get_contents('php://input');
$input = json_decode($rawInput, true) ?: $_POST;
$acao = $input['acao'] ?? $_GET['acao'] ?? '';
$userId = isset($input['user_id']) ? substr(preg_replace('/[^a-zA-Z0-9_\-]/', '', $input['user_id']), 0, 50) : 'anon';
$isExtraRound = !empty($input['extra_round']);
if ($acao === 'get_daily' || $acao === '') {
$data = getDailyData();
if (isset($data['error'])) {
echo json_encode($data);
exit;
}
unset($data['secret_word']);
$data['already_played'] = hasPlayedToday($userId);
echo json_encode($data);
exit;
}
if ($acao === 'new_extra_word') {
$word = generateExtraWord();
if (!$word) {
echo json_encode(["error" => "Não foi possível gerar nova palavra"]);
exit;
}
echo json_encode(["secret_word" => $word]);
exit;
}
if ($acao === 'guess') {
$guess = isset($input['guess']) ? mb_strtolower(trim($input['guess'])) : '';
if (empty($guess)) {
echo json_encode(["error" => "Digite um palpite"]);
exit;
}
if (!$isExtraRound) {
if (hasPlayedToday($userId)) {
echo json_encode(["error" => "Você já concluiu o desafio de hoje."]);
exit;
}
$data = getDailyData();
if (isset($data['error'])) {
echo json_encode($data);
exit;
}
$secret = $data['secret_word'];
} else {
$secret = isset($input['current_secret']) ? mb_strtolower(trim($input['current_secret'])) : '';
if (empty($secret)) {
echo json_encode(["error" => "Erro na rodada extra"]);
exit;
}
}
// Acertou
if ($guess === $secret) {
if (!$isExtraRound) {
markAsPlayed($userId);
$data = getDailyData();
echo json_encode([
"correct" => true,
"score" => 100,
"message" => "Excelente. Você descobriu a palavra secreta.",
"prize_title" => $data['prize_title'],
"prize_description" => $data['prize_description'],
"image_url" => $data['image_url'],
"secret_word" => $secret,
"is_extra" => false
]);
} else {
echo json_encode([
"correct" => true,
"score" => 100,
"message" => "Palavra correta! (Rodada extra)",
"is_extra" => true
]);
}
exit;
}
// Verifica palavra inventada
$checkSystem = "Analise se a palavra é real em português ou inventada/sem sentido.
Responda APENAS com JSON:
Se for inventada, com números ou sem sentido:
{\"valid\": false, \"message\": \"Esta combinação não corresponde a nenhuma palavra conhecida.\"}
Se for palavra real ou plausível:
{\"valid\": true}";
$checkResult = callGroq([
["role" => "system", "content" => $checkSystem],
["role" => "user", "content" => "Palavra: \"$guess\""]
], 0.1);
if (!isset($checkResult['error'])) {
$checkContent = trim($checkResult['choices'][0]['message']['content'] ?? '');
if (preg_match('/\{.*\}/s', $checkContent, $m)) {
$checkParsed = json_decode($m[0], true);
if (isset($checkParsed['valid']) && $checkParsed['valid'] === false) {
echo json_encode([
"correct" => false,
"score" => 0,
"feedback" => $checkParsed['message'] ?? "Esta combinação não corresponde a nenhuma palavra conhecida."
]);
exit;
}
}
}
// Avaliação semântica
$system = "Você é um especialista em semântica da língua portuguesa.
Avalie a proximidade de significado entre a palavra secreta e o palpite.
Considere sinônimos, campos semânticos e relações reais.
NUNCA mencione a palavra secreta no feedback.
Responda APENAS com JSON:
{
\"score\": 75,
\"feedback\": \"Frase curta e profissional (máximo 11 palavras)\"
}";
$result = callGroq([
["role" => "system", "content" => $system],
["role" => "user", "content" => "Palavra secreta: \"$secret\"\nPalpite do usuário: \"$guess\""]
], 0.2);
if (isset($result['error'])) {
echo json_encode(["error" => $result['error']]);
exit;
}
$content = trim($result['choices'][0]['message']['content'] ?? '');
if (preg_match('/\{.*\}/s', $content, $matches)) {
$content = $matches[0];
}
$parsed = json_decode($content, true);
$score = isset($parsed['score']) ? max(0, min(99, intval($parsed['score']))) : 30;
$feedback = $parsed['feedback'] ?? "Continue analisando as possibilidades.";
$feedback = str_ireplace($secret, '***', $feedback);
echo json_encode([
"correct" => false,
"score" => $score,
"feedback" => $feedback
]);
exit;
}
if ($acao === 'hint') {
$secret = null;
// Prioriza a palavra da rodada extra se estiver em modo extra
if ($isExtraRound && !empty($input['current_secret'])) {
$secret = mb_strtolower(trim($input['current_secret']));
} else {
$data = getDailyData();
if (isset($data['error'])) {
echo json_encode($data);
exit;
}
$secret = $data['secret_word'];
}
if (!$secret) {
echo json_encode(["hint" => "Não foi possível gerar a dica no momento."]);
exit;
}
$system = "Você é um mestre de dicas inteligente.
Forneça UMA dica útil que ajude o jogador a se aproximar da palavra, sem revelá-la.
A dica deve dar um norte real (categoria, contexto de uso ou característica importante).
Nunca diga a palavra secreta nem sinônimos muito óbvios.
Tom: claro, profissional e direto.
Máximo 13 palavras.
Responda apenas com o texto da dica.";
$result = callGroq([
["role" => "system", "content" => $system],
["role" => "user", "content" => "Palavra secreta: \"$secret\". Dê uma dica útil e inteligente."]
], 0.55);
$hint = trim($result['choices'][0]['message']['content'] ?? 'Pense na categoria ou no contexto de uso da palavra.');
$hint = trim($hint, " \t\n\r\0\x0B\"'");
$hint = str_ireplace($secret, '***', $hint);
echo json_encode(["hint" => $hint]);
exit;
}
if ($acao === 'reveal') {
$data = getDailyData();
if (isset($data['error'])) {
echo json_encode($data);
exit;
}
echo json_encode(["secret_word" => $data['secret_word']]);
exit;
}
if ($acao === 'finish_day') {
markAsPlayed($userId);
echo json_encode(["ok" => true]);
exit;
}
echo json_encode(["error" => "Ação inválida"]);
Análise em Vídeo: Cobertura Global
Este recurso utiliza Inteligência de Busca para conectar esta análise com as últimas atualizações de vídeo das maiores redes de notícias do mundo.
Compartilhe este conhecimento:
Comentários
Postar um comentário