from datetime import datetime from telegram import Update from telegram.constants import ChatType from telegram.ext import ContextTypes from app.db.session import get_session from app.db.models import Draft, DraftMedia from app.bot.messages import MEDIA_ADDED, ALREADY_AT_TEXT, NEED_START_NEW from .drafts import KEY_DRAFT_ID, STATE_DRAFT, STATE_AWAIT_MEDIA, STATE_AWAIT_TEXT, STATE_CONFIRM from .add_group import add_group_capture, STATE_KEY # перехват для /add_group async def on_media(update: Update, ctx: ContextTypes.DEFAULT_TYPE): if update.effective_chat.type != ChatType.PRIVATE: return # Если пользователь сейчас привязывает чат — используем пересланное медиа для извлечения chat_id if ctx.user_data.get(STATE_KEY): return await add_group_capture(update, ctx) draft_id = ctx.user_data.get(KEY_DRAFT_ID) state = ctx.user_data.get(STATE_DRAFT) if not draft_id or not state: await update.effective_message.reply_text(NEED_START_NEW) return if state != STATE_AWAIT_MEDIA: # Уже перешли к тексту/подтверждению — блокируем добавление медиа await update.effective_message.reply_text(ALREADY_AT_TEXT if state == STATE_AWAIT_TEXT else "Редактор на шаге подтверждения.") return kind = None file_id = None if update.message.photo: kind = "photo"; file_id = update.message.photo[-1].file_id elif update.message.video: kind = "video"; file_id = update.message.video.file_id elif update.message.animation: kind = "animation"; file_id = update.message.animation.file_id else: return with get_session() as s: d = s.get(Draft, draft_id) order = len(d.media) m = DraftMedia(draft_id=d.id, kind=kind, file_id=file_id, order=order) s.add(m); d.updated_at = datetime.utcnow() s.commit() await update.effective_message.reply_text(MEDIA_ADDED.format(kind=kind))