This commit is contained in:
@@ -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="Бот запущен")
|
||||
|
||||
Reference in New Issue
Block a user