🚨 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 bot_token = BOT_TOKEN
proxy_url = get_proxy_url() proxy_url = get_proxy_url()
# Отправляем в чат первым # НЕ отправляем в общий чат! Умная рассылка идёт только выбранным получателям
# Для объявлений в общий чат используйте обычную рассылку
chat_message_id = None 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: async with AsyncSessionLocal() as session:
broadcast = Broadcast( broadcast = Broadcast(
message_id=chat_message_id, message_id=None, # Умная рассылка не создаёт сообщение в общем чате
chat_id=ADMIN_CHAT_ID, chat_id=None,
text=text, text=text,
photo_file_id=photo_file_id, photo_file_id=photo_file_id,
sent_at=datetime.utcnow(), sent_at=datetime.utcnow(),
sent_by=ADMIN_USER_ID, sent_by=ADMIN_USER_ID,
total_sent=len(users), total_sent=len(users),
has_read_button=True, has_read_button=True,
broadcast_type='manual', broadcast_type='smart',
) )
session.add(broadcast) session.add(broadcast)
await session.commit() await session.commit()