# Update Log ## [v1.0.1] - 2024-11-12 ### Added - Добавлен скрипт `install.bat` для автоматической настройки виртуального окружения и установки зависимостей. - Добавлен скрипт `start.bat` для активации виртуального окружения и запуска `main.py`. - Добавлен `Dockerfile` для создания и запуска контейнера с ботом. - Добавлен скрипт `main.py`, использующий библиотеку `aiogram` для обработки голосовых сообщений и их конвертации в текст. ### Changed - Обновлен скрипт `main.py` для конвертации формата голосовых сообщений с использованием `pydub`. ### Fixed - Исправлены проблемы с импортом `aiogram` и обработкой формата `.oga` для голосовых сообщений.
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
import os
|
|
from aiogram import Bot, Dispatcher, types
|
|
from aiogram.utils import executor
|
|
import speech_recognition as sr
|
|
from pydub import AudioSegment
|
|
|
|
API_TOKEN = '7812128361:AAHtv_q-sGMKzJGVrEn4LAXpdieZPmlxfwc'
|
|
bot = Bot(token=API_TOKEN)
|
|
dp = Dispatcher(bot)
|
|
|
|
@dp.message_handler(content_types=[types.ContentType.VOICE])
|
|
async def handle_voice_message(message: types.Message):
|
|
# Сохранение голосового сообщения
|
|
file_info = await bot.get_file(message.voice.file_id)
|
|
file_path = file_info.file_path
|
|
voice_file = f"voice_{message.message_id}.oga"
|
|
wav_file = f"voice_{message.message_id}.wav"
|
|
|
|
await bot.download_file(file_path, voice_file)
|
|
|
|
# Конвертация .oga в .wav
|
|
audio = AudioSegment.from_ogg(voice_file)
|
|
audio.export(wav_file, format="wav")
|
|
|
|
# Распознавание речи
|
|
recognizer = sr.Recognizer()
|
|
audio_file = sr.AudioFile(wav_file)
|
|
with audio_file as source:
|
|
audio_data = recognizer.record(source)
|
|
try:
|
|
text = recognizer.recognize_google(audio_data, language='ru-RU')
|
|
await message.answer(f"Распознанный текст: {text}")
|
|
|
|
# Удаление голосового сообщения
|
|
os.remove(voice_file)
|
|
os.remove(wav_file)
|
|
except sr.UnknownValueError:
|
|
await message.answer("Не удалось распознать речь.")
|
|
except sr.RequestError as e:
|
|
await message.answer(f"Ошибка сервиса распознавания речи: {e}")
|
|
|
|
if __name__ == '__main__':
|
|
executor.start_polling(dp, skip_updates=True)
|