Files
tg_post_min/app/bot/handlers/media.py
Andrey K. Choi c16ec54891 Bot become a Community Guard & Post send manager
added: dictionary support for censore
message/user management with dict triggers
2025-08-22 21:44:14 +09:00

54 lines
2.0 KiB
Python

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, NEED_START_NEW
from app.bot.keyboards.common import kb_next_text
from .drafts import KEY_DRAFT_ID, STATE_DRAFT, STATE_AWAIT_MEDIA
from .add_group import add_group_capture, STATE_KEY
async def on_media(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
if update.effective_chat.type != ChatType.PRIVATE:
return
# Если сейчас идёт привязка чата — используем пересланное сообщение
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("Медиа можно добавлять только на шаге 1.")
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)
s.add(DraftMedia(draft_id=d.id, kind=kind, file_id=file_id, order=order))
d.updated_at = datetime.utcnow()
s.commit()
# Показываем кнопку «Дальше — текст» прямо под сообщением «Медиа добавлено»
await update.effective_message.reply_text(
MEDIA_ADDED.format(kind=kind),
reply_markup=kb_next_text(draft_id)
)