Top.Mail.Ru
Ответы

Почему этот код не работает? (Пайтон)

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
 import os  
import telebot  
import requests  
import speech_recognition as sr  
import subprocess  
import datetime  
  
  
logfile = str(datetime.date.today()) + '.log'  
token = '5807585021:AAGokTDFe7CMcPnf6fpMGDZyGpdiojeKeBo'  
bot = telebot.TeleBot(token)  
  
def audio_to_text(dest_name: str):  
# Функция для перевода аудио , в формате ".vaw" в текст  
    r = sr.Recognizer() # такое вообще надо комментить?  
    # тут мы читаем наш .vaw файл  
    message = sr.AudioFile(dest_name)  
    with message as source:  
        audio = r.record(source)  
    result = r.recognize_google(audio, language="ru_RU") # здесь можно изменять язык распознавания  
    return result  
  
  
@bot.message_handler(content_types=['voice'])  
def get_audio_messages(message):  
# Основная функция, принимает голосовуху от пользователя  
    try:  
        print("Started recognition...")  
        # Ниже пытаемся вычленить имя файла, да и вообще берем данные с мессаги  
        file_info = bot.get_file(message.voice.file_id)  
        path = file_info.file_path # Вот тут-то и полный путь до файла (например: voice/file_2.oga)  
        fname = os.path.basename(path) # Преобразуем путь в имя файла (например: file_2.oga)  
        doc = requests.get('https://api.telegram.org/file/bot{0}/{1}'.format(token, file_info.file_path))# Получаем и сохраняем присланную голосвуху (Ага, админ может в любой момент отключить удаление айдио файлов и слушать все, что ты там говоришь. А представь, что такую бяку подселят в огромный чат и она будет просто логировать все сообщения [анонимность в телеграмме, ахахаха])  
        with open(fname+'.oga', 'wb') as f:  
            f.write(doc.content) # вот именно тут и сохраняется сама аудио-мессага  
        process = subprocess.run(['ffmpeg', '-i', fname+'.oga', fname+'.wav'])# здесь используется страшное ПО ffmpeg, для конвертации .oga в .vaw  
        result = audio_to_text(fname+'.wav') # Вызов функции для перевода аудио в текст, а заодно передаем имена файлов, для их последующего удаления  
        bot.send_message(message.from_user.id, format(result))  
    except sr.UnknownValueError as e:  
        bot.send_message(message.from_user.id,  "Прошу прощения, но я не разобрал сообщение, или оно поустое...")  
        with open(logfile, 'a', encoding='utf-8') as f:  
            f.write(str(datetime.datetime.today().strftime("%H:%M:%S")) + ':' + str(message.from_user.id) + ':' + str(message.from_user.first_name) + '_' + str(message.from_user.last_name) + ':' + str(message.from_user.username) +':'+ str(message.from_user.language_code) + ':Message is empty.\n')  
    except Exception as e:  
        bot.send_message(message.from_user.id,  "Что-то пошло через жопу, но наши смелые инженеры уже трудятся над решением... \nДа ладно, никто эту ошибку исправлять не будет, она просто потеряется в логах.")  
        with open(logfile, 'a', encoding='utf-8') as f:  
            f.write(str(datetime.datetime.today().strftime("%H:%M:%S")) + ':' + str(message.from_user.id) + ':' + str(message.from_user.first_name) + '_' + str(message.from_user.last_name) + ':' + str(message.from_user.username) +':'+ str(message.from_user.language_code) +':' + str(e) + '\n')  
    finally:  
        os.remove(fname+'.wav')  
        os.remove(fname+'.oga')  
  
bot.polling(none_stop=True, interval=0)# Очень не культурно стучимся телеге и проверяем наличие сообщений 
По дате
По рейтингу
Аватар пользователя
Ученик

Здравствуйте.
Если вы хотите задать вопрос по скопированному коду, то желательно оставлять ссылку на первоисточник. Ок? Очень тяжело понять проблему кода, когда ты понятия не имеешь, что он делает.
Ваша ошибка заключается в том, что у вас отсутствует ffmpeg на компьютере. Поэтому при вызове подпроцесса ffmpeg в строке с:
process = subprocess.run (['ffmpeg', '-i', fname+'.oga', fname+'.wav'])
ничего не происходит(не появляется wav-файл).
В идеале вы должны найти документацию по установке и указанию пути к этому ПО в самой системе. Но можно проще: вы скачиваете архив(по ссылке https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z ), из папки bin копируете три exe-файла в папку с проектом, где находится ваш py-файл. Должно работать.

Аватар пользователя
Просветленный

Прямым текстом же все сказано
Ты попытался удалить несуществующий файл file_27.oga.wav

Аватар пользователя
Гуру

Однако, возможные причины проблем могут быть связаны с:

- Неправильно указанным token для Telegram бота
- Отсутствием установленных библиотек (os, telebot, requests, speech_recognition, subprocess)
- Ошибками при записи и чтении аудио-сообщений (например, неправильный путь к файлу, неправильно указанный формат и др.)
- Проблемами с ffmpeg (например, его отсутствием на компьютере или неправильно указанным путем к нему)
- Прочими проблемами, которые могут возникнуть при работе с Telegram API и библиотеками для обработки аудио

Для того, чтобы точнее определить причину проблемы, нужно более подробное описание проблемы или вывод ошибок, если они есть. (на фото ничего не видно)