From aa455ee1a581554458a665fb3c6fdb2dc2b15c64 Mon Sep 17 00:00:00 2001 From: KerradKerridi Date: Tue, 30 Aug 2022 23:17:17 +0300 Subject: [PATCH] new function voice chat --- db.py | 32 ++++++++++++++++++++++++-------- main.py | 35 ++++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/db.py b/db.py index f4c2eb1..ac4194e 100644 --- a/db.py +++ b/db.py @@ -125,15 +125,31 @@ class BotDB: except sqlite3.Error as error: print(error) - def get_random_audio(self, user_id): - """Получает данные о войсе юзера из БД""" + def check_listen_audio(self, user_id): + """Проверяет прослушано ли аудио пользователем""" try: - file_name = self.cursor.execute( - "SELECT `file_name` FROM `audio_message_reference` WHERE `author_id` <> ?", (user_id,)) - file_name_massive = file_name.fetchall() - number_element = random.randint(0, len(file_name_massive)-1) - audio_for_user = file_name_massive[number_element] - return audio_for_user + query_listen_audio = self.cursor.execute( + """SELECT l.file_name + FROM audio_message_reference a + LEFT JOIN listen_audio_users l ON l.file_name = a.file_name + WHERE l.user_id = ? + AND l.file_name IS NOT NULL""" , (user_id,)) + check_sign = query_listen_audio.fetchall() + query_all_audio = self.cursor.execute('SELECT file_name FROM audio_message_reference WHERE author_id <> ?', (user_id,)) + sign_all_audio = query_all_audio.fetchall() + new_sign1 = list(set(sign_all_audio) - set(check_sign)) + new_sign = [] + for i in new_sign1: + new_sign.append(i[0]) + return new_sign + except sqlite3.Error as error: + print(error) + + def mark_listened_audio(self, file_name, user_id): + """Отмечает аудио прослушанным для конкретного пользователя.""" + try: + result = self.cursor.execute("INSERT INTO `listen_audio_users` (file_name, user_id, is_listen) VALUES (?, ?, ?)", (file_name, user_id, 1)) + return self.conn.commit() except sqlite3.Error as error: print(error) diff --git a/main.py b/main.py index 6c56117..aa2721e 100644 --- a/main.py +++ b/main.py @@ -19,7 +19,6 @@ config.read(config_path) BOT_TOKEN = config.get('Telegram', 'BOT_TOKEN') GROUP_FOR_POST = config.get('Telegram', 'group_for_posts') GROUP_FOR_MESSAGE = config.get('Telegram', 'group_for_message') -GROUP_FOR_AUDIO = config.get('Telegram', 'group_for_audio') MAIN_PUBLIC = config.get('Telegram', 'main_public') GROUP_FOR_LOGS = config.get('Telegram', 'group_for_logs') IMPORTANT_LOGS = config.get('Telegram', 'important_logs') @@ -194,26 +193,36 @@ def telegram_bot(): bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.message_id) - #menu_standup(message=message) + bot.register_next_step_handler(message, callback=go_send_messages) def standup(message): + # Клавиатуру добавляем + markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True) + item1 = types.KeyboardButton("Высказаться") + item2 = types.KeyboardButton("Послушать") + item3 = types.KeyboardButton("Вернуться в меню") + markup.add(item1, item2, item3) try: if message.text == 'Высказаться' or message.text == 'Высказаться еще': markup = types.ReplyKeyboardRemove() msg = bot.send_message(chat_id=message.chat.id, text='Пришли мне свое голосовое сообщение', reply_markup=markup) bot.register_next_step_handler(msg, save_voice_message) elif message.text == 'Послушать': - file = BotDB.get_random_audio(user_id=message.from_user.id)[0] - path = Path(f'voice_users/{file}.ogg') - voice = open(path, 'rb') - #Клавиатуру добавляем - markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True) - item1 = types.KeyboardButton("Высказаться") - item2 = types.KeyboardButton("Послушать") - item3 = types.KeyboardButton("Вернуться в меню") - markup.add(item1, item2, item3) - msg = bot.send_voice(message.chat.id, voice=voice, reply_markup=markup) - bot.register_next_step_handler(msg, standup) + check_audio = BotDB.check_listen_audio(user_id=message.from_user.id) + list_audio = list(check_audio) + if list_audio == []: + msg = bot.send_message(message.chat.id, 'Прости, ты прослушал все аудио. Возвращайся позже', reply_markup=markup) + bot.register_next_step_handler(msg, standup) + else: + number_element = random.randint(0, len(list_audio) - 1) + audio_for_user = check_audio[number_element] + path = Path(f'voice_users/{audio_for_user}.ogg') + voice = open(path, 'rb') + #Маркируем сообщение как прослушанное + BotDB.mark_listened_audio(audio_for_user, user_id=message.from_user.id) + + msg = bot.send_voice(message.chat.id, voice=voice, reply_markup=markup) + bot.register_next_step_handler(msg, standup) elif message.text == 'Вернуться в меню': after_post(message=message) except: