Comments 14
Проверка, что бот отмечен, выглядит лишней. Вряд ли люди, которые не в состоянии написать текстом, отметят бота.
* Не хватает сравнения с уже существующими аналогами.
* Не хватает уже выложенного бота для собственной проверки
* Не хватает выложенного исходного кода, чтобы запустить бота :)
Ну и при попытке самостоятельно запустить его, возникло еще пару замечаний и проблем
* os.system выглядит как костыль. Почему бы не использовать ffmpeg библиотеку для питона?
* Зависимости проще было бы указать через
pip freeze > requirements.txt
* Зачем нам CHAT_ID, если дальше по коду мы его нигде не используем?
* Различные ошибки, в основном из-за того, что код в статье не полный
* Не хватает 1 строчки кода, взял её из примера в документации
(venv) [root@vitka-k soundto]$ python soundto.py
Traceback (most recent call last):
File "soundto.py", line 38, in bot.polling()
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/__init__.py", line 622, in polling
self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/__init__.py", line 681, in __threaded_polling
raise e
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/__init__.py", line 644, in __threaded_polling
self.worker_pool.raise_exceptions()
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/util.py", line 130, in raise_exceptions
raise self.exception_info
File "/root/bots/soundto/venv/lib/python3.7/site-packages/telebot/util.py", line 82, in run
task(*args, **kwargs)
File "soundto.py", line 29, in voice_processing
downloaded_file = bot.download_file(file_info.file_path)
NameError: name 'file_info' is not defined
Исправляется добавление строчки перед использованием file_info
file_info = bot.get_file(message.voice.file_id)
* Питон жалуется на отсутствие директории voice и ready, создаем её вручную или через сам питон
FileNotFoundError: [Errno 2] No such file or directory: './voice/aa9cc69a-26d6-4e43-a84e-99e367c47510.ogg'
Кто хочет потестировать — некоторое время будет работать @soundto_bot, дальше могу передать его автору, если он планирует развивать его.
import telebot
import uuid
import os
import speech_recognition as sr
language='ru_RU'
TOKEN='YOUR_TOKEN'
#CHAT_ID='-100xxxxxxxxxxxxxxxxxxxxx')
bot = telebot.TeleBot(TOKEN)
r = sr.Recognizer()
def recognise(filename):
with sr.AudioFile(filename) as source:
audio_text = r.listen(source)
try:
text = r.recognize_google(audio_text,language=language)
print('Converting audio transcripts into text ...')
print(text)
return text
except:
print('Sorry.. run again...')
return "Sorry.. run again..."
@bot.message_handler(content_types=['voice'])
def voice_processing(message):
filename = str(uuid.uuid4())
file_name_full="./voice/"+filename+".ogg"
file_name_full_converted="./ready/"+filename+".wav"
file_info = bot.get_file(message.voice.file_id)
downloaded_file = bot.download_file(file_info.file_path)
with open(file_name_full, 'wb') as new_file:
new_file.write(downloaded_file)
os.system("ffmpeg -i "+file_name_full+" "+file_name_full_converted)
text=recognise(file_name_full_converted)
bot.reply_to(message, text)
os.remove(file_name_full)
os.remove(file_name_full_converted)
bot.polling()
Google Cloud Speech-to-Text API платное с бесплатными лимитом 60 минут в месяц, каждый запрос округляется до 15 секунд.
Меня удивило, что этот кусок кода сработал без ключа
text = r.recognize_google(audio_text,language=language)
посмотрел исходники там написано что нужно передать key, если key is None то используется ключ по умолчанию зашитый в функции и нет гарантии что это будет работать
Спасибо огромное. По ошибке удалил ее когда писал статью . Однако есть версия с подключеным configparser и немного другим кодом на github . Можно взять как отправную точку: https://github.com/alex5250/TelegramSoundBot
Может вопрос глупый, но объясните
Будет ли бот работать на телефоне? И если да, то что необходимо установить, ведь код должен в чем то обрабатываться.
У меня вопрос зачем нужен такой бот, если на Андроиде есть уже голосовая клавиатура?
Можно парсить все сообщения в группе как делают другие аналогичные боты без отметки бота. И логику преобразования в текс лучше вынести в отдельную функцию из хендлера.
Решаем проблему голосовых или создаем простого и полезного бота в Telegram