🚨 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:
parent
07d7a51f10
commit
8adcb3bdda
1 changed files with 5 additions and 34 deletions
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue