перешёл на aiogram
This commit is contained in:
@@ -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,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
|
||||||
|
|||||||
@@ -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
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user