new function voice chat
This commit is contained in:
32
db.py
32
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)
|
||||
|
||||
|
||||
35
main.py
35
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:
|
||||
|
||||
Reference in New Issue
Block a user