Files
Jogo3/main.py
T
2026-10-10 08:27:19 -03:00

240 lines
9.3 KiB
Python
Executable File

import json
import os
import random
import asyncio
import logging
from dataclasses import dataclass
from datetime import datetime
from dotenv import load_dotenv
from telegram import Bot
from telegram.error import TelegramError
load_dotenv()
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
)
log = logging.getLogger(__name__)
# ─── Config global ────────────────────────────────────────────────────────────
TOKEN = os.getenv("TELEGRAM_TOKEN", "")
CHAT_ID = os.getenv("TELEGRAM_CHAT_ID", "")
SEXO = os.getenv("SEXO", "masculino").strip().lower()
IDADE = int(os.getenv("IDADE", "30"))
# ─── Config por tipo de envio ─────────────────────────────────────────────────
@dataclass
class ConfigEnvio:
numero: int
ativo: bool
intervalo_minutos: int
arquivo_ordens: str
quantidade_ordens: int # 0 = sem limite
hora_inicio: str
hora_fim: str
ia_mode: bool = False
def carregar_config_envio(numero: int) -> ConfigEnvio:
prefixo = f"ENVIAR{numero}_"
ativo_raw = os.getenv(f"{prefixo}ATIVO", "s").strip().lower()
ativo = ativo_raw == "s"
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"))
hora_inicio = os.getenv(f"{prefixo}HORA_INICIO", "00:00").strip()
hora_fim = os.getenv(f"{prefixo}HORA_FIM", "23:59").strip()
ia_raw = os.getenv(f"{prefixo}IA", "n").strip().lower()
ia_mode = ia_raw == "s"
return ConfigEnvio(
numero=numero,
ativo=ativo,
intervalo_minutos=intervalo,
arquivo_ordens=arquivo,
quantidade_ordens=quantidade,
hora_inicio=hora_inicio,
hora_fim=hora_fim,
ia_mode=ia_mode,
)
# ─── Substituições para sexo feminino ──────────────────────────────────────────
# Ordem importa: mais específicas primeiro
SUBSTITUICOES_FEMININO = [
("a cabeça do pau", "o clitóris"),
("cabeça do pau", "clitóris"),
("da cabeça do pau", "do clitóris"),
("a glande", "o clitóris"),
("da glande", "do clitóris"),
("glande", "clitóris"),
("do pau", "da buceta"),
("no pau", "na buceta"),
("o pau", "a buceta"),
("um pau", "uma buceta"),
("pau", "buceta"),
("o saco", "a xota"),
("do saco", "da xota"),
("no saco", "na xota"),
("saco", "xota"),
("a cueca", "a calcinha"),
("da cueca", "da calcinha"),
("na cueca", "na calcinha"),
("cueca", "calcinha"),
("punheta", "siririca"),
("porra", "gozo"),
("próstata", "ponto G"),
]
def adaptar_ordem(ordem: str) -> str:
if SEXO == "feminino":
for masculino, feminino in SUBSTITUICOES_FEMININO:
ordem = ordem.replace(masculino, feminino)
return ordem
# ─── Carregar ordens ──────────────────────────────────────────────────────────
def carregar_ordens(arquivo: str) -> list:
caminho = os.path.join(os.path.dirname(__file__), arquivo)
with open(caminho, "r", encoding="utf-8") as f:
ordens = json.load(f)
if not ordens:
raise ValueError(f"Nenhuma ordem encontrada em {arquivo}")
return ordens
# ─── Envio Telegram ───────────────────────────────────────────────────────────
async def enviar_mensagem(bot: Bot, texto: str) -> None:
try:
await bot.send_message(chat_id=CHAT_ID, text=texto)
log.info("Ordem enviada com sucesso.")
except TelegramError as e:
log.error("Erro ao enviar mensagem: %s", e)
# ─── Verificação de horário ───────────────────────────────────────────────────
def dentro_do_horario(hora_inicio: str, hora_fim: str) -> bool:
agora = datetime.now().strftime("%H:%M")
return hora_inicio <= agora <= hora_fim
# ─── Loop individual de envio ─────────────────────────────────────────────────
async def loop_envio(config: ConfigEnvio) -> None:
if not config.ativo:
log.info("Envio automático %d desativado no .env (ENVIAR%d_ATIVO != 's'). Pulando.", config.numero, config.numero)
return
if not TOKEN or not CHAT_ID:
log.error("TELEGRAM_TOKEN e TELEGRAM_CHAT_ID devem estar configurados no .env")
return
bot = Bot(token=TOKEN)
usando_ia = config.ia_mode
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: {config.hora_inicio} - {config.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:
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: {config.hora_inicio} - {config.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(config.hora_inicio, config.hora_fim):
log.info("Horário atual %s fora da janela %s-%s. Aguardando...", agora, config.hora_inicio, config.hora_fim)
await bot.send_message(
chat_id=CHAT_ID,
text=f"Horário atual ({agora}) fora da janela de ordens ({config.hora_inicio}-{config.hora_fim}).\n"
f"As ordens (envio {config.numero}) serão retomadas automaticamente às {config.hora_inicio}.",
)
ordem_index = 0
while True:
if not dentro_do_horario(config.hora_inicio, config.hora_fim):
log.info("Fora do horário de funcionamento (%s-%s). Aguardando...", config.hora_inicio, config.hora_fim)
await asyncio.sleep(60)
continue
# Quantidade de ordens a enviar neste ciclo
qtd = config.quantidade_ordens if config.quantidade_ordens > 0 else 1
# Envia lote de ordens
for i in range(qtd):
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")
texto = (
f"ORDEM #{ordem_index + i + 1} [Env. {config.numero}]\n"
f"{agora}\n\n"
f"{ordem_adaptada}\n\n"
f"Próxima ordem em {config.intervalo_minutos} minuto(s)."
f"\n\nCumpra agora."
)
await enviar_mensagem(bot, texto)
ordem_index += qtd
await asyncio.sleep(config.intervalo_minutos * 60)
# ─── Entry point ──────────────────────────────────────────────────────────────
async def _executar_todos_envios(configs: list) -> None:
await asyncio.gather(*(loop_envio(c) for c in configs))
def main():
try:
configs = [
carregar_config_envio(1),
carregar_config_envio(2),
carregar_config_envio(3),
carregar_config_envio(4),
carregar_config_envio(5),
carregar_config_envio(6),
carregar_config_envio(7),
carregar_config_envio(8),
carregar_config_envio(9),
carregar_config_envio(10),
carregar_config_envio(11),
]
asyncio.run(_executar_todos_envios(configs))
except KeyboardInterrupt:
log.info("Sistema encerrado pelo usuário.")
except Exception as e:
log.error("Erro fatal: %s", e)
if __name__ == "__main__":
main()