fix: telegram bot uses temp dir for -o, always runs nextcloud scan, counts clips from folder
This commit is contained in:
@@ -231,15 +231,19 @@ async def process_video(bot, url: str):
|
|||||||
log.info(f"[process] Sent initial Telegram message (id={msg.message_id})")
|
log.info(f"[process] Sent initial Telegram message (id={msg.message_id})")
|
||||||
|
|
||||||
# 3. Set up environment for main.py
|
# 3. Set up environment for main.py
|
||||||
|
# Use a temp dir for intermediate files — main.py will copy finished clips
|
||||||
|
# to NEXTCLOUD_TARGET and run docker files:scan automatically.
|
||||||
|
temp_output = tempfile.mkdtemp(prefix="viral_bot_")
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
env["NEXTCLOUD_TARGET"] = target
|
env["NEXTCLOUD_TARGET"] = target
|
||||||
env["PYTHONUNBUFFERED"] = "1"
|
env["PYTHONUNBUFFERED"] = "1"
|
||||||
|
log.info(f"[process] Temp output dir: {temp_output}")
|
||||||
|
|
||||||
# 4. Build command — main.py MUST run with the viral venv Python
|
# 4. Build command — main.py MUST run with the viral venv Python
|
||||||
cmd = [
|
cmd = [
|
||||||
VENV_PYTHON, "-u", MAIN_PY,
|
VENV_PYTHON, "-u", MAIN_PY,
|
||||||
"-u", url,
|
"-u", url,
|
||||||
"-o", target,
|
"-o", temp_output,
|
||||||
]
|
]
|
||||||
log.info(f"[process] Spawning command: {' '.join(cmd)}")
|
log.info(f"[process] Spawning command: {' '.join(cmd)}")
|
||||||
|
|
||||||
@@ -347,10 +351,37 @@ async def process_video(bot, url: str):
|
|||||||
)
|
)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
# 5. Final completion message
|
# 5. Cleanup temp dir
|
||||||
if rc == 0:
|
try:
|
||||||
|
shutil.rmtree(temp_output, ignore_errors=True)
|
||||||
|
log.info(f"[process] Cleaned up temp dir: {temp_output}")
|
||||||
|
except Exception as e:
|
||||||
|
log.warning(f"[process] Failed to clean temp dir: {e}")
|
||||||
|
|
||||||
|
# 6. Always force a Nextcloud scan so files appear regardless of what main.py did
|
||||||
|
log.info("[process] Forcing Nextcloud files:scan...")
|
||||||
|
try:
|
||||||
|
scan_result = await asyncio.to_thread(
|
||||||
|
subprocess.run,
|
||||||
|
["docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "files:scan", "renato97"],
|
||||||
|
capture_output=True, text=True, timeout=120,
|
||||||
|
)
|
||||||
|
log.info(f"[process] Nextcloud scan done (rc={scan_result.returncode})")
|
||||||
|
log.debug(f"[process] scan stdout: {scan_result.stdout[-300:]}")
|
||||||
|
except Exception as e:
|
||||||
|
log.warning(f"[process] Nextcloud scan failed: {e}")
|
||||||
|
|
||||||
|
# 7. Count final clips in target folder
|
||||||
|
try:
|
||||||
|
final_clips = [f for f in os.listdir(target) if f.endswith(".mp4") and not f.startswith("temp_")]
|
||||||
|
total_done = len(final_clips)
|
||||||
|
log.info(f"[process] Final clip count in Nextcloud folder: {total_done}")
|
||||||
|
except Exception:
|
||||||
total_done = len(completed_clips)
|
total_done = len(completed_clips)
|
||||||
log.info(f"[process] SUCCESS — {total_done} clips uploaded to Nextcloud")
|
|
||||||
|
# 8. Final completion message
|
||||||
|
if rc == 0 and total_done > 0:
|
||||||
|
log.info(f"[process] SUCCESS — {total_done} clips in Nextcloud")
|
||||||
try:
|
try:
|
||||||
await msg.delete()
|
await msg.delete()
|
||||||
except Exception:
|
except Exception:
|
||||||
@@ -358,18 +389,24 @@ async def process_video(bot, url: str):
|
|||||||
await bot.send_message(
|
await bot.send_message(
|
||||||
CHAT_ID,
|
CHAT_ID,
|
||||||
f"✅ *¡Listo!* `{title[:60] or url[:60]}`\n\n"
|
f"✅ *¡Listo!* `{title[:60] or url[:60]}`\n\n"
|
||||||
f"📱 *{total_done} clip{'s' if total_done != 1 else ''}* subidos a Nextcloud:\n"
|
f"📱 *{total_done} clip{'s' if total_done != 1 else ''}* en Nextcloud:\n"
|
||||||
f"`{folder}/`\n\n"
|
f"`{folder}/`\n\n"
|
||||||
f"Abrilos en tu Nextcloud 🎉",
|
f"Abrilos en tu Nextcloud 🎉",
|
||||||
parse_mode="Markdown",
|
parse_mode="Markdown",
|
||||||
)
|
)
|
||||||
else:
|
elif rc != 0:
|
||||||
log.error(f"[process] FAILED — main.py returned code {rc}")
|
log.error(f"[process] FAILED — main.py returned code {rc}")
|
||||||
await edit_msg(
|
await edit_msg(
|
||||||
f"❌ *Falló el procesamiento* (código {rc})\n"
|
f"❌ *Falló el procesamiento* (código {rc})\n"
|
||||||
f"`{url[:80]}`\n\n"
|
f"`{url[:80]}`\n\n"
|
||||||
f"Revisá los logs: `sudo journalctl -u viral-telegram.service -n 100`"
|
f"Revisá los logs: `sudo journalctl -u viral-telegram.service -n 100`"
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
log.warning("[process] rc=0 but no final clips found in Nextcloud folder")
|
||||||
|
await edit_msg(
|
||||||
|
f"⚠️ *Pipeline completado pero no se encontraron clips*\n"
|
||||||
|
f"Revisá la carpeta `{folder}/` en Nextcloud manualmente."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# ─── App lifecycle ─────────────────────────────────────────────────────────────
|
# ─── App lifecycle ─────────────────────────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user