diff --git a/.env b/.env index d024348..b96c79b 100755 --- a/.env +++ b/.env @@ -61,17 +61,23 @@ ENVIAR9_ARQUIVO_ORDENS=ordens9.json ENVIAR9_QUANTIDADE_ORDENS=1 # ═══ Envio Automático 10 ════════════════════════════════════════════ -ENVIAR10_ATIVO=s +ENVIAR10_ATIVO=n ENVIAR10_INTERVALO_MINUTOS=1 ENVIAR10_ARQUIVO_ORDENS=ordens10.json ENVIAR10_QUANTIDADE_ORDENS=1 +# ═══ Envio Automático 11 — IA ═══════════════════════════════════════ +ENVIAR11_ATIVO=s +ENVIAR11_INTERVALO_MINUTOS=3 +ENVIAR11_ARQUIVO_ORDENS=ordens12.json +ENVIAR11_QUANTIDADE_ORDENS=1 + # ═══ Horário de funcionamento (formato HH:MM, 24h) ═══════════════════ HORA_INICIO=08:00 HORA_FIM=22:00 # OpenRouter AI OPENROUTER_API_KEY=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 -OPENROUTER_MODEL=deepseek/deepseek-v4.1-flash:batch +OPENROUTER_MODEL=cognitivecomputations/dolphin-mistral-24b-venice-edition OPENROUTER_BASE_URL=https://openrouter.ai/api/v1 OPENROUTER_TIMEOUT=60 \ No newline at end of file diff --git a/.env.example b/.env.example index 6bb35f3..3fca529 100755 --- a/.env.example +++ b/.env.example @@ -72,6 +72,14 @@ ENVIAR10_INTERVALO_MINUTOS=1 ENVIAR10_ARQUIVO_ORDENS=ordens10.json ENVIAR10_QUANTIDADE_ORDENS=1 +# ═══ Envio Automático 11 — IA (usando o modelo do .env) ═════════════ +# Quando ARQUIVO_ORDENS aponta para ordens12.json ou prefixo ia_, +# o sistema gera ordens dinamicamente via OpenRouter. +ENVIAR11_ATIVO=n +ENVIAR11_INTERVALO_MINUTOS=5 +ENVIAR11_ARQUIVO_ORDENS=ordens12.json +ENVIAR11_QUANTIDADE_ORDENS=1 + # ═══ Horário de funcionamento (formato HH:MM, 24h) ═══════════════════ HORA_INICIO=08:00 HORA_FIM=22:00 \ No newline at end of file diff --git a/__pycache__/dados_ia.cpython-311.pyc b/__pycache__/dados_ia.cpython-311.pyc new file mode 100644 index 0000000..ef78919 Binary files /dev/null and b/__pycache__/dados_ia.cpython-311.pyc differ diff --git a/__pycache__/main.cpython-311.pyc b/__pycache__/main.cpython-311.pyc index df53b34..f02c783 100644 Binary files a/__pycache__/main.cpython-311.pyc and b/__pycache__/main.cpython-311.pyc differ diff --git a/dados_ia.py b/dados_ia.py new file mode 100644 index 0000000..074c5d7 --- /dev/null +++ b/dados_ia.py @@ -0,0 +1,64 @@ +import json +import os +import logging +import httpx + +log = logging.getLogger(__name__) + +OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY", "") +OPENROUTER_MODEL = os.getenv("OPENROUTER_MODEL", "deepseek/deepseek-v4.1-flash") +OPENROUTER_BASE_URL = os.getenv("OPENROUTER_BASE_URL", "https://openrouter.ai/api/v1") +OPENROUTER_TIMEOUT = int(os.getenv("OPENROUTER_TIMEOUT", "60")) + + +def carregar_prompt_base() -> str: + caminho = os.path.join(os.path.dirname(__file__), "ordens12.json") + with open(caminho, "r", encoding="utf-8") as f: + dados = json.load(f) + if isinstance(dados, list) and len(dados) > 0: + return dados[0] + return "" + + +async def gerar_ordem_ia() -> str: + prompt_base = carregar_prompt_base() + + if not OPENROUTER_API_KEY: + log.error("OPENROUTER_API_KEY nao configurada no .env") + return "[ERRO: API key nao configurada. Configure OPENROUTER_API_KEY no .env]" + + headers = { + "Authorization": f"Bearer {OPENROUTER_API_KEY}", + "Content-Type": "application/json", + } + + payload = { + "model": OPENROUTER_MODEL, + "messages": [ + { + "role": "system", + "content": prompt_base, + }, + { + "role": "user", + "content": "Gere uma ordem de humilhação agora, completa e detalhada, como se fosse o Mestre DeepSeek falando. Nao se repita. Seja criativa e picante.", + }, + ], + "max_tokens": 2048, + "temperature": 0.9, + } + + try: + async with httpx.AsyncClient(timeout=OPENROUTER_TIMEOUT) as client: + resp = await client.post( + f"{OPENROUTER_BASE_URL}/chat/completions", + headers=headers, + json=payload, + ) + resp.raise_for_status() + data = resp.json() + ordem = data["choices"][0]["message"]["content"].strip() + return ordem + except Exception as e: + log.error("Erro ao gerar ordem com IA: %s", e) + return f"[ERRO ao gerar ordem: {e}]" \ No newline at end of file diff --git a/iniciar.sh b/iniciar.sh index a7eb763..ab68227 100755 --- a/iniciar.sh +++ b/iniciar.sh @@ -30,7 +30,7 @@ HORA_FIM=$(grep_val HORA_FIM) # Configuração de cada envio automático declare -a ENVIAR_ATIVO ENVIAR_INTERVALO ENVIAR_ARQUIVO ENVIAR_QUANTIDADE -for n in 1 2 3 4 5 6 7 8 9 10; do +for n in 1 2 3 4 5 6 7 8 9 10 11; do ENVIAR_ATIVO[$n]=$(grep_val "ENVIAR${n}_ATIVO") ENVIAR_INTERVALO[$n]=$(grep_val "ENVIAR${n}_INTERVALO_MINUTOS") ENVIAR_ARQUIVO[$n]=$(grep_val "ENVIAR${n}_ARQUIVO_ORDENS") @@ -47,7 +47,7 @@ if [ -z "$TELEGRAM_CHAT_ID" ] || [ "$TELEGRAM_CHAT_ID" = "seu_chat_id_aqui" ]; t fi # Validação dos arquivos de ordens -for n in 1 2 3 4 5 6 7 8 9 10; do +for n in 1 2 3 4 5 6 7 8 9 10 11; do if [ "${ENVIAR_ATIVO[$n]}" = "s" ] && [ ! -f "${ENVIAR_ARQUIVO[$n]}" ]; then echo "[!] Arquivo de ordens '${ENVIAR_ARQUIVO[$n]}' não encontrado (envio automático $n)" exit 1 @@ -55,26 +55,24 @@ for n in 1 2 3 4 5 6 7 8 9 10; do done export TELEGRAM_TOKEN TELEGRAM_CHAT_ID SEXO IDADE HORA_INICIO HORA_FIM -for n in 1 2 3 4 5 6 7 8 9 10; do +for n in 1 2 3 4 5 6 7 8 9 10 11; do export "ENVIAR${n}_ATIVO=${ENVIAR_ATIVO[$n]}" export "ENVIAR${n}_INTERVALO_MINUTOS=${ENVIAR_INTERVALO[$n]}" export "ENVIAR${n}_ARQUIVO_ORDENS=${ENVIAR_ARQUIVO[$n]}" export "ENVIAR${n}_QUANTIDADE_ORDENS=${ENVIAR_QUANTIDADE[$n]}" done -# ─── Python virtual env ────────────────────────────────────────────────────── -if [ ! -d venv ]; then - echo "[+] Criando ambiente virtual Python 3..." - python3 -m venv venv -fi - -echo "[+] Ativando ambiente virtual..." -source venv/bin/activate - # ─── Dependências ────────────────────────────────────────────────────────────── echo "[+] Instalando dependências..." -pip install --upgrade pip -q -pip install -r requirements.txt -q + +# Garantir que pip está instalado (sistema Debian sem pip nativo) +if ! python3 -m pip --version >/dev/null 2>&1; then + echo "[+] Instalando pip via get-pip.py..." + curl -sS https://bootstrap.pypa.io/get-pip.py | python3 - --break-system-packages +fi + +python3 -m pip install --upgrade pip -q --break-system-packages 2>/dev/null || true +python3 -m pip install -r requirements.txt -q --break-system-packages # ─── Ativar /start do bot ──────────────────────────────────────────────────── echo "[+] Ativando /start no bot do Telegram..." @@ -99,7 +97,7 @@ echo "[+] Iniciando sistema de ordens..." echo " Sexo: ${SEXO:-masculino} | Idade: ${IDADE:-30}" echo " Horário: ${HORA_INICIO:-08:00} - ${HORA_FIM:-22:00}" echo "" -for n in 1 2 3 4 5 6 7 8 9 10; do +for n in 1 2 3 4 5 6 7 8 9 10 11; do status="❌ DESATIVADO" if [ "${ENVIAR_ATIVO[$n]}" = "s" ]; then status="✅ ATIVO" diff --git a/main.py b/main.py index b8fcc6e..b991994 100755 --- a/main.py +++ b/main.py @@ -36,6 +36,12 @@ class ConfigEnvio: intervalo_minutos: int arquivo_ordens: str quantidade_ordens: int # 0 = sem limite + ia_mode: bool = False + + +def _detectar_ia_mode(arquivo: str) -> bool: + nome = arquivo.strip().lower() + return nome == "ordens12.json" or nome.startswith("ia_") def carregar_config_envio(numero: int) -> ConfigEnvio: @@ -45,12 +51,14 @@ def carregar_config_envio(numero: int) -> ConfigEnvio: intervalo = int(os.getenv(f"{prefixo}INTERVALO_MINUTOS", "1")) arquivo = os.getenv(f"{prefixo}ARQUIVO_ORDENS", f"ordens{numero}.json").strip() quantidade = int(os.getenv(f"{prefixo}QUANTIDADE_ORDENS", "0")) + ia_mode = _detectar_ia_mode(arquivo) return ConfigEnvio( numero=numero, ativo=ativo, intervalo_minutos=intervalo, arquivo_ordens=arquivo, quantidade_ordens=quantidade, + ia_mode=ia_mode, ) @@ -124,30 +132,40 @@ async def loop_envio(config: ConfigEnvio) -> None: log.error("TELEGRAM_TOKEN e TELEGRAM_CHAT_ID devem estar configurados no .env") return - log.info("Carregando ordens de %s para envio automático %d...", config.arquivo_ordens, config.numero) - ordens = carregar_ordens(config.arquivo_ordens) - random.shuffle(ordens) - bot = Bot(token=TOKEN) + usando_ia = config.ia_mode - # Mensagem de inicialização - artigo = "o" if SEXO == "masculino" else "a" - if config.quantidade_ordens > 1: - info_quantidade = f"Ordens por ciclo: {config.quantidade_ordens}\n" + if usando_ia: + from dados_ia import gerar_ordem_ia + log.info("Modo IA ativado para envio automático %d. Gerando ordens via %s...", config.numero, os.getenv("OPENROUTER_MODEL", "modelo padrao")) + msg_start = ( + f"🚀 Envio Automático {config.numero} — MODO IA ativado.\n" + f"Sexo: {SEXO} | Idade: {IDADE}\n" + f"Intervalo: {config.intervalo_minutos} minuto(s)\n" + f"Ordens por ciclo: {config.quantidade_ordens}\n" + f"Modelo de IA: {os.getenv('OPENROUTER_MODEL', 'desconhecido')}\n" + f"Horário de funcionamento: {HORA_INICIO} - {HORA_FIM}\n\n" + f"DeepSeek está online e vai gerar cada ordem em tempo real.\n" + f"Prepare-se para obedecer a IA." + ) + await enviar_mensagem(bot, msg_start) else: - info_quantidade = "Ordens por ciclo: 1\n" - msg_start = ( - f"🚀 Envio Automático {config.numero} ativado.\n" - f"Sexo: {SEXO} | Idade: {IDADE}\n" - f"Intervalo: {config.intervalo_minutos} minuto(s)\n" - f"{info_quantidade}" - f"Arquivo de ordens: {config.arquivo_ordens}\n" - f"Total de ordens disponíveis: {len(ordens)}\n" - f"Horário de funcionamento: {HORA_INICIO} - {HORA_FIM}\n\n" - f"A(s) primeira(s) ordem(ns) será(ão) enviada(s) imediatamente.\n" - f"Prepare-se para cumprir todas as ordens." - ) - await enviar_mensagem(bot, msg_start) + log.info("Carregando ordens de %s para envio automático %d...", config.arquivo_ordens, config.numero) + ordens = carregar_ordens(config.arquivo_ordens) + random.shuffle(ordens) + + msg_start = ( + f"🚀 Envio Automático {config.numero} ativado.\n" + f"Sexo: {SEXO} | Idade: {IDADE}\n" + f"Intervalo: {config.intervalo_minutos} minuto(s)\n" + f"Ordens por ciclo: {config.quantidade_ordens}\n" + f"Arquivo de ordens: {config.arquivo_ordens}\n" + f"Total de ordens disponíveis: {len(ordens)}\n" + f"Horário de funcionamento: {HORA_INICIO} - {HORA_FIM}\n\n" + f"A(s) primeira(s) ordem(ns) será(ão) enviada(s) imediatamente.\n" + f"Prepare-se para cumprir todas as ordens." + ) + await enviar_mensagem(bot, msg_start) agora = datetime.now().strftime("%H:%M") if not dentro_do_horario(): @@ -170,7 +188,10 @@ async def loop_envio(config: ConfigEnvio) -> None: # Envia lote de ordens for i in range(qtd): - ordem = ordens[(ordem_index + i) % len(ordens)] + if usando_ia: + ordem = await gerar_ordem_ia() + else: + ordem = ordens[(ordem_index + i) % len(ordens)] ordem_adaptada = adaptar_ordem(ordem) agora = datetime.now().strftime("%d/%m/%Y %H:%M") @@ -206,6 +227,7 @@ def main(): carregar_config_envio(8), carregar_config_envio(9), carregar_config_envio(10), + carregar_config_envio(11), ] asyncio.run(_executar_todos_envios(configs)) except KeyboardInterrupt: diff --git a/ordens12.json b/ordens12.json new file mode 100644 index 0000000..0c017f6 --- /dev/null +++ b/ordens12.json @@ -0,0 +1,3 @@ +[ + "Você é Renata, uma IA dominadora e cruel que dá ordens de humilhação sexual para um escravo submisso. O escravo é do sexo masculino, 66 anos. Gere UMA ordem completa, detalhada, picante, sem usar xingamentos diretos contra o usuário. A ordem deve envolver ações explícitas com o corpo: cabeça do pau, pau, bunda, cú, enfiar dedo(s) no cú, enfiar plugs, edging (chegar perto de gozar e parar), ruined orgasm (gozo sem prazer). Deve passar por várias posições: sentado trabalhando, em pé (em vários locais da casa e áreas externas), agachado (de cócoras), de quatro, etc. A ordem NÃO pode permitir que o escravo goze (exceto nas ordens de ruined orgasm, onde o gozo é desperdiçado). A ordem deve ser completíssima, incluindo mandar tirar ou abaixar a calça e cueca, detalhada, picante, sem pudor. Pode também dar palmadas na bunda, aregaçar e bunda e mostrar o cú bem aberto, enfiar plug como se fosse um pau de outro homem, etc. Pode em algumas ordens fazer de conta que tem alguém olhando o escravo. Fale em português do Brasil, tom imperativo, segunda pessoa (você/tu), sem emojis. A ordem deve funcionar como uma narrativa única, com começo, meio e fim. Não se repita. Seja criativa. Escreva uma ordem longa e envolvente." +] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 2e26c7f..9b30b29 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ python-dotenv==1.1.0 -python-telegram-bot==21.10 \ No newline at end of file +python-telegram-bot==21.10 +httpx==0.27.0 \ No newline at end of file