v1.6.0: max_bot fixes — feature keys, flush→commit, test-run, categories, broadcast page, proxy error handling, deploy scripts
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
from datetime import datetime
|
||||
from app.settings_cache import SettingsCache
|
||||
from app.conversation import get_or_create_user, get_template_rendered
|
||||
from app.fsm import BotState, FSM
|
||||
|
||||
|
||||
async def handle_broadcast_send(bot, user_data: dict, db, max_api):
|
||||
from app.models.models import BotUser
|
||||
from sqlalchemy import select
|
||||
|
||||
text = user_data.get("text", "").strip()
|
||||
if not text:
|
||||
await max_api.send_message(
|
||||
user_data["user_id"],
|
||||
"Укажите текст рассылки в параметре broadcast_text."
|
||||
)
|
||||
return
|
||||
|
||||
result = await db.execute(select(BotUser).where(BotUser.consent_given == True))
|
||||
users = result.scalars().all()
|
||||
sent = 0
|
||||
failed = 0
|
||||
sent_ids = []
|
||||
for u in users:
|
||||
try:
|
||||
await max_api.send_message(user_id=u.max_user_id, text=text, format="markdown")
|
||||
sent += 1
|
||||
sent_ids.append(u.max_user_id)
|
||||
except Exception:
|
||||
failed += 1
|
||||
|
||||
from app.models.models import BotBroadcast
|
||||
bc = BotBroadcast(
|
||||
text=text,
|
||||
sent_at=datetime.now(),
|
||||
recipient_count=len(users),
|
||||
recipient_ids=sent_ids,
|
||||
status="sent",
|
||||
)
|
||||
db.add(bc)
|
||||
await db.flush()
|
||||
|
||||
result = f"📨 Рассылка завершена.\nОтправлено: {sent}\nОшибок: {failed}"
|
||||
await max_api.send_message(user_data["user_id"], result)
|
||||
Reference in New Issue
Block a user