diff --git a/database/db.py b/database/db.py
index 2fd98ed..425e2d1 100644
--- a/database/db.py
+++ b/database/db.py
@@ -726,7 +726,6 @@ class BotDB:
(emoji, user_id,))
self.conn.commit()
self.logger.info(f"Эмоджи обновлен для пользователя: user_id={user_id}")
- return None
except sqlite3.Error as error:
self.logger.error(f"Ошибка обновления эмодзи для пользователя: {error}")
return error
@@ -744,21 +743,19 @@ class BotDB:
True, если эмодзи такого нет, иначе False.
Raises:
- None: В случае ошибки возвращается None
+ error: В случае ошибки возвращается error
"""
self.logger.info(f"Запуск функции check_emoji_for_user: user_id={user_id}")
try:
self.connect()
self.cursor.execute("SELECT emoji FROM our_users WHERE user_id = ?", (user_id,))
pre_result = self.cursor.fetchone()
- if pre_result is not None:
- print(f'Результат функции check_emoji_for_user - {str(pre_result[0])}')
- return str(pre_result[0])
- else:
- return None
+ # Возвращаем "Смайл не определен", если pre_result или pre_result[0] is None
+ result = pre_result[0] if pre_result else None
+ return str(result) if result is not None else "Смайл еще не определен"
except sqlite3.Error as error:
self.logger.error(f"Ошибка проверки эмодзи в базе: {error}")
- return None
+ return error
finally:
self.close()
@@ -1079,7 +1076,7 @@ class BotDB:
self.logger.error(f"Ошибка в функции set_user_id_and_message_id_for_voice_bot {str(e)}")
def get_user_id_by_file_name(self, file_name: str):
- self.logger.info(f"Запуск функции get_user_id_by_file_name, идентификатор поста "
+ self.logger.info(f"Запуск функции get_user_id_by_file_name, идентификатор файла "
f"{file_name}")
try:
self.connect()
@@ -1087,11 +1084,25 @@ class BotDB:
"FROM audio_message_reference WHERE file_name = ?",
(file_name,))
user_id = result.fetchone()[0]
- self.logger.info(f"Функция get_user_id_by_file_name получила author_id {user_id}")
+ self.logger.info(f"Функция get_user_id_by_file_name получила user_id {user_id}")
return user_id
except Exception as e:
self.logger.error(f"Ошибка в функции get_user_id_by_file_name {str(e)}")
+ def get_date_by_file_name(self, file_name: str):
+ self.logger.info(f"Запуск функции get_date_by_file_name, идентификатор файла "
+ f"{file_name}")
+ try:
+ self.connect()
+ result = self.cursor.execute("SELECT date_added "
+ "FROM audio_message_reference WHERE file_name = ?",
+ (file_name,))
+ date_added = result.fetchone()[0]
+ self.logger.info(f"Функция get_date_by_file_name получила date_added {date_added}")
+ return date_added
+ except Exception as e:
+ self.logger.error(f"Ошибка в функции get_date_by_file_name {str(e)}")
+
def add_post_content_in_db(self, post_id: int, message_id: int, content_name: str, type_content: str):
self.logger.info(
f"Запуск функции add_post_content_in_db: post_id={post_id}, message_id={message_id}, "
@@ -1162,7 +1173,7 @@ class BotDB:
f"date_added = {date_added}")
return None
except sqlite3.Error as error:
- print(error)
+ self.logger.error(f"Ошибка при добавлении войса в базу: {error}")
raise
finally:
self.close()
diff --git a/helper_bot/handlers/private/private_handlers.py b/helper_bot/handlers/private/private_handlers.py
index 22b2381..5953dee 100644
--- a/helper_bot/handlers/private/private_handlers.py
+++ b/helper_bot/handlers/private/private_handlers.py
@@ -40,6 +40,17 @@ TEST = bdf.settings['Settings']['test']
BotDB = bdf.get_db()
+@private_router.message(
+ ChatTypeFilter(chat_type=["private"]),
+ Command("emoji")
+)
+async def handle_emoji_message(message: types.Message, state: FSMContext):
+ user_emoji = check_user_emoji(message)
+ await state.set_state("START")
+ if user_emoji is not None:
+ await message.answer(f'Твоя эмодзя - {user_emoji}', parse_mode='HTML')
+
+
@private_router.message(
ChatTypeFilter(chat_type=["private"]),
Command("restart")
@@ -50,7 +61,7 @@ async def handle_restart_message(message: types.Message, state: FSMContext):
await message.forward(chat_id=GROUP_FOR_LOGS)
await state.set_state("START")
await update_user_info('love', message)
- check_user_emoji(message.from_user.id)
+ check_user_emoji(message)
await message.answer('Я перезапущен!', reply_markup=markup, parse_mode='HTML')
except Exception as e:
logger.error(f"Произошла ошибка handle_restart_message. Ошибка:{str(e)}")
@@ -70,7 +81,7 @@ async def handle_start_message(message: types.Message, state: FSMContext):
try:
await message.forward(chat_id=GROUP_FOR_LOGS)
await update_user_info('love', message)
- check_user_emoji(message.from_user.id)
+ check_user_emoji(message)
await state.set_state("START")
logger.info(
f"Формирование приветственного сообщения для пользователя. Сообщение: {message.text} "
diff --git a/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc b/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc
index d158870..80a80d9 100644
Binary files a/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc and b/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc differ
diff --git a/helper_bot/utils/__pycache__/messages.cpython-312.pyc b/helper_bot/utils/__pycache__/messages.cpython-312.pyc
index 177f9a6..abd9cca 100644
Binary files a/helper_bot/utils/__pycache__/messages.cpython-312.pyc and b/helper_bot/utils/__pycache__/messages.cpython-312.pyc differ
diff --git a/helper_bot/utils/helper_func.py b/helper_bot/utils/helper_func.py
index facd583..21e4076 100644
--- a/helper_bot/utils/helper_func.py
+++ b/helper_bot/utils/helper_func.py
@@ -424,19 +424,21 @@ async def update_user_info(source: str, message: types.Message):
BotDB.update_date_for_user(date, user_id)
-def check_user_emoji(user_id: int):
- if BotDB.check_emoji_for_user(user_id=user_id) is None:
+def check_user_emoji(message: types.Message):
+ user_id = message.from_user.id
+ user_emoji = BotDB.check_emoji_for_user(user_id=user_id)
+ if user_emoji is None:
user_emoji = get_random_emoji()
BotDB.update_emoji_for_user(user_id=user_id, emoji=user_emoji)
+ return user_emoji
def get_random_emoji():
attempts = 0
while attempts < 100:
- print(attempts)
user_emoji = random.choice(emoji_list)
if not BotDB.check_emoji(user_emoji):
return user_emoji
attempts += 1
logger.error("Не удалось найти уникальный эмодзи после нескольких попыток.")
- return None
+ return "Эмоджи не определен"
diff --git a/helper_bot/utils/messages.py b/helper_bot/utils/messages.py
index 883ae1d..64f8083 100644
--- a/helper_bot/utils/messages.py
+++ b/helper_bot/utils/messages.py
@@ -1,5 +1,3 @@
-
-
def get_message(username: str, type_message: str):
constants = {
'HELLO_MESSAGE': "Привет, username!👋🏼&Меня зовут Виби, я бот канала 'Влюбленный Бийск'❤🤖"
@@ -25,7 +23,7 @@ def get_message(username: str, type_message: str):
"&Мы рассмотрим и ответим тебе в ближайшее время☺️❤️",
"DEL_MESSAGE": "username, напиши свое обращение или предложение✍"
"&Мы рассмотрим и ответим тебе в ближайшее время☺❤",
- "BYE_MESSAGE": "Если позднее захочешь предложить еще один пост или обратиться к админам с вопросом, то просто пришли в чат команду 👉 /start"
+ "BYE_MESSAGE": "Если позднее захочешь предложить еще один пост или обратиться к админам с вопросом, то просто пришли в чат команду 👉 /restart"
"&&И тебе пока!👋🏼❤️",
"USER_ERROR": "Увы, я не понимаю тебя😐💔 Выбери один из пунктов в нижнем меню, а затем пиши.",
"QUESTION": "Сообщение успешно отправлено❤️ Ответим, как только сможем😉",
diff --git a/voice_bot/handlers/callback_handler.py b/voice_bot/handlers/callback_handler.py
index e79cbdd..a969a98 100644
--- a/voice_bot/handlers/callback_handler.py
+++ b/voice_bot/handlers/callback_handler.py
@@ -1,68 +1,68 @@
-import time
-from datetime import datetime
-from pathlib import Path
-
-from aiogram import Router, F
-from aiogram.types import CallbackQuery
-
-from helper_bot.utils.base_dependency_factory import BaseDependencyFactory
-
-callback_router = Router()
-
-bdf = BaseDependencyFactory()
-
-GROUP_FOR_LOGS = bdf.settings['Telegram']['group_for_logs']
-GROUP_FOR_POST = bdf.settings['Telegram']['group_for_posts']
-IMPORTANT_LOGS = bdf.settings['Telegram']['important_logs']
-PREVIEW_LINK = bdf.settings['Telegram']['preview_link']
-LOGS = bdf.settings['Settings']['logs']
-TEST = bdf.settings['Settings']['test']
-
-BotDB = bdf.get_db()
-
-
-@callback_router.callback_query(
- F.data == "save"
-)
-async def save_voice_message(call: CallbackQuery):
- file_name = ''
- file_id = 1
- user_id = BotDB.get_user_id_by_message_id_for_voice_bot(call.message.message_id)
- # Проверяем что запись о файле есть в базе данных
- is_having_audio_from_user = BotDB.get_last_user_audio_record(user_id=user_id)
- if is_having_audio_from_user is False:
- # Если нет, то генерируем имя файла
- file_name = f'message_from_{user_id}_number_{file_id}'
- else:
- # Иначе берем последнюю запись из БД, добавляем к ней 1, и создаем новую запись
- file_name = BotDB.get_path_for_audio_record(user_id=user_id)
- file_id = BotDB.get_id_for_audio_record(user_id) + 1
- path = Path(f'voice_users/{file_name}.ogg')
- if path.exists():
- file_name = f'message_from_{user_id}_number_{file_id}'
- else:
- pass
- # Собираем инфо о сообщении
- time_UTC = int(time.time())
- date_added = datetime.fromtimestamp(time_UTC)
-
- # Сохраняем в базку
- BotDB.add_audio_record(file_name, user_id, date_added, 0, file_id)
-
- file_info = await call.message.bot.get_file(file_id=call.message.voice.file_id)
- downloaded_file = await call.message.bot.download_file(file_path=file_info.file_path)
- with open(f'voice_users/{file_name}.ogg', 'wb') as new_file:
- new_file.write(downloaded_file.read())
-
- await call.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
- await call.answer(text='Сохранено!', cache_time=3)
-
-
-@callback_router.callback_query(
- F.data == "delete"
-)
-async def delete_voice_message(call: CallbackQuery):
- # Получаем из базы автора + отправляем сообщение + удаляем сообщение из предложки
-
- await call.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
- await call.answer(text='Удалено!', cache_time=3)
+import time
+from datetime import datetime
+from pathlib import Path
+
+from aiogram import Router, F
+from aiogram.types import CallbackQuery
+
+from helper_bot.utils.base_dependency_factory import BaseDependencyFactory
+
+callback_router = Router()
+
+bdf = BaseDependencyFactory()
+
+GROUP_FOR_LOGS = bdf.settings['Telegram']['group_for_logs']
+GROUP_FOR_POST = bdf.settings['Telegram']['group_for_posts']
+IMPORTANT_LOGS = bdf.settings['Telegram']['important_logs']
+PREVIEW_LINK = bdf.settings['Telegram']['preview_link']
+LOGS = bdf.settings['Settings']['logs']
+TEST = bdf.settings['Settings']['test']
+
+BotDB = bdf.get_db()
+
+
+@callback_router.callback_query(
+ F.data == "save"
+)
+async def save_voice_message(call: CallbackQuery):
+ file_name = ''
+ file_id = 1
+ user_id = BotDB.get_user_id_by_message_id_for_voice_bot(call.message.message_id)
+ # Проверяем что запись о файле есть в базе данных
+ is_having_audio_from_user = BotDB.get_last_user_audio_record(user_id=user_id)
+ if is_having_audio_from_user is False:
+ # Если нет, то генерируем имя файла
+ file_name = f'message_from_{user_id}_number_{file_id}'
+ else:
+ # Иначе берем последнюю запись из БД, добавляем к ней 1, и создаем новую запись
+ file_name = BotDB.get_path_for_audio_record(user_id=user_id)
+ file_id = BotDB.get_id_for_audio_record(user_id) + 1
+ path = Path(f'voice_users/{file_name}.ogg')
+ if path.exists():
+ file_name = f'message_from_{user_id}_number_{file_id}'
+ else:
+ pass
+ # Собираем инфо о сообщении
+ time_UTC = int(time.time())
+ date_added = datetime.fromtimestamp(time_UTC)
+
+ # Сохраняем в базку
+ BotDB.add_audio_record(file_name, user_id, date_added, 0, file_id)
+
+ file_info = await call.message.bot.get_file(file_id=call.message.voice.file_id)
+ downloaded_file = await call.message.bot.download_file(file_path=file_info.file_path)
+ with open(f'voice_users/{file_name}.ogg', 'wb') as new_file:
+ new_file.write(downloaded_file.read())
+
+ await call.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
+ await call.answer(text='Сохранено!', cache_time=3)
+
+
+@callback_router.callback_query(
+ F.data == "delete"
+)
+async def delete_voice_message(call: CallbackQuery):
+ # Получаем из базы автора + отправляем сообщение + удаляем сообщение из предложки
+
+ await call.bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
+ await call.answer(text='Удалено!', cache_time=3)
diff --git a/voice_bot/handlers/voice_handler.py b/voice_bot/handlers/voice_handler.py
index b571503..5cd8a60 100644
--- a/voice_bot/handlers/voice_handler.py
+++ b/voice_bot/handlers/voice_handler.py
@@ -37,13 +37,24 @@ voice_router.message.middleware(BlacklistMiddleware())
async def restart_function(message: types.Message, state: FSMContext):
await message.forward(chat_id=GROUP_FOR_LOGS)
await update_user_info('voice', message)
- check_user_emoji(message.from_user.id)
+ check_user_emoji(message)
markup = get_main_keyboard()
await message.answer(text='Я перезапущен!',
reply_markup=markup)
await state.set_state('START')
+@voice_router.message(
+ ChatTypeFilter(chat_type=["private"]),
+ Command("emoji")
+)
+async def handle_emoji_message(message: types.Message, state: FSMContext):
+ user_emoji = check_user_emoji(message)
+ await state.set_state("START")
+ if user_emoji is not None:
+ await message.answer(f'Твоя эмодзя - {user_emoji}', parse_mode='HTML')
+
+
@voice_router.message(
ChatTypeFilter(chat_type=["private"]),
Command("help")
@@ -51,7 +62,6 @@ async def restart_function(message: types.Message, state: FSMContext):
async def help_function(message: types.Message, state: FSMContext):
await message.forward(chat_id=GROUP_FOR_LOGS)
await update_user_info('voice', message)
- check_user_emoji(message.from_user.id)
await message.answer(
text='Скорее всего ответы на твои вопросы есть здесь, ознакомься: https://telegra.ph/Instrukciya-k-botu-Golosa-Bijsk-10-11-2'
'\nЕсли это не поможет, пиши в личку: @Kerrad1', disable_web_page_preview=not PREVIEW_LINK)
@@ -66,7 +76,7 @@ async def start(message: types.Message, state: FSMContext):
await state.set_state("START")
await message.forward(chat_id=GROUP_FOR_LOGS)
await update_user_info('voice', message)
- check_user_emoji(message.from_user.id)
+ user_emoji = check_user_emoji(message)
try:
name_stick_hello = list(Path('Stick').rglob('Hello_*'))
random_stick_hello = random.choice(name_stick_hello)
@@ -107,11 +117,17 @@ async def start(message: types.Message, state: FSMContext):
parse_mode='html', reply_markup=markup,
disable_web_page_preview=not PREVIEW_LINK)
time.sleep(0.8)
+ await message.answer(text=f"Любые войсы будут помечены эмоджи. Твой эмоджи - {user_emoji}"
+ f"Таким эмоджи будут помечены твои сообщения для других "
+ f"Но другие люди не узнают кто за каким эмоджи скрывается:)",
+ parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ time.sleep(0.8)
await message.answer(text="Так же можешь ознакомиться с инструкцией к боту по команде /help",
parse_mode='html', reply_markup=markup,
disable_web_page_preview=not PREVIEW_LINK)
time.sleep(0.8)
- await message.answer(text="ну всё, достаточно инструкций. записывайся! Микрофон твой - 🎤",
+ await message.answer(text="Ну всё, достаточно инструкций. записывайся! Микрофон твой - 🎤",
parse_mode='html', reply_markup=markup,
disable_web_page_preview=not PREVIEW_LINK)
@@ -124,7 +140,6 @@ async def refresh_listen_function(message: types.Message, state: FSMContext):
await message.forward(chat_id=GROUP_FOR_LOGS)
await update_user_info('voice', message)
markup = get_main_keyboard()
- check_user_emoji(message.from_user.id)
BotDB.delete_listen_count_for_user(message.from_user.id)
await message.answer(
text='Прослушивания очищены. Можешь начать слушать заново🤗', disable_web_page_preview=not PREVIEW_LINK,
@@ -195,20 +210,27 @@ async def standup_listen_audio(message: types.Message):
except Exception as e:
logger.error(f'Не удалось получить последнюю дату {e}')
else:
- # Получаем эмоджи пользователя
+ # Получаем ссылку на аудио сообщение пользователя
number_element = random.randint(0, len(list_audio) - 1)
audio_for_user = check_audio[number_element]
+
# Получаем автора записи + эмодзи по нему
user_id = BotDB.get_user_id_by_file_name(audio_for_user)
+ date_added = BotDB.get_date_by_file_name(audio_for_user)
+ # TODO: Мейби не напрямую ходить?
+ # user_emoji = BotDB.check_emoji_for_user(user_id)
user_emoji = BotDB.check_emoji_for_user(user_id)
path = Path(f'voice_users/{audio_for_user}.ogg')
- # voice = open(path, 'rb')
voice = FSInputFile(path)
+
# Маркируем сообщение как прослушанное
BotDB.mark_listened_audio(audio_for_user, user_id=message.from_user.id)
+
+ # Формируем подпись
if user_emoji:
- await message.bot.send_voice(chat_id=message.chat.id, voice=voice, caption=user_emoji, reply_markup=markup)
+ caption = f'{user_emoji}\nДата записи: {date_added}'
else:
- await message.bot.send_voice(chat_id=message.chat.id, voice=voice, reply_markup=markup)
+ caption = f'Дата записи: {date_added}'
+ await message.bot.send_voice(chat_id=message.chat.id, voice=voice, caption=caption, reply_markup=markup)
await message.answer(text=f'Осталось непрослушанных: {len(check_audio) - 1}', reply_markup=markup)