перешёл на aiogram

This commit is contained in:
2022-12-09 16:47:01 +07:00
parent 949092707c
commit 391c05f1e3
4 changed files with 60 additions and 30 deletions
+11 -8
View File
@@ -1,24 +1,27 @@
from aiogram.utils import executor
from loguru import logger from loguru import logger
import telebot from aiogram import Bot, Dispatcher, types
from telebot import types # from telebot import types
from functions import get_audio_messages_func from functions import get_audio_messages_func
bot = telebot.TeleBot("5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI")
dp = Dispatcher(bot)
logger.add("logs/logging_log.log", level="INFO") logger.add("logs/logging_log.log", level="INFO")
@bot.message_handler(commands=['start']) @dp.message_handler(commands=['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, 'Привет! Отправляй голосовое, я расшифрую!')
@bot.message_handler(content_types=['voice', 'video_note', 'video']) @dp.message_handler(content_types=['voice', 'video_note', 'video'])
def get_audio_messages(message: types.Message): async def get_audio_messages(message: types.Message):
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("Бот запустился")
bot.polling(none_stop=True, timeout=123) executor.start_polling(dp, skip_updates=False)
# bot.polling(none_stop=True, timeout=123, non_stop=True)
+12
View File
@@ -12,6 +12,8 @@ class Converter:
self.message = message self.message = message
def audio_to_text(self) -> str: def audio_to_text(self) -> str:
try:
try:
import mutagen import mutagen
f = mutagen.File(self.path_to_file) f = mutagen.File(self.path_to_file)
if float(f.info.length) >= 30.0: if float(f.info.length) >= 30.0:
@@ -20,19 +22,29 @@ class Converter:
else: else:
self.service = "yandex" self.service = "yandex"
return self.yandex() return self.yandex()
except:
return self.google()
except sr.RequestError:
return "Толи файл слишком большой, толи с ботом что-то случилось"
def google(self) -> str: def google(self) -> 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")])
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")
r = sr.Recognizer() r = sr.Recognizer()
with sr.AudioFile(wav_file) as source: with sr.AudioFile(wav_file) as source:
audio = r.record(source) audio = r.record(source)
r.adjust_for_ambient_noise(source) r.adjust_for_ambient_noise(source)
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:
return "google\n\n Слова не распознаны, вы что вообще мне впихнуть пытаетесь"
except FileNotFoundError:
return "Толи файл слишком большой, толи с ботом что-то случилось"
def yandex(self) -> str: def yandex(self) -> str:
from speechkit import ShortAudioRecognition, Session from speechkit import ShortAudioRecognition, Session
+5 -3
View File
@@ -2,7 +2,7 @@ from functions.convert import Converter
from telebot import types from telebot import types
def get_audio_messages_func(message: types.Message, logger, bot): async def get_audio_messages_func(message: types.Message, logger, bot):
# достаю file_id из разнообразных полей # достаю file_id из разнообразных полей
if message.content_type in ['voice']: if message.content_type in ['voice']:
file_id = message.voice.file_id file_id = message.voice.file_id
@@ -16,11 +16,13 @@ def get_audio_messages_func(message: types.Message, logger, bot):
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'
# записываю в файл # записываю в файл
with open(file_name, 'wb') as new_file: with open(file_name, 'wb') as new_file:
new_file.write(bot.download_file(bot.get_file(file_id).file_path)) file = await bot.get_file(file_id)
file_dow = await bot.download_file(file.file_path)
new_file.write(file_dow.getvalue())
# запуск конвертора # запуск конвертора
converter = Converter(file_name, message) converter = Converter(file_name, message)
message_text = converter.audio_to_text() message_text = converter.audio_to_text()
# записываю всё в logger # записываю всё в logger
logger.info(f"Чат {name} (ID: {message.chat.id}) обработал файл {file_name}, сервисом {converter.service}") 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) await bot.send_message(message.chat.id, message_text, reply_to_message_id=message.message_id)
+14 -1
View File
@@ -1,2 +1,15 @@
import os
import shutil
def loging(message, service, file_path, text): def loging(message, service, file_path, text):
print(message) if not os.path.isdir(f"logs/{message.chat.id}"):
os.makedirs(f"logs/{message.chat.id}")
file_name = file_path.split("/")[-1].split(".")
try:
os.makedirs(f"logs/{message.chat.id}/{file_name[0]}")
except FileExistsError:
pass
shutil.copy(file_path, f"logs/{message.chat.id}/{file_name[0]}/audio.{file_name[1]}")
with open(f'logs/{message.chat.id}/{file_name[0]}/{service}-text.txt', 'w+') as the_file:
the_file.write(text)