добавил комменты и убрал стандартный логер
This commit is contained in:
@@ -3,23 +3,24 @@ from loguru import logger
|
|||||||
from aiogram import Bot, Dispatcher, types
|
from aiogram import Bot, Dispatcher, types
|
||||||
from functions import get_audio_messages_func
|
from functions import get_audio_messages_func
|
||||||
|
|
||||||
bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI")
|
bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") # создаю объект бота
|
||||||
dp = Dispatcher(bot)
|
dp = Dispatcher(bot) # создаю объект слушателя
|
||||||
logger.add("logs/logging_log.log", level="INFO")
|
logger.remove() # удаляю стандартный логер
|
||||||
|
logger.add("logs/logging_log.log", level="INFO") # создаю логер
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands=['start'])
|
@dp.message_handler(commands=['start']) # обрабатываю команду start
|
||||||
def start(message: types.Message):
|
def start(message: types.Message):
|
||||||
name = message.chat.first_name if message.chat.first_name else 'No_name'
|
name = message.chat.first_name if message.chat.first_name else 'No_name' # получаю имя отправителя
|
||||||
logger.info(f"Группа {name} (ID: {message.chat.id}) запустил бота")
|
logger.info(f"Группа {name} (ID: {message.chat.id}) запустил бота") # записываю в логи
|
||||||
bot.send_message(message.chat.id, 'Привет! Отправляй голосовое, я расшифрую!')
|
bot.send_message(message.chat.id, 'Привет! Отправляй голосовое, я расшифрую!') # отправляю ответное сообщение
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(content_types=['voice', 'video_note', 'video'])
|
@dp.message_handler(content_types=['voice', 'video_note', 'video']) # обрабатываю голосовые сообщения, кружки, видео
|
||||||
async def get_audio_messages(message: types.Message):
|
async def get_audio_messages(message: types.Message):
|
||||||
await get_audio_messages_func.get_audio_messages_func(message, logger, bot)
|
await get_audio_messages_func.get_audio_messages_func(message, logger, bot) # вызываю функцию
|
||||||
|
|
||||||
|
|
||||||
def start_work_bot():
|
def start_work_bot(): # функция запуска бота
|
||||||
logger.info("Бот запустился")
|
logger.info("Бот запустился") # записываю логи
|
||||||
executor.start_polling(dp, skip_updates=False)
|
executor.start_polling(dp, skip_updates=False) # запускаю pooling без пропуска пропущенных сообщений
|
||||||
|
|||||||
+51
-30
@@ -5,6 +5,9 @@ from functions.loging import loging
|
|||||||
|
|
||||||
|
|
||||||
class Converter:
|
class Converter:
|
||||||
|
"""
|
||||||
|
Этот класс выполняет главную функцию, конвертирует голос в текст
|
||||||
|
"""
|
||||||
def __init__(self, path_to_file: str, message, language: str = "ru-RU"):
|
def __init__(self, path_to_file: str, message, language: str = "ru-RU"):
|
||||||
self.language = language
|
self.language = language
|
||||||
self.path_to_file = path_to_file
|
self.path_to_file = path_to_file
|
||||||
@@ -12,44 +15,62 @@ class Converter:
|
|||||||
self.message = message
|
self.message = message
|
||||||
|
|
||||||
def audio_to_text(self) -> str:
|
def audio_to_text(self) -> str:
|
||||||
|
"""
|
||||||
|
Основная функция
|
||||||
|
|
||||||
|
:return: str - текст + служебная информация
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
import mutagen
|
import mutagen
|
||||||
f = mutagen.File(self.path_to_file)
|
f = mutagen.File(self.path_to_file) # получение данных mutagen
|
||||||
if float(f.info.length) >= 30.0:
|
if float(f.info.length) >= 30.0: # если длинна больше 30 секунд
|
||||||
self.service = "google"
|
self.service = "google" # устанавливаю сервис google
|
||||||
return self.google()
|
return self.google() # запуск функции google
|
||||||
else:
|
else:
|
||||||
self.service = "yandex"
|
self.service = "yandex" # устанавливаем сервис yandex
|
||||||
return self.yandex()
|
return self.yandex() # запуск функции yandex
|
||||||
except:
|
except: # если какая-то проблема
|
||||||
return self.google()
|
return self.google() # запуск функции google
|
||||||
except sr.RequestError:
|
except sr.RequestError: # обработка ошибки размера файлов
|
||||||
return "Толи файл слишком большой, толи с ботом что-то случилось"
|
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
|
||||||
|
|
||||||
def google(self) -> str:
|
def google(self) -> str:
|
||||||
|
"""
|
||||||
|
Функция работающая с stt google
|
||||||
|
|
||||||
|
:return: str - текст + служебная информация
|
||||||
|
"""
|
||||||
subprocess.run(['ffmpeg', '-v', 'quiet', '-i', self.path_to_file, self.path_to_file.replace(".ogg", ".wav")])
|
subprocess.run(['ffmpeg', '-v', 'quiet', '-i', self.path_to_file, self.path_to_file.replace(".ogg", ".wav")])
|
||||||
|
# перевод ogg в wav
|
||||||
try:
|
try:
|
||||||
os.remove(self.path_to_file)
|
os.remove(self.path_to_file) # удаляю файл
|
||||||
wav_file = self.path_to_file.replace(".ogg", ".wav")
|
wav_file = self.path_to_file.replace(".ogg", ".wav") # замена в ссылке на файл ogg в wav
|
||||||
r = sr.Recognizer()
|
r = sr.Recognizer() # создаю объект google stt
|
||||||
with sr.AudioFile(wav_file) as source:
|
with sr.AudioFile(wav_file) as source: # получаю байты из файла
|
||||||
audio = r.record(source)
|
audio = r.record(source) # получаю файл в нужном google stt формате байт
|
||||||
r.adjust_for_ambient_noise(source)
|
r.adjust_for_ambient_noise(source) # мини очистка шума
|
||||||
try:
|
try:
|
||||||
response = "google\n\n" + r.recognize_google(audio, language=self.language)
|
response = "google\n\n" + r.recognize_google(audio, language=self.language) # получение текста
|
||||||
loging(self.message, "google", wav_file, response)
|
loging(self.message, "google", wav_file, response) # записываю логи
|
||||||
os.remove(wav_file)
|
os.remove(wav_file) # удаляю лишние файлы
|
||||||
return response
|
return response # возвращаю текст
|
||||||
except sr.UnknownValueError:
|
except sr.UnknownValueError: # ошибка распознавания текста
|
||||||
return "google\n\n Слова не распознаны, вы что вообще мне впихнуть пытаетесь"
|
return "google\n\n Слова не распознаны, вы что вообще мне впихнуть пытаетесь" # возвращаю ошибочное
|
||||||
except FileNotFoundError:
|
# сообщение
|
||||||
return "Толи файл слишком большой, толи с ботом что-то случилось"
|
except FileNotFoundError: # ошибка файла(из-за веса telegram не пускает)
|
||||||
|
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
|
||||||
|
|
||||||
def yandex(self) -> str:
|
def yandex(self) -> str:
|
||||||
from speechkit import ShortAudioRecognition, Session
|
"""
|
||||||
reg = ShortAudioRecognition(Session.from_api_key("AQVN3xNJamAFP4_FS6Gis0Uud0vONFk24umBSXvh"))
|
Функция работающая с stt yandex
|
||||||
response = "yandex\n\n" + reg.recognize(open(str(self.path_to_file), str('rb')).read())
|
|
||||||
loging(self.message, "yandex", self.path_to_file, response)
|
:return: str - текст + служебная информация
|
||||||
os.remove(self.path_to_file)
|
"""
|
||||||
return response
|
from speechkit import ShortAudioRecognition, Session # импортирую сесию и объект для stt
|
||||||
|
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 # возвращаю ответ
|
||||||
|
|||||||
Reference in New Issue
Block a user