new function voice chat

This commit is contained in:
KerradKerridi
2022-08-30 23:17:17 +03:00
parent ae82ef414b
commit aa455ee1a5
2 changed files with 46 additions and 21 deletions

32
db.py
View File

@@ -125,15 +125,31 @@ class BotDB:
except sqlite3.Error as error: except sqlite3.Error as error:
print(error) print(error)
def get_random_audio(self, user_id): def check_listen_audio(self, user_id):
"""Получает данные о войсе юзера из БД""" """Проверяет прослушано ли аудио пользователем"""
try: try:
file_name = self.cursor.execute( query_listen_audio = self.cursor.execute(
"SELECT `file_name` FROM `audio_message_reference` WHERE `author_id` <> ?", (user_id,)) """SELECT l.file_name
file_name_massive = file_name.fetchall() FROM audio_message_reference a
number_element = random.randint(0, len(file_name_massive)-1) LEFT JOIN listen_audio_users l ON l.file_name = a.file_name
audio_for_user = file_name_massive[number_element] WHERE l.user_id = ?
return audio_for_user 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: except sqlite3.Error as error:
print(error) print(error)

31
main.py
View File

@@ -19,7 +19,6 @@ config.read(config_path)
BOT_TOKEN = config.get('Telegram', 'BOT_TOKEN') BOT_TOKEN = config.get('Telegram', 'BOT_TOKEN')
GROUP_FOR_POST = config.get('Telegram', 'group_for_posts') GROUP_FOR_POST = config.get('Telegram', 'group_for_posts')
GROUP_FOR_MESSAGE = config.get('Telegram', 'group_for_message') 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') MAIN_PUBLIC = config.get('Telegram', 'main_public')
GROUP_FOR_LOGS = config.get('Telegram', 'group_for_logs') GROUP_FOR_LOGS = config.get('Telegram', 'group_for_logs')
IMPORTANT_LOGS = config.get('Telegram', 'important_logs') IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
@@ -194,24 +193,34 @@ def telegram_bot():
bot.forward_message(chat_id=GROUP_FOR_LOGS, bot.forward_message(chat_id=GROUP_FOR_LOGS,
from_chat_id=message.chat.id, from_chat_id=message.chat.id,
message_id=message.message_id) message_id=message.message_id)
#menu_standup(message=message) bot.register_next_step_handler(message, callback=go_send_messages)
def standup(message): def standup(message):
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) markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
item1 = types.KeyboardButton("Высказаться") item1 = types.KeyboardButton("Высказаться")
item2 = types.KeyboardButton("Послушать") item2 = types.KeyboardButton("Послушать")
item3 = types.KeyboardButton("Вернуться в меню") item3 = types.KeyboardButton("Вернуться в меню")
markup.add(item1, item2, item3) 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 == 'Послушать':
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) msg = bot.send_voice(message.chat.id, voice=voice, reply_markup=markup)
bot.register_next_step_handler(msg, standup) bot.register_next_step_handler(msg, standup)
elif message.text == 'Вернуться в меню': elif message.text == 'Вернуться в меню':