[ВОЛК] подключаем бота подписки
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
+11 -3
View File
@@ -9,6 +9,11 @@ WORKMODE = "VOLK"
# Webhook Responder-bot
WEBHOOK_URL = "https://bot.aabpro.ru/volk_bot"
WEBHOOK_PORT = 5010
WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c"
# Webhook Responder-bot
# WEBHOOK_URL = "https://bot.aabpro.ru/testbot"
# WEBHOOK_PORT = 5005
@@ -59,8 +64,12 @@ MDB_PW = 'T38tU83r69'
POSTER_BOT_TOKEN = "8215624618:AAF6VtqRtFr4twFRTiTjedSDE6txkbIy6rc"
# VOLK production bot @VOLK_informer_bot
# POSTER_BOT_TOKEN = "8279661544:AAEsJee6icCUn_AbWxhDpk2CLxQhzaartuI"
# VOLK responder bot
RESPONDER_BOT_TOKEN = "8072579275:AAFiyKN1EPPnP5ZVZNTDGEriYJf1xADbfsY"
RESPONDER_BOT_NAME = "@VOLK_responder_bot"
# @posto_1638_bot
# NOT NEEDED FOR VOLK MODE
# RESPONDER_BOT_TOKEN = "8301828103:AAHDuBkw7EUkmMvv5TPpVJaLeeBLu-EB21U"
# Zilant info bot
# BOT_TOKEN = "7951721805:AAEW6Go9yvOOcJSWjgJZ7E2XLPtii2qG7UU"
@@ -72,7 +81,6 @@ POSTER_BOT_TOKEN = "8215624618:AAF6VtqRtFr4twFRTiTjedSDE6txkbIy6rc"
# POSTER_BOT_TOKEN = "8115998792:AAHamcNBlTgTXG0Birc1gNbZ5B7z4jMEdik"
# RESPONDER_BOT_TOKEN = "7951721805:AAEW6Go9yvOOcJSWjgJZ7E2XLPtii2qG7UU"
# RESPONDER_BOT_NAME = "Zilant_info_bot"
# NOT NEEDED FOR VOLK MODE
# RESPONDER_BOT_NAME = "posto_1638_bot"
# Parameters
@@ -126,7 +134,7 @@ AUTO_PUBLISH = true
AUTO_PUB_EVT = true
PROCESS_EVENT_UPDATES = false
PUBLISH_SILENTLY = true
USE_SUBSCRIPTION_BOT = false
USE_SUBSCRIPTION_BOT = true
LOG_DEBUG_DATA = false
+1 -1
View File
@@ -6,7 +6,7 @@ After=network.target
[Service]
User=root
WorkingDirectory=/opt/testbot-git
ExecStart=/opt/testbot-git/venv/bin/gunicorn --bind 192.168.0.109:5005 --workers 4 wsgi_bot:app
ExecStart=/opt/testbot-git/venv/bin/gunicorn --bind 192.168.0.109:5010 --workers 4 wsgi_bot:app
Restart=always
[Install]
+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,