🚨 fix: Убрать спам в общий чат при умной рассылке

- Удалена отправка объявления в ADMIN_CHAT_ID (общий чат)
- Умная рассылка идёт ТОЛЬКО выбранным получателям
- Статистика отправляется только админу в личку
- broadcast_type='smart' вместо 'manual'
- chat_id и message_id теперь None в БД

Инцидент: бот спамил в общий чат со 100+ жителями

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
Admin 2026-04-12 18:04:56 +04:00
parent 07d7a51f10
commit 8adcb3bdda

View file

@ -197,51 +197,22 @@ async def send_smart_broadcast(bot, text: str, recipients: str = 'all_verified',
bot_token = BOT_TOKEN
proxy_url = get_proxy_url()
# Отправляем в чат первым
# НЕ отправляем в общий чат! Умная рассылка идёт только выбранным получателям
# Для объявлений в общий чат используйте обычную рассылку
chat_message_id = None
try:
async with aiohttp.ClientSession() as http_session:
if photo_file_id:
url = f"https://api.telegram.org/bot{bot_token}/sendPhoto"
data = aiohttp.FormData()
data.add_field('chat_id', str(ADMIN_CHAT_ID))
data.add_field('photo', photo_file_id)
data.add_field('caption', f"📢 <b>Объявление от администрации</b>\n\n{text}")
data.add_field('reply_markup', json.dumps(reply_markup))
data.add_field('parse_mode', 'HTML')
async with http_session.post(url, data=data, proxy=proxy_url) as resp:
result_data = await resp.json()
if result_data.get('ok'):
chat_message_id = result_data['result']['message_id']
else:
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
payload = {
'chat_id': ADMIN_CHAT_ID,
'text': f"📢 <b>Объявление от администрации</b>\n\n{text}",
'reply_markup': json.dumps(reply_markup),
'parse_mode': 'HTML'
}
async with http_session.post(url, json=payload, proxy=proxy_url) as resp:
result_data = await resp.json()
if result_data.get('ok'):
chat_message_id = result_data['result']['message_id']
except Exception as e:
logger.error(f"Ошибка отправки в чат: {e}")
# Создаём запись в БД
async with AsyncSessionLocal() as session:
broadcast = Broadcast(
message_id=chat_message_id,
chat_id=ADMIN_CHAT_ID,
message_id=None, # Умная рассылка не создаёт сообщение в общем чате
chat_id=None,
text=text,
photo_file_id=photo_file_id,
sent_at=datetime.utcnow(),
sent_by=ADMIN_USER_ID,
total_sent=len(users),
has_read_button=True,
broadcast_type='manual',
broadcast_type='smart',
)
session.add(broadcast)
await session.commit()