[ВОЛК] подключаем бота подписки
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-12-28 23:20:11 +03:00
parent c8f1cc2595
commit 0cfa26152b
3 changed files with 89 additions and 57 deletions
+77 -53
View File
@@ -40,6 +40,57 @@ MAX_TEXT_LENGTH = int(os.getenv('MAX_TEXT_LENGTH', 4000))
# Устанавливаем единое ограничение длины текста
UNIFIED_MAX_LENGTH = 800
# Режим работы бота (ZILANT или VOLK)
BOT_MODE = os.getenv('BOT_MODE', 'ZILANT').upper()
if BOT_MODE not in ('ZILANT', 'VOLK'):
logger.warning(f"Неизвестный режим бота: {BOT_MODE}, используем ZILANT")
BOT_MODE = 'ZILANT'
logger.info(f"Режим работы бота: {BOT_MODE}")
def get_welcome_text():
"""Возвращает приветственный текст в зависимости от режима"""
if BOT_MODE == 'VOLK':
return (
"🌟 <b>Привет!</b> 🌟\n\n"
"Я - информационный бот ВОЛКа. "
"Здесь можно подписаться на интересные события будущего конвента - и потом напомнить самому себе, "
"что именно показалось интересным.\n\n"
)
else: # ZILANT
return (
"🌟 <b>Привет!</b> 🌟\n\n"
"Я - информационный бот Зиланткона. "
"Здесь можно подписаться на интересные события будущего Зиланта - и я напомню,"
"когда их можно будет включить в свой План Захвата Конвента.\n\n"
)
def get_help_text():
"""Возвращает текст справки в зависимости от режима"""
if BOT_MODE == 'VOLK':
return (
"ℹ️ <b>Подсказка информ-бота ВОЛКа</b>\n\n"
"Я запоминаю, кто чем интересовался, и позволяю "
"вспомнить, что именно вызывало интерес.\n\n"
"<b>Доступные команды:</b>\n"
"• /start - начать работу с ботом (вы уже здесь!)\n"
"• /help - показать эту справку\n"
"• /home - перейти в основной канал ВОЛКа\n"
"• /list - показать текущие подписки\n\n"
"Используйте кнопки ниже для быстрого доступа:"
)
else: # ZILANT
return (
"ℹ️ <b>Подсказка информ-бота Зиланткона</b>\n\n"
"Я запоминаю, кто чем интересовался, и напоминаю, "
"когда это становится можно включить в План Захвата.\n\n"
"<b>Доступные команды:</b>\n"
"• /start - начать работу с ботом (вы уже здесь!)\n"
"• /help - показать эту справку\n"
"• /home - перейти в основной канал Зиланткона\n"
"• /list - показать текущие подписки\n\n"
"Используйте кнопки ниже для быстрого доступа:"
)
# Извлекаем путь из WEBHOOK_URL
if WEBHOOK_URL:
try:
@@ -853,12 +904,7 @@ def handle_start(message):
return
# Команда /start без параметров
welcome_text = (
"🌟 <b>Привет!</b> 🌟\n\n"
"Я - информационный бот Зиланткона. "
"Здесь можно подписаться на интересные события будущего Зиланта - и я напомню,"
"когда их можно будет включить в свой План Захвата Конвента.\n\n"
)
welcome_text = get_welcome_text()
bot.send_message(
message.chat.id,
@@ -877,9 +923,10 @@ def handle_home(message):
"""Обработчик команды /home - переход в основной канал"""
try:
channel_link = format_channel_link()
channel_name = "ВОЛКа" if BOT_MODE == 'VOLK' else "Зиланткона"
bot.send_message(
message.chat.id,
"📢 <b>Основной канал Зиланткона</b>\n\n",
f"📢 <b>Основной канал {channel_name}</b>\n\n",
reply_markup=InlineKeyboardMarkup().row(
InlineKeyboardButton("📢 Перейти в канал", url=channel_link)
),
@@ -895,17 +942,7 @@ def handle_home(message):
def handle_help(message):
"""Обработчик команды /help"""
try:
help_text = (
"ℹ️ <b>Подсказка информ-бота Зиланткона</b>\n\n"
"Я запоминаю, кто чем интересовался, и напоминаю, "
"когда это становится можно включить в План Захвата.\n\n"
"<b>Доступные команды:</b>\n"
"• /start - начать работу с ботом (вы уже здесь!)\n"
"• /help - показать эту справку\n"
"• /home - перейти в основной канал Зиланткона\n"
"• /list - показать текущие подписки\n\n"
"Используйте кнопки ниже для быстрого доступа:"
)
help_text = get_help_text()
bot.send_message(
message.chat.id,
@@ -928,7 +965,7 @@ def handle_list(message):
# Получаем подписки на посты и события
post_subscriptions = get_user_subscriptions(user_id)
event_subscriptions = get_user_subscriptions_evt(user_id)
event_subscriptions = get_user_subscriptions_evt(user_id) if BOT_MODE == 'ZILANT' else []
# Формируем ответ
response = "📋 <b>Ваши подписки</b>\n\n"
@@ -953,16 +990,17 @@ def handle_list(message):
# Названия постов выводим подчеркнутыми и жирным шрифтом
response += f"• <u><b><a href='{post_link}'>{display_name}</a></b></u>\n"
# Получаем связанные мероприятия (только опубликованные)
linked_events = get_linked_events_for_post(post_id)
if linked_events:
for event in linked_events:
event_link = format_channel_link(event['tg_message_id'])
response += f" └─ <a href='{event_link}'>{event['name']}</a>\n"
# Получаем связанные мероприятия (только опубликованные) - только для ZILANT
if BOT_MODE == 'ZILANT':
linked_events = get_linked_events_for_post(post_id)
if linked_events:
for event in linked_events:
event_link = format_channel_link(event['tg_message_id'])
response += f" └─ <a href='{event_link}'>{event['name']}</a>\n"
response += "\n"
# Добавляем подписки на события
if event_subscriptions:
# Добавляем подписки на события (только для ZILANT)
if BOT_MODE == 'ZILANT' and event_subscriptions:
response += "🎭 <b>Мероприятия:</b>\n"
for sub in event_subscriptions:
event_id = sub['event_id']
@@ -1012,17 +1050,7 @@ def handle_callback(call):
if call.data.startswith("cmd_"):
command = call.data[4:]
if command == "help":
help_text = (
"ℹ️ <b>Подсказка информ-бота Зиланткона</b>\n\n"
"Я запоминаю, кто чем интересовался, и напоминаю, "
"когда это становится можно включить в План Захвата.\n\n"
"<b>Доступные команды:</b>\n"
"• /start - начать работу с ботом (вы уже здесь!)\n"
"• /help - показать эту справку\n"
"• /home - перейти в основной канал Зиланткона\n"
"• /list - показать текущие подписки\n\n"
"Используйте кнопки ниже для быстрого доступа:"
)
help_text = get_help_text()
bot.send_message(
call.message.chat.id,
@@ -1037,7 +1065,7 @@ def handle_callback(call):
# Получаем подписки на посты и события
post_subscriptions = get_user_subscriptions(user_id)
event_subscriptions = get_user_subscriptions_evt(user_id)
event_subscriptions = get_user_subscriptions_evt(user_id) if BOT_MODE == 'ZILANT' else []
# Формируем ответ
response = "📋 <b>Ваши подписки</b>\n\n"
@@ -1062,16 +1090,17 @@ def handle_callback(call):
# Названия постов выводим подчеркнутыми и жирным шрифтом
response += f"• <u><b><a href='{post_link}'>{display_name}</a></b></u>\n"
# Получаем связанные мероприятия (только опубликованные)
linked_events = get_linked_events_for_post(post_id)
if linked_events:
for event in linked_events:
event_link = format_channel_link(event['tg_message_id'])
response += f" └─ <a href='{event_link}'>{event['name']}</a>\n"
# Получаем связанные мероприятия (только опубликованные) - только для ZILANT
if BOT_MODE == 'ZILANT':
linked_events = get_linked_events_for_post(post_id)
if linked_events:
for event in linked_events:
event_link = format_channel_link(event['tg_message_id'])
response += f" └─ <a href='{event_link}'>{event['name']}</a>\n"
response += "\n"
# Добавляем подписки на события
if event_subscriptions:
# Добавляем подписки на события (только для ZILANT)
if BOT_MODE == 'ZILANT' and event_subscriptions:
response += "🎭 <b>Мероприятия:</b>\n"
for sub in event_subscriptions:
event_id = sub['event_id']
@@ -1108,12 +1137,7 @@ def handle_callback(call):
log_event("list_request", user_info)
elif command == "back":
# Возврат к главному меню
welcome_text = (
"🌟 <b>Привет!</b> 🌟\n\n"
"Я - информационный бот Зиланткона. "
"Здесь можно подписаться на интересные события будущего Зиланта - и я напомню,"
"когда их можно будет включить в свой План Захвата Конвента.\n\n"
)
welcome_text = get_welcome_text()
bot.send_message(
call.message.chat.id,