[ВОЛК] отладочные выводы бота в лог
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
2026-01-11 18:26:13 +03:00
parent 2d59cac00b
commit b2ead01f15
+38
View File
@@ -66,6 +66,7 @@ logger.info(f"Режим работы бота: {BOT_MODE}")
def get_welcome_text():
"""Возвращает приветственный текст в зависимости от режима"""
logger.info(f"starting get_welcome_text")
if BOT_MODE == 'VOLK':
return (
"🌟 <b>Привет!</b> 🌟\n\n"
@@ -83,6 +84,7 @@ def get_welcome_text():
def get_help_text():
"""Возвращает текст справки в зависимости от режима"""
logger.info(f"starting get_help_text")
if BOT_MODE == 'VOLK':
return (
"ℹ️ <b>Подсказка информ-бота ВОЛКа</b>\n\n"
@@ -119,6 +121,7 @@ if WEBHOOK_URL:
except Exception as e:
logger.error(f"Ошибка парсинга WEBHOOK_URL: {e}")
WEBHOOK_PATH = '/zil_bot'
logger.info(f"Форсирован путь вебхука: {WEBHOOK_PATH}")
else:
WEBHOOK_PATH = '/zil_bot'
logger.warning("WEBHOOK_URL не задан, используем путь по умолчанию")
@@ -150,6 +153,7 @@ bot = telebot.TeleBot(RESPONDER_BOT_TOKEN)
def get_user_name(user):
"""Форматирует имя пользователя для записи в БД"""
# logger.info(f"starting get_user_name")
if user.username:
return f"@{user.username}"
else:
@@ -218,6 +222,7 @@ def log_event(event_type, user_info, post_id=None, message=None):
def create_db_connection():
"""Создает подключение к базе данных MariaDB через pymysql"""
logger.info(f"starting create_db_connection")
try:
conn = pymysql.connect(
host=MDB_HOST,
@@ -237,6 +242,7 @@ def create_db_connection():
def is_user_subscribed(post_id, user_id):
"""Проверяет, подписан ли пользователь уже на это событие"""
logger.info(f"starting is_user_subscribed")
conn = create_db_connection()
if conn is None:
return False
@@ -261,6 +267,7 @@ def is_user_subscribed(post_id, user_id):
def is_user_subscribed_evt(event_id, user_id):
"""Проверяет, подписан ли пользователь уже на это событие (таблица events)"""
logger.info(f"starting is_user_subscribed_evt")
conn = create_db_connection()
if conn is None:
return False
@@ -285,6 +292,7 @@ def is_user_subscribed_evt(event_id, user_id):
def get_user_subscriptions(user_id):
"""Возвращает список событий, на которые подписан пользователь, с shortname"""
logger.info(f"starting get_user_subscriptions")
conn = create_db_connection()
if conn is None:
return []
@@ -312,6 +320,7 @@ def get_user_subscriptions(user_id):
def get_user_subscriptions_evt(user_id):
"""Возвращает список событий, на которые подписан пользователь, с информацией о статусе"""
logger.info(f"starting get_user_subscriptions_evt")
conn = create_db_connection()
if conn is None:
return []
@@ -339,6 +348,7 @@ def get_user_subscriptions_evt(user_id):
def get_linked_events_for_post(post_id):
"""Возвращает список опубликованных мероприятий, связанных с анонсом через таблицу interlinks"""
logger.info(f"starting get_linked_events_for_post")
conn = create_db_connection()
if conn is None:
return []
@@ -367,6 +377,7 @@ def get_linked_events_for_post(post_id):
def save_mark_to_db(post_id, user_id, user_name):
"""Сохраняет отметку пользователя в базе данных"""
logger.info(f"starting save_mark_to_db")
conn = create_db_connection()
if conn is None:
return False
@@ -404,6 +415,7 @@ def save_mark_to_db(post_id, user_id, user_name):
def save_mark_to_db_evt(event_id, user_id, user_name):
"""Сохраняет отметку пользователя в базе данных для событий (таблица marks_evt)"""
logger.info(f"starting save_mark_to_db_evt")
conn = create_db_connection()
if conn is None:
return False
@@ -439,6 +451,7 @@ def save_mark_to_db_evt(event_id, user_id, user_name):
def remove_mark_from_db(post_id, user_id, user_name):
"""Удаляет отметку пользователя из базы данных"""
logger.info(f"starting remove_mark_from_db")
conn = create_db_connection()
if conn is None:
return False
@@ -475,6 +488,7 @@ def remove_mark_from_db(post_id, user_id, user_name):
def remove_mark_from_db_evt(event_id, user_id, user_name):
"""Удаляет отметку пользователя из базы данных для событий (таблица marks_evt)"""
logger.info(f"starting remove_mark_from_db_evt")
conn = create_db_connection()
if conn is None:
return False
@@ -510,6 +524,7 @@ def remove_mark_from_db_evt(event_id, user_id, user_name):
def format_channel_link(post_id=None):
"""Форматирует ссылку на событие в канале или на сам канал"""
logger.info(f"starting format_channel_link")
if not CHANNEL_ID:
return ""
@@ -530,6 +545,7 @@ def format_channel_link(post_id=None):
def create_help_keyboard():
"""Создает клавиатуру для справки"""
logger.info(f"starting create_help_keyboard")
keyboard = InlineKeyboardMarkup()
keyboard.row(
InlineKeyboardButton("📜 Подписки", callback_data="cmd_list"),
@@ -539,6 +555,7 @@ def create_help_keyboard():
def create_main_keyboard():
"""Создает основную клавиатуру для /start без параметров"""
logger.info(f"starting create_main_keyboard")
keyboard = InlineKeyboardMarkup()
keyboard.row(
InlineKeyboardButton("❓ Справка", callback_data="cmd_help"),
@@ -548,6 +565,7 @@ def create_main_keyboard():
def create_manage_keyboard(post_id, is_subscribed):
"""Создает клавиатуру для управления подпиской на посты"""
logger.info(f"starting create_manage_keyboard")
keyboard = InlineKeyboardMarkup()
channel_link = format_channel_link(post_id)
@@ -567,6 +585,7 @@ def create_manage_keyboard(post_id, is_subscribed):
def create_manage_keyboard_evt(event_id, is_subscribed):
"""Создает клавиатуру для управления подпиской на события"""
logger.info(f"starting create_manage_keyboard_evt")
keyboard = InlineKeyboardMarkup()
channel_link = format_channel_link(event_id)
@@ -587,6 +606,7 @@ def create_manage_keyboard_evt(event_id, is_subscribed):
def get_post_data(tg_message_id):
"""Получает данные о событии по его tg_message_id"""
logger.info(f"starting get_post_data")
conn = create_db_connection()
if conn is None:
return None
@@ -619,6 +639,7 @@ def get_post_data(tg_message_id):
def get_event_data(tg_message_id):
"""Получает данные о событии из таблица events по его tg_message_id"""
logger.info(f"starting get_event_data")
conn = create_db_connection()
if conn is None:
return None
@@ -645,6 +666,7 @@ def get_event_data(tg_message_id):
def format_post_message(tg_message_id):
"""Форматирует сообщение о событии с помощью модуля formatter"""
logger.info(f"starting format_post_message")
post_data = get_post_data(tg_message_id)
if not post_data:
error_msg = f"Событие с tg_message_id={tg_message_id} не найдено в базе."
@@ -710,6 +732,7 @@ def format_post_message(tg_message_id):
def format_event_message(tg_message_id):
"""Форматирует сообщение о событии из таблицы events"""
logger.info(f"starting format_event_message")
event_data = get_event_data(tg_message_id)
if not event_data:
error_msg = f"Событие с tg_message_id={tg_message_id} не найдено в базе events."
@@ -758,6 +781,7 @@ def format_event_message(tg_message_id):
def download_image(image_url):
"""Загружает изображение по URL"""
logger.info(f"starting download_image")
try:
response = requests.get(image_url, timeout=10)
response.raise_for_status()
@@ -768,6 +792,7 @@ def download_image(image_url):
def send_post_message(chat_id, text, image_url=None, reply_markup=None):
"""Отправляет сообщение с изображением или текстом"""
logger.info(f"starting send_post_message")
try:
# Дополнительная обрезка текста
if len(text) > UNIFIED_MAX_LENGTH:
@@ -803,6 +828,7 @@ def send_post_message(chat_id, text, image_url=None, reply_markup=None):
def send_direct_message(user_id, message_text):
"""Отправляет сообщение пользователю по ID с обработкой ошибок"""
logger.info(f"starting send_direct_message")
try:
# Проверяем, что сообщение не пустое
if not message_text or not message_text.strip():
@@ -848,6 +874,7 @@ def send_direct_message(user_id, message_text):
def send_management_message(chat_id, post_id, user_id, user_name):
"""Отправляет сообщение для управления подпиской на посты"""
logger.info(f"starting send_management_message")
try:
# Проверяем статус подписки
is_subscribed = is_user_subscribed(post_id, user_id)
@@ -873,6 +900,7 @@ def send_management_message(chat_id, post_id, user_id, user_name):
def send_management_message_evt(chat_id, event_id, user_id, user_name):
"""Отправляет сообщение для управления подпиской на события"""
logger.info(f"starting send_management_message_evt")
try:
# Проверяем статус подписки
is_subscribed = is_user_subscribed_evt(event_id, user_id)
@@ -899,6 +927,7 @@ def send_management_message_evt(chat_id, event_id, user_id, user_name):
@bot.message_handler(commands=['start'])
def handle_start(message):
"""Обработчик команды /start с параметром"""
logger.info(f"starting handle_start")
try:
# Извлекаем аргументы из команды /start
args = message.text.split()
@@ -938,6 +967,7 @@ def handle_start(message):
@bot.message_handler(commands=['home'])
def handle_home(message):
"""Обработчик команды /home - переход в основной канал"""
logger.info(f"starting handle_home")
try:
channel_link = format_channel_link()
channel_name = "ВОЛКа" if BOT_MODE == 'VOLK' else "Зиланткона"
@@ -958,6 +988,7 @@ def handle_home(message):
@bot.message_handler(commands=['help'])
def handle_help(message):
"""Обработчик команды /help"""
logger.info(f"starting handle_help")
try:
help_text = get_help_text()
@@ -976,6 +1007,7 @@ def handle_help(message):
@bot.message_handler(commands=['list'])
def handle_list(message):
"""Обработчик команды /list"""
logger.info(f"starting handle_list")
try:
user_id = message.from_user.id
user_name = get_user_name(message.from_user)
@@ -1062,6 +1094,7 @@ def handle_list(message):
@bot.callback_query_handler(func=lambda call: True)
def handle_callback(call):
"""Обработчик нажатий на кнопки"""
logger.info(f"starting handle_callback")
try:
# Обработка командных кнопок
if call.data.startswith("cmd_"):
@@ -1295,6 +1328,7 @@ def handle_callback(call):
def setup_webhook():
"""Настройка вебхука"""
logger.info(f"starting setup_webhook")
try:
# Удаляем предыдущий вебхук
bot.remove_webhook()
@@ -1322,6 +1356,7 @@ def setup_webhook():
# Используем путь из WEBHOOK_URL
@app.route(WEBHOOK_PATH, methods=['POST'])
def webhook():
logger.info(f"starting webhook")
if request.headers.get('X-Telegram-Bot-Api-Secret-Token') != WEBHOOK_SECRET:
logger.warning("Неверный секретный токен!")
log_event("security", "system", message="Попытка доступа с неверным секретным токеном")
@@ -1342,6 +1377,7 @@ def webhook():
@app.route(f'{WEBHOOK_PATH}/send_message', methods=['POST'])
def send_message_api():
"""API endpoint для отправки сообщений через бота"""
logger.info(f"starting send_message_api")
# Проверяем секретный токен для защиты API
api_token = request.headers.get('X-API-Secret-Token')
if api_token != WEBHOOK_SECRET:
@@ -1386,12 +1422,14 @@ def send_message_api():
if __name__ == '__main__':
# Логируем запуск бота
logger.info(f"starting main")
log_event("system", "system", message="Бот запущен")
# Настраиваем вебхук
setup_webhook()
# Логируем запуск Flask
logger.info(f"starting Flask")
log_event("system", "system", message=f"Flask приложение запущено на порту {WEBHOOK_PORT}, путь: {WEBHOOK_PATH}")
# Запускаем Flask приложение