From 949092707c58745c3bf581dca00796da11e1147f Mon Sep 17 00:00:00 2001 From: dmitrium12 Date: Thu, 24 Nov 2022 13:53:08 +0700 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=81=D1=8B=D1=80=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + Bot.py | 24 ++++++++++++++++ functions/convert.py | 43 ++++++++++++++++++++++++++++ functions/get_audio_messages_func.py | 26 +++++++++++++++++ functions/loging.py | 2 ++ main.py | 9 ++++++ test.py | 1 + 7 files changed, 106 insertions(+) create mode 100644 Bot.py create mode 100644 functions/convert.py create mode 100644 functions/get_audio_messages_func.py create mode 100644 functions/loging.py create mode 100644 main.py create mode 100644 test.py diff --git a/.gitignore b/.gitignore index 13d1490..7ec251d 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ +.idea/ .installed.cfg *.egg MANIFEST diff --git a/Bot.py b/Bot.py new file mode 100644 index 0000000..54f3303 --- /dev/null +++ b/Bot.py @@ -0,0 +1,24 @@ +from loguru import logger +import telebot +from telebot import types +from functions import get_audio_messages_func + +bot = telebot.TeleBot("5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") +logger.add("logs/logging_log.log", level="INFO") + + +@bot.message_handler(commands=['start']) +def start(message: types.Message): + name = message.chat.first_name if message.chat.first_name else 'No_name' + logger.info(f"Группа {name} (ID: {message.chat.id}) запустил бота") + bot.send_message(message.chat.id, 'Привет! Отправляй голосовое, я расшифрую!') + + +@bot.message_handler(content_types=['voice', 'video_note', 'video']) +def get_audio_messages(message: types.Message): + get_audio_messages_func.get_audio_messages_func(message, logger, bot) + + +def start_work_bot(): + logger.info("Бот запустился") + bot.polling(none_stop=True, timeout=123) diff --git a/functions/convert.py b/functions/convert.py new file mode 100644 index 0000000..6592431 --- /dev/null +++ b/functions/convert.py @@ -0,0 +1,43 @@ +import subprocess +import speech_recognition as sr +import os +from functions.loging import loging + + +class Converter: + def __init__(self, path_to_file: str, message, language: str = "ru-RU"): + self.language = language + self.path_to_file = path_to_file + self.service = None + self.message = message + + def audio_to_text(self) -> str: + import mutagen + f = mutagen.File(self.path_to_file) + if float(f.info.length) >= 30.0: + self.service = "google" + return self.google() + else: + self.service = "yandex" + return self.yandex() + + def google(self) -> str: + subprocess.run(['ffmpeg', '-v', 'quiet', '-i', self.path_to_file, self.path_to_file.replace(".ogg", ".wav")]) + os.remove(self.path_to_file) + wav_file = self.path_to_file.replace(".ogg", ".wav") + r = sr.Recognizer() + with sr.AudioFile(wav_file) as source: + audio = r.record(source) + r.adjust_for_ambient_noise(source) + response = "google\n\n" + r.recognize_google(audio, language=self.language) + loging(self.message, "google", wav_file, response) + os.remove(wav_file) + return response + + def yandex(self) -> str: + from speechkit import ShortAudioRecognition, Session + reg = ShortAudioRecognition(Session.from_api_key("AQVN3xNJamAFP4_FS6Gis0Uud0vONFk24umBSXvh")) + response = "yandex\n\n" + reg.recognize(open(str(self.path_to_file), str('rb')).read()) + loging(self.message, "yandex", self.path_to_file, response) + os.remove(self.path_to_file) + return response diff --git a/functions/get_audio_messages_func.py b/functions/get_audio_messages_func.py new file mode 100644 index 0000000..a757be7 --- /dev/null +++ b/functions/get_audio_messages_func.py @@ -0,0 +1,26 @@ +from functions.convert import Converter +from telebot import types + + +def get_audio_messages_func(message: types.Message, logger, bot): + # достаю file_id из разнообразных полей + if message.content_type in ['voice']: + file_id = message.voice.file_id + elif message.content_type in ['video']: + file_id = message.video.file_id + else: + file_id = message.video_note.file_id + # создаю file_name + file_name = "config/" + str(message.message_id) + '.ogg' + # достаю имя человека + name = message.chat.first_name if message.chat.first_name else 'No_name' + # записываю в файл + with open(file_name, 'wb') as new_file: + new_file.write(bot.download_file(bot.get_file(file_id).file_path)) + # запуск конвертора + converter = Converter(file_name, message) + message_text = converter.audio_to_text() + # записываю всё в logger + logger.info(f"Чат {name} (ID: {message.chat.id}) обработал файл {file_name}, сервисом {converter.service}") + # отправляю сообщение + bot.send_message(message.chat.id, message_text, reply_to_message_id=message.message_id) diff --git a/functions/loging.py b/functions/loging.py new file mode 100644 index 0000000..6f707fb --- /dev/null +++ b/functions/loging.py @@ -0,0 +1,2 @@ +def loging(message, service, file_path, text): + print(message) diff --git a/main.py b/main.py new file mode 100644 index 0000000..b69eb9b --- /dev/null +++ b/main.py @@ -0,0 +1,9 @@ +from Bot import start_work_bot + + +def main(): + start_work_bot() + + +if __name__ == '__main__': + main() diff --git a/test.py b/test.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/test.py @@ -0,0 +1 @@ +