From 30d5b178e668c9d692f53199086ecafbc2f68d19 Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Fri, 2 Oct 2026 14:28:41 -0300 Subject: [PATCH] gfgfgf --- .env | 10 +++- .env.example | 8 ++++ __pycache__/dados_ia.cpython-311.pyc | Bin 0 -> 3741 bytes __pycache__/main.cpython-311.pyc | Bin 11380 -> 12762 bytes dados_ia.py | 64 ++++++++++++++++++++++++++ iniciar.sh | 28 ++++++------ main.py | 66 ++++++++++++++++++--------- ordens12.json | 3 ++ requirements.txt | 3 +- 9 files changed, 142 insertions(+), 40 deletions(-) create mode 100644 __pycache__/dados_ia.cpython-311.pyc create mode 100644 dados_ia.py create mode 100644 ordens12.json 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 0000000000000000000000000000000000000000..ef78919d9546719671919e002a80d4fae2fe1097 GIT binary patch literal 3741 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 literal 0 HcmV?d00001 diff --git a/__pycache__/main.cpython-311.pyc b/__pycache__/main.cpython-311.pyc index df53b34bd18742b80b157580796f4035b3eb3f08..f02c783d8c5ad16d36e8d33aba410a35143bb0e2 100644 GIT binary patch delta 4372 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 delta 3100 zcmZuzTWlN072R3xF2yA&S`sNyOHq7E6eY`+ti-ltCuwX;bt}YfYS(EUrz*`|(Ue85 zJX|@6LPAbqBWfDJsRspA7e>{haOFo|&{x`zI<d;;MF6_Cfgo*x z-n*12SMgx?%zezx+?hLbcFgpnZ`S|9?Up$xe@=WbF%teky`M-b$ zlLPE|;h=DgOWGL|zHU1L^}mE+wqFd9!|aqe{LHeTz(b?(IrSp=08EK$#x%{RiPdWr z>`>X@eRy-}S^E{zz!hypp(qxm+pg;(1R=7|>hcFfs{`5$4QUI4AE6Z>DVe-pFr|!U zX!-M|STJaI$`mK{*ELFm*b2vo0Dt93#!P#Po}12|*G>7{bSiIT)s(6gFobZm&=~uV zBOnjrC-4^j!6NcU31{=F$G2MFw5r5bTiREZc*QBXqz4?pBZLYki4u*nu=7%M2tVa# z9BL|@nM~zXjqbNB5Mfo_xAZ3`;rkAQmDVGC6`+7i03pyA)TTS7rlyP(9n-0*<>*Ub z`v&{WeMqv_bI;Oq^_K|gV|P6VhxTB5dpecN=FjLR8K=EqC+$ z!Y>fcXkowhwaf}z8uJEbf4!*U`o85=DNj^;3CDKVyme=BEnruxjwkIu=2ZEbtt8}m z)mai$7x*v(Rso;;$r1L0q26fQaC02!9{9ksVF7(xQ2=ZJYi)+0HyRQ4&xEoU#3loC zw_ZT^8u1Oy>d<$ssU#YSO=okks?A$gMKX3?;r)!X zc90g9Xzj7_3x4)M^s;QLd(>Z)V9?erK`2{-2y9t~wk_?0*POT8A*i4|RI)p`>VW@+ z0V6D?BwGeH!h{qm8?qW@X(f`_%t&ZGBX$_9W`)evmFkQ=?3NPryjyYV@zy98^90;l7>D=V^6mX!+!A4{CCb$;|? zZ(`Y-m^(IiZ1LEIkyX39Y!59&KDNh}?Xgv5bn$$7=a-k2QG8~V(K*kY=f2WE=cx#F zj%OA+f8JZ+K(Jt~!B?@>lt|~Ma=*E)+`OYAZa6Cv=L%HpHMNclb(Gr&Dvk}yW0~vj zT|99ka63?O){LVrF0rfPuIVmr&kLJsH4qyo)<16MoXUJ`{>>FRS(cN_!c!jhQT#qp z*o}_YV{XTe3I{Ov;;L7fA6<<6=;$vCzuA4`t=n&{1cu7qeRIPs*ZDW;Sw-9jzu)7D zyUm!GByaLN`b?58;Ee|Vf~>b|kbKB8UHws{;UrH>P{A)bWt`DylF&I&3wQ*v@$b6Y z#LFPxVSnv97{Cv3x7UgbB>Y)C^e+u2Lxj)B?0oku)4DxO=y}fODiTH-ee7F3e!+c& z8f?0!kKOFqJByc!>bN#Kou@d0*)XcTd0J0V^(%P;?km$%2Cbbp(=q%;TAMPmdfqx| z5H*HLGXS-jVJAW^mCe&@Al^e)1I*(BSK%AP#3!!ELS)4iFT3JvY;yb8*!$a^+oCJ3 zj&C`#h_SI`H$4GE z&^`ntRa#;Vu)QRAxBnez`BoFG_ZO2t?Qw+Hlx@sjDQE;6ehE9 znL}o&5=00kymMHm&sslg(lio7Bj(9EsGryE&*|#)r1m^r1RG|x@F~A^Z^s;YStNl9 z_eFSswnqpLY#i^r*jnMS(Ka`c7GkgkiL}^bRa+s>{?K=|YlM(}^RHGotQU`0>!;vx W_I7{F(?}8(t_Iy~sXr!Q?EeGiEY$A+ 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