Add voice bot welcome tracking functionality
- Implemented methods to check and mark if a user has received a welcome message from the voice bot in both async and synchronous database classes. - Updated database schema to include a new field for tracking welcome message status. - Enhanced voice handler to utilize the new tracking methods, improving user interaction flow and engagement metrics.
This commit is contained in:
@@ -96,28 +96,46 @@ class VoiceHandlers:
|
||||
|
||||
async def voice_bot_button_handler(self, message: types.Message, state: FSMContext, bot_db: MagicData("bot_db"), settings: MagicData("settings")):
|
||||
"""Обработчик кнопки 'Голосовой бот' из основной клавиатуры"""
|
||||
await self.start(message, state, bot_db, settings)
|
||||
try:
|
||||
# Проверяем, получал ли пользователь приветственное сообщение
|
||||
welcome_received = bot_db.check_voice_bot_welcome_received(message.from_user.id)
|
||||
logger.info(f"Пользователь {message.from_user.id}: welcome_received = {welcome_received}")
|
||||
|
||||
if welcome_received:
|
||||
# Если уже получал приветствие, вызываем restart_function
|
||||
logger.info(f"Пользователь {message.from_user.id}: вызываем restart_function")
|
||||
await self.restart_function(message, state, bot_db, settings)
|
||||
else:
|
||||
# Если не получал, вызываем start
|
||||
logger.info(f"Пользователь {message.from_user.id}: вызываем start")
|
||||
await self.start(message, state, bot_db, settings)
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при проверке приветственного сообщения: {e}")
|
||||
# В случае ошибки вызываем start
|
||||
await self.start(message, state, bot_db, settings)
|
||||
|
||||
async def restart_function(
|
||||
self,
|
||||
message: types.Message,
|
||||
state: FSMContext,
|
||||
bot_db: MagicData("bot_db")
|
||||
bot_db: MagicData("bot_db"),
|
||||
settings: MagicData("settings")
|
||||
):
|
||||
await message.forward(chat_id=bot_db.settings['Telegram']['group_for_logs'])
|
||||
logger.info(f"Пользователь {message.from_user.id}: вызывается функция restart_function")
|
||||
await message.forward(chat_id=settings['Telegram']['group_for_logs'])
|
||||
await update_user_info(VOICE_BOT_NAME, message)
|
||||
check_user_emoji(message)
|
||||
markup = get_main_keyboard()
|
||||
await message.answer(text='Я перезапущен!', reply_markup=markup)
|
||||
await message.answer(text='🎤 Записывайся или слушай!', reply_markup=markup)
|
||||
await state.set_state(STATE_START)
|
||||
|
||||
async def handle_emoji_message(
|
||||
self,
|
||||
message: types.Message,
|
||||
state: FSMContext,
|
||||
bot_db: MagicData("bot_db")
|
||||
settings: MagicData("settings")
|
||||
):
|
||||
await message.forward(chat_id=bot_db.settings['Telegram']['group_for_logs'])
|
||||
await message.forward(chat_id=settings['Telegram']['group_for_logs'])
|
||||
user_emoji = check_user_emoji(message)
|
||||
await state.set_state(STATE_START)
|
||||
if user_emoji is not None:
|
||||
@@ -127,7 +145,6 @@ class VoiceHandlers:
|
||||
self,
|
||||
message: types.Message,
|
||||
state: FSMContext,
|
||||
bot_db: MagicData("bot_db"),
|
||||
settings: MagicData("settings")
|
||||
):
|
||||
await message.forward(chat_id=settings['Telegram']['group_for_logs'])
|
||||
@@ -135,7 +152,7 @@ class VoiceHandlers:
|
||||
help_message = messages.get_message(get_first_name(message), 'HELP_MESSAGE')
|
||||
await message.answer(
|
||||
text=help_message,
|
||||
disable_web_page_preview=not bot_db.settings['Telegram']['preview_link']
|
||||
disable_web_page_preview=not settings['Telegram']['preview_link']
|
||||
)
|
||||
await state.set_state(STATE_START)
|
||||
|
||||
@@ -146,6 +163,7 @@ class VoiceHandlers:
|
||||
bot_db: MagicData("bot_db"),
|
||||
settings: MagicData("settings")
|
||||
):
|
||||
logger.info(f"Пользователь {message.from_user.id}: вызывается функция start")
|
||||
await state.set_state(STATE_START)
|
||||
await message.forward(chat_id=settings['Telegram']['group_for_logs'])
|
||||
await update_user_info(VOICE_BOT_NAME, message)
|
||||
@@ -154,6 +172,13 @@ class VoiceHandlers:
|
||||
# Создаем сервис и отправляем приветственные сообщения
|
||||
voice_service = VoiceBotService(bot_db, settings)
|
||||
await voice_service.send_welcome_messages(message, user_emoji)
|
||||
|
||||
# Отмечаем, что пользователь получил приветственное сообщение
|
||||
try:
|
||||
bot_db.mark_voice_bot_welcome_received(message.from_user.id)
|
||||
logger.info(f"Пользователь {message.from_user.id}: отмечен как получивший приветствие")
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при отметке получения приветствия: {e}")
|
||||
|
||||
|
||||
async def refresh_listen_function(
|
||||
|
||||
Reference in New Issue
Block a user