Dev 8 #10
@@ -977,3 +977,63 @@ class AsyncBotDB:
|
||||
"""Закрытие соединений."""
|
||||
# Соединения закрываются в каждом методе
|
||||
pass
|
||||
|
||||
# Методы для voice bot welcome tracking
|
||||
async def check_voice_bot_welcome_received(self, user_id: int) -> bool:
|
||||
"""
|
||||
Проверяет, получал ли пользователь приветственное сообщение от voice_bot.
|
||||
|
||||
Args:
|
||||
user_id (int): Идентификатор пользователя в Telegram.
|
||||
|
||||
Returns:
|
||||
bool: True, если пользователь получал приветствие, False - иначе.
|
||||
"""
|
||||
conn = None
|
||||
try:
|
||||
conn = await self._get_connection()
|
||||
async with conn.execute(
|
||||
"SELECT voice_bot_welcome_received FROM our_users WHERE user_id = ?",
|
||||
(user_id,)
|
||||
) as cursor:
|
||||
result = await cursor.fetchone()
|
||||
if result:
|
||||
welcome_received = bool(result[0])
|
||||
self.logger.info(f"Пользователь {user_id} получал приветствие: {welcome_received}")
|
||||
return welcome_received
|
||||
else:
|
||||
self.logger.info(f"Пользователь {user_id} не найден в базе")
|
||||
return False
|
||||
except Exception as e:
|
||||
self.logger.error(f"Ошибка при проверке получения приветствия: {e}")
|
||||
return False
|
||||
finally:
|
||||
if conn:
|
||||
await conn.close()
|
||||
|
||||
async def mark_voice_bot_welcome_received(self, user_id: int) -> bool:
|
||||
"""
|
||||
Отмечает, что пользователь получил приветственное сообщение от voice_bot.
|
||||
|
||||
Args:
|
||||
user_id (int): Идентификатор пользователя в Telegram.
|
||||
|
||||
Returns:
|
||||
bool: True, если обновление прошло успешно, False - в случае ошибки.
|
||||
"""
|
||||
conn = None
|
||||
try:
|
||||
conn = await self._get_connection()
|
||||
await conn.execute(
|
||||
"UPDATE our_users SET voice_bot_welcome_received = 1 WHERE user_id = ?",
|
||||
(user_id,)
|
||||
)
|
||||
await conn.commit()
|
||||
self.logger.info(f"Пользователь {user_id} отмечен как получивший приветствие")
|
||||
return True
|
||||
except Exception as e:
|
||||
self.logger.error(f"Ошибка при отметке получения приветствия: {e}")
|
||||
return False
|
||||
finally:
|
||||
if conn:
|
||||
await conn.close()
|
||||
|
||||
@@ -1492,3 +1492,60 @@ class BotDB:
|
||||
raise
|
||||
finally:
|
||||
self.close()
|
||||
|
||||
def check_voice_bot_welcome_received(self, user_id: int) -> bool:
|
||||
"""
|
||||
Проверяет, получал ли пользователь приветственное сообщение от voice_bot.
|
||||
|
||||
Args:
|
||||
user_id (int): Идентификатор пользователя в Telegram.
|
||||
|
||||
Returns:
|
||||
bool: True, если пользователь получал приветствие, False - иначе.
|
||||
"""
|
||||
self.logger.info(f"Запуск функции check_voice_bot_welcome_received. user_id={user_id}")
|
||||
try:
|
||||
self.connect()
|
||||
self.cursor.execute(
|
||||
"SELECT voice_bot_welcome_received FROM our_users WHERE user_id = ?",
|
||||
(user_id,)
|
||||
)
|
||||
result = self.cursor.fetchone()
|
||||
if result:
|
||||
welcome_received = bool(result[0])
|
||||
self.logger.info(f"Пользователь {user_id} получал приветствие: {welcome_received}")
|
||||
return welcome_received
|
||||
else:
|
||||
self.logger.info(f"Пользователь {user_id} не найден в базе")
|
||||
return False
|
||||
except sqlite3.Error as error:
|
||||
self.logger.error(f"Ошибка при проверке получения приветствия: {error}")
|
||||
return False
|
||||
finally:
|
||||
self.close()
|
||||
|
||||
def mark_voice_bot_welcome_received(self, user_id: int) -> bool:
|
||||
"""
|
||||
Отмечает, что пользователь получил приветственное сообщение от voice_bot.
|
||||
|
||||
Args:
|
||||
user_id (int): Идентификатор пользователя в Telegram.
|
||||
|
||||
Returns:
|
||||
bool: True, если обновление прошло успешно, False - в случае ошибки.
|
||||
"""
|
||||
self.logger.info(f"Запуск функции mark_voice_bot_welcome_received. user_id={user_id}")
|
||||
try:
|
||||
self.connect()
|
||||
self.cursor.execute(
|
||||
"UPDATE our_users SET voice_bot_welcome_received = 1 WHERE user_id = ?",
|
||||
(user_id,)
|
||||
)
|
||||
self.conn.commit()
|
||||
self.logger.info(f"Пользователь {user_id} отмечен как получивший приветствие")
|
||||
return True
|
||||
except sqlite3.Error as error:
|
||||
self.logger.error(f"Ошибка при отметке получения приветствия: {error}")
|
||||
return False
|
||||
finally:
|
||||
self.close()
|
||||
|
||||
@@ -86,7 +86,8 @@ CREATE TABLE IF NOT EXISTS our_users (
|
||||
has_stickers INTEGER DEFAULT 0 NOT NULL,
|
||||
emoji TEXT,
|
||||
date_added DATE NOT NULL,
|
||||
date_changed DATE NOT NULL
|
||||
date_changed DATE NOT NULL,
|
||||
voice_bot_welcome_received BOOLEAN DEFAULT 0
|
||||
);
|
||||
|
||||
-- Audio moderation tracking
|
||||
|
||||
@@ -200,7 +200,8 @@ async def change_page(
|
||||
@callback_router.callback_query(F.data == CALLBACK_SAVE)
|
||||
async def save_voice_message(
|
||||
call: CallbackQuery,
|
||||
bot_db: MagicData("bot_db")
|
||||
bot_db: MagicData("bot_db"),
|
||||
settings: MagicData("settings")
|
||||
):
|
||||
try:
|
||||
# Создаем сервис для работы с аудио файлами
|
||||
@@ -224,7 +225,7 @@ async def save_voice_message(
|
||||
|
||||
# Удаляем сообщение из предложки
|
||||
await call.bot.delete_message(
|
||||
chat_id=bot_db.settings['Telegram']['group_for_posts'],
|
||||
chat_id=settings['Telegram']['group_for_posts'],
|
||||
message_id=call.message.message_id
|
||||
)
|
||||
|
||||
@@ -238,12 +239,13 @@ async def save_voice_message(
|
||||
@callback_router.callback_query(F.data == CALLBACK_DELETE)
|
||||
async def delete_voice_message(
|
||||
call: CallbackQuery,
|
||||
bot_db: MagicData("bot_db")
|
||||
bot_db: MagicData("bot_db"),
|
||||
settings: MagicData("settings")
|
||||
):
|
||||
try:
|
||||
# Удаляем сообщение из предложки
|
||||
await call.bot.delete_message(
|
||||
chat_id=bot_db.settings['Telegram']['group_for_posts'],
|
||||
chat_id=settings['Telegram']['group_for_posts'],
|
||||
message_id=call.message.message_id
|
||||
)
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -155,6 +173,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(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user