Files
Jogo3/main.py
T
marco c461a0dba5 feat(bot): add operating hours window configuration and enforcement
Adds HORA_INICIO and HORA_FIM environment variables to define the daily
operating window for order sending. Implements dentro_do_horario() function
to validate if current time falls within the configured range. The bot now
pauses order sending outside the operating window and sends a notification
to the chat, resuming automatically at HORA_INICIO.

Includes DEPLOY.md documentation with Debian 12 deployment instructions
and systemd service configuration for auto-start and auto-restart.
2026-09-04 09:24:47 -03:00

166 lines
5.8 KiB
Python
Executable File

import json
import os
import random
import asyncio
import logging
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 ───────────────────────────────────────────────────────────────────
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"))
INTERVALO = int(os.getenv("INTERVALO_MINUTOS", "5"))
HORA_INICIO = os.getenv("HORA_INICIO", "00:00").strip()
HORA_FIM = os.getenv("HORA_FIM", "23:59").strip()
def dentro_do_horario() -> bool:
agora = datetime.now().strftime("%H:%M")
return HORA_INICIO <= agora <= HORA_FIM
ORDENS_PATH = os.path.join(os.path.dirname(__file__), "ordens.json")
# ─── 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():
with open(ORDENS_PATH, "r", encoding="utf-8") as f:
ordens = json.load(f)
if not ordens:
raise ValueError("Nenhuma ordem encontrada em ordens.json")
return ordens
# ─── Envio Telegram ───────────────────────────────────────────────────────────
async def enviar_mensagem(bot: Bot, texto: str):
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)
# ─── Comando /start ───────────────────────────────────────────────────────────
async def cmd_start(ordens: list):
bot = Bot(token=TOKEN)
artigo = "o" if SEXO == "masculino" else "a"
msg_start = (
f"Olá {artigo} usuário!\n\n"
f"O sistema de ordens automáticas foi ativado.\n"
f"Sexo: {SEXO} | Idade: {IDADE}\n"
f"Intervalo: {INTERVALO} minuto(s)\n"
f"Total de ordens disponíveis: {len(ordens)}\n\n"
f"A primeira ordem será enviada em {INTERVALO} minuto(s).\n"
f"Prepare-se para cumprir todas as ordens."
)
await enviar_mensagem(bot, msg_start)
# ─── Loop principal ────────────────────────────────────────────────────────────
async def loop_principal():
if not TOKEN or not CHAT_ID:
log.error("TELEGRAM_TOKEN e TELEGRAM_CHAT_ID devem estar configurados no .env")
return
ordens = carregar_ordens()
random.shuffle(ordens)
bot = Bot(token=TOKEN)
await cmd_start(ordens)
agora = datetime.now().strftime("%H:%M")
if not dentro_do_horario():
log.info("Horário atual %s fora da janela %s-%s. Aguardando...", agora, HORA_INICIO, HORA_FIM)
await bot.send_message(
chat_id=CHAT_ID,
text=f"Horário atual ({agora}) fora da janela de ordens ({HORA_INICIO}-{HORA_FIM}).\n"
f"As ordens serão retomadas automaticamente às {HORA_INICIO}."
)
await asyncio.sleep(INTERVALO * 60)
ordem_index = 0
while True:
if not dentro_do_horario():
log.info("Fora do horário de funcionamento (%s-%s). Aguardando...", HORA_INICIO, HORA_FIM)
await asyncio.sleep(60)
continue
ordem = ordens[ordem_index % len(ordens)]
ordem_adaptada = adaptar_ordem(ordem)
agora = datetime.now().strftime("%d/%m/%Y %H:%M")
texto = (
f"ORDEM #{ordem_index + 1}\n"
f"{agora}\n\n"
f"{ordem_adaptada}\n\n"
f"Proxima ordem em {INTERVALO} minuto(s)."
f"\n\nCumpra agora."
)
await enviar_mensagem(bot, texto)
ordem_index += 1
await asyncio.sleep(INTERVALO * 60)
# ─── Entry point ──────────────────────────────────────────────────────────────
def main():
try:
asyncio.run(loop_principal())
except KeyboardInterrupt:
log.info("Sistema encerrado pelo usuário.")
except Exception as e:
log.error("Erro fatal: %s", e)
if __name__ == "__main__":
main()