отправка сообщения через бота
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-09-29 22:43:20 +03:00
parent 824a7978ac
commit af755115c8
4 changed files with 366 additions and 0 deletions
+81
View File
@@ -733,6 +733,49 @@ def send_post_message(chat_id, text, image_url=None, reply_markup=None):
logger.error(f"Ошибка отправки сообщения: {e}")
return False
def send_direct_message(user_id, message_text):
"""Отправляет сообщение пользователю по ID с обработкой ошибок"""
try:
# Проверяем, что сообщение не пустое
if not message_text or not message_text.strip():
error_msg = "Пустое сообщение"
logger.warning(error_msg)
log_event("error", f"user_{user_id}", message=error_msg)
return False, error_msg
# Отправляем сообщение
bot.send_message(
user_id,
message_text,
parse_mode='HTML'
)
# Логируем успешную отправку
log_event("info", f"user_{user_id}", message=f"Сообщение отправлено: {message_text[:50]}...")
logger.info(f"Сообщение успешно отправлено пользователю {user_id}")
return True, "Сообщение отправлено успешно"
except telebot.apihelper.ApiTelegramException as e:
error_msg = f"Ошибка Telegram API: {e}"
logger.error(error_msg)
log_event("error", f"user_{user_id}", message=error_msg)
# Определяем тип ошибки для более информативного ответа
if e.error_code == 403:
return False, "Пользователь заблокировал бота или не начал с ним диалог"
elif e.error_code == 400:
return False, "Неверный ID пользователя"
elif e.error_code == 429:
return False, "Превышен лимит отправки сообщений"
else:
return False, f"Ошибка Telegram: {e.description}"
except Exception as e:
error_msg = f"Неожиданная ошибка при отправке сообщения: {e}"
logger.error(error_msg)
log_event("error", f"user_{user_id}", message=error_msg)
return False, f"Неожиданная ошибка: {str(e)}"
def send_management_message(chat_id, post_id, user_id, user_name):
"""Отправляет сообщение для управления подпиской на посты"""
try:
@@ -1234,6 +1277,44 @@ def webhook():
log_event("error", "system", message=error_msg)
return "Internal Server Error", 500
@app.route('/send_message', methods=['POST'])
def send_message_api():
"""API endpoint для отправки сообщений через бота"""
try:
data = request.get_json()
if not data:
return {"success": False, "error": "Отсутствуют данные"}, 400
user_id = data.get('user_id')
message_text = data.get('message')
if not user_id:
return {"success": False, "error": "Не указан user_id"}, 400
if not message_text:
return {"success": False, "error": "Не указан текст сообщения"}, 400
# Проверяем, что user_id является числом
try:
user_id = int(user_id)
except (ValueError, TypeError):
return {"success": False, "error": "user_id должен быть числом"}, 400
# Отправляем сообщение
success, result_message = send_direct_message(user_id, message_text)
if success:
return {"success": True, "message": result_message}, 200
else:
return {"success": False, "error": result_message}, 400
except Exception as e:
error_msg = f"Ошибка в API отправки сообщений: {e}"
logger.error(error_msg)
log_event("error", "system", message=error_msg)
return {"success": False, "error": "Внутренняя ошибка сервера"}, 500
if __name__ == '__main__':
# Логируем запуск бота
log_event("system", "system", message="Бот запущен")