post management returned

This commit is contained in:
2025-08-26 06:01:18 +09:00
parent c16ec54891
commit 8b554f5968
6 changed files with 598 additions and 180 deletions

View File

@@ -7,15 +7,24 @@ from app.db.models import Draft, Chat, Delivery, User
from app.bot.keyboards.common import kb_multiselect # ← только мультивыбор
from app.bot.messages import NEED_MEDIA_BEFORE_NEXT, NO_SELECTION, SENT_SUMMARY
from app.moderation.engine import check_message_allowed
import logging
# ИМПОРТИРУЕМ КОНСТАНТЫ ИЗ drafts.py, чтобы не промахнуться с ключами
from app.bot.handlers.drafts import (
STATE_DRAFT, STATE_AWAIT_TEXT, STATE_CONFIRM,
KEY_DRAFT_ID,
)
log = logging.getLogger(__name__)
async def on_callback(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
q = update.callback_query
await q.answer()
data = q.data
log.debug("callbacks:on_callback data=%s", data)
# --- Переход с медиа на текст ---
if data.startswith("draft_next_text:"):
draft_id = int(data.split(":")[1])
with get_session() as s:
d = s.get(Draft, draft_id)
if not d:
@@ -24,9 +33,23 @@ async def on_callback(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
if len(d.media) == 0:
await q.edit_message_text(NEED_MEDIA_BEFORE_NEXT)
return
ctx.user_data["draft_id"] = draft_id
ctx.user_data["draft_state"] = "await_text"
# Сброс «залипших» режимов (если были)
for k in ("await_dict_file", "dict_params", "await_chat_id"):
ctx.user_data.pop(k, None)
# ЯВНО ПРОСТАВЛЯЕМ draft_id и состояние await_text через общие константы
ctx.user_data[KEY_DRAFT_ID] = draft_id
ctx.user_data[STATE_DRAFT] = STATE_AWAIT_TEXT
log.info("callbacks:draft_next_text user=%s chat=%s -> draft_id=%s state=%s",
getattr(update.effective_user, "id", None),
getattr(update.effective_chat, "id", None),
draft_id, ctx.user_data.get(STATE_DRAFT))
await q.edit_message_text("Шаг 2/3 — текст.\nОтправьте текст поста.")
return
# --- Подтверждение -> мультивыбор чатов ---
elif data.startswith("draft_confirm_send:"):
@@ -170,3 +193,6 @@ async def on_callback(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
ctx.user_data.pop("draft_id", None)
ctx.user_data.pop("draft_state", None)
await q.edit_message_text("Черновик отменён.")
else:
await q.edit_message_text("Неизвестная команда.")
log.warning("callbacks:unhandled data=%s", data)