По статье PYTHON: ПРОСТЕЙШИЙ ГОЛОСОВОЙ ПОМОЩНИК нам несколько раз писали в личные сообщение вопросы про возможность интеграции “голосового помощника” в telegram. Мы изначально не планировали этого делать, но потом задали себе вопрос – почему бы не попробовать?
Используемые библиотеки
Для решения данной задачи нам понадобятся следующие библиотеки.
- telebot (pyTelegramBotAPI) – по словам автора библиотеки, простая, но расширяемая реализация на Python для Telegram Bot API.
- requests – библиотека для обработки HTTP запросов.
- random – библиотека для, как не странно, рандома.
- speech_recognition – используем туже распозновалку голоса, что и в прошлой статье.
- pyttsx3 – если раньше мы использовали консольный аналог say, то теперь нам нужно отправлять на сервера telegram голосовые файлы в формате oga
- os – нам нужна для работы с файловой системой.
- time – нужно только в одном моменте для sleep.
import telebot import requests import random import speech_recognition as sr import os import pyttsx3 import time
Сразу отмечу, что тут указаны не все, но мы постараемся ничего не пропустить по ходу статьи
как сделать телеграмм бота на python на pydroid 3
Получение токена и создание оболочки бота
Одной из важных вещей, которым делится с нами Крестный отец – токен нашего бота. Его мы и указываем в коде. В статье токен изменен для соблюдения анонимности
token = ‘fa3hnerpw25mga095mt125aga1si2lr!fk39sktndsawg’ bot = telebot.TeleBot(token)
Про ffmpeg
Так как в telegram использует в голосовых сообщениях файлы формата oga- (да не простой oga, а opus’овский), но мы можем обрабатывать библиотекой speech_recognition файлы формата wav, то на помощь придет к нам библиотека pydub, которой для работы нужно FFmpeg.
FFmpeg – это кроссплатформенное решение для записи, конвертации и записи аудио и видео. В нашем случае необходима для конвертации oga в wav и обратно. Для удобства FFpeg мы распаковали архив в директорию кода (ffmpeg был взят на сайте gyan.dev в разделе release). Про установку FFmpeg следует отметить, что корректно работать будет только после перезагрузки сервера или пк – это избавит нас от ошибки winerror 2.
В коде указываем для pydub расположение ffmpeg.
from pydub import AudioSegment AudioSegment.converter = os.getcwd() + «\ffmpeg\bin\ffmpeg.exe» AudioSegment.ffmpeg = os.getcwd() + «\ffmpeg\bin\ffmpeg.exe» AudioSegment.ffprobe = os.getcwd() + «\ffmpeg\bin\ffprobe.exe»
Инициализация голосового движка
ChatGPT В Питоне. Создаем телеграм бота при помощи OpenAI ChatGTP Python
Для формирования text-to-speech файлов нам понадобится pyttsx3. Особенностью pyttsx3 является возможность работы оффлайн, нам это навряд ли это пригодится, но отметить стоит. А также мы не забываем выбрать “голос” нашего бота.
import pyttsx3 text_to_speach = pyttsx3.init() voices = text_to_speach.getProperty(‘voices’) for voice in voices: print(‘———————‘) print(‘Имя: %s’ % voice.name) print(‘ID: %s’ % voice.id)
——————— Имя: Microsoft Irina Desktop — Russian ID: HKEY_LOCAL_MACHINESOFTWAREMicrosoftSpeechVoicesTokensTTS_MS_RU-RU_IRINA_11.0 ——————— Имя: Microsoft Zira Desktop — English (United States) ID: HKEY_LOCAL_MACHINESOFTWAREMicrosoftSpeechVoicesTokensTTS_MS_EN-US_ZIRA_11.0 ——————— Имя: Microsoft David Desktop — English (United States) ID: HKEY_LOCAL_MACHINESOFTWAREMicrosoftSpeechVoicesTokensTTS_MS_EN-US_DAVID_11.0
Не густо. Выбираем из доступных русскоговорящих голосов (или устанавливаем дополнительно в случае отсутствия или вкусовых предпочтений), в нашем примере имеется только IRINA, классический женский роботизированный голос. IRINA, I choose you.
RU_VOICE_ID = «HKEY_LOCAL_MACHINESOFTWAREMicrosoftSpeechVoicesTokensTTS_MS_RU-RU_IRINA_11.0» text_to_speach.setProperty(‘voice’, RU_VOICE_ID)
Начало (/start)
Наконец, мы добрались до самого бота. На команду /start бот напишет нам небольшое приветствие.
Подсказки (/help)
Наш новый бот будет иметь практически тоже самое, что его первая версия, но для понятия какой функционал имеется, воспользуемся командой /help.
Обработка контента
В Telegram используется достаточно большое количество типов контента: видео, аудио, голосовые сообщения, стикеры и т.д. И для каждого события отправки пользователем определённого типа сообщения мы можем задать различную обработку. В нашей сатье мы воспользуемся только text и voice. Начнем с text.
Обработка текстовых сообщений
Тип контента text – это отправленные пользователем текстовые сообщения. Наша версия первого бота с некоторыми улучшениями приведена ниже.
Обработка голосовых сообщений
С обработкой голосовых сообщений все несколько сложнее. Как мы упоминали ранее, telegram хранит голосовые сообщения в формате oga. Нам нужно их обработать в wav для обработки speech-to-text (можно этого и не делать – имеется отличный аналог от Яндекса с обработкой oga, но руки до него так и не дошли).
Текущие результаты
А вот так звучит наша Irina (Пример_1.mp3, Пример_2.mp3)
Планы развития
- Развертывание на облачных серверах
- Решить проблему с отправкой oga в telegram – не везде могут открываться отправленные потом голосовые сообщения
- Внедрение “напоминалок” для пользователей бота
- Изменение интерфейса на более юзерфрендли
- Внедрение логирования событий сразу в бд
- Отработка исключений, возникающих при нестандартных действиях пользователя
- Перевод части существующего функционала в отдельные подфункции
Заключение
Вот мы и закончили с первой попыткой внедрения бота в telegram. Что-то получилось хорошо, что-то не очень. Не бойтесь комментировать и задавать вопросы – только так будет развиваться профсообщество и все мы вместе с ним!
Источник: newtechaudit.ru
Учебник по разработке бота для Telegram на Python
Отличный учебник для тех, кто хочет научиться писать ботов для Telegram с использованием библиотеки pyTelegramBotAPI. Существует альтернативный вариант мана, написанный другим автором, там используется библиотека aiogram.
Учебник здесь
Все исходные коды к урокам расположены в этом репозитории
Читайте анонсы и посты целиком в ЖЖ, Medium, Голосе и Яндекс.Дзен!
Поддержите мой блог финансово. Все донаты пойдут на оплату хостинга и развитие сайта!
Telegram
Your Browser Does Not Support iframes!
Последние
Рубрики
Подписаться
Соединить с D
Соединить с D
0 комментариев
Inline Feedbacks
View all comments
СЧЕТЧИКИ
РЕКЛАМА И ДОНАТЫ
Социальные сети
Использование материалов разрешается с активной ссылкой на levashove.ru.
Источник: levashove.ru
Создаем Telegram бота на Python часть-1
10.09.2019
11505
Рейтинг: 5 . Проголосовало: 7
Вы проголосовали:
Для голосования нужно авторизироваться
Существует множество различных статей и учебных пособий по созданию ботов для телеграмм, некоторые из них достаточно сложны, часть требует знания отдельных технологий и фреймворков. В данной статье мы рассмотрим создание чат бота в мессенджере Telegram с нуля. От нас не будет требоваться каких-то специальных знаний. Для начала достаточно будет начальных знаний языка Python в качестве языка программирования.
Часть 1: Регистрация нового Telegram Bot-а
После начала общения с этим ботом, нажав /start, вы получите ответ от бота с указанием его возможностей. Нас интересует создание нового бота — /newbot.
После того как мы введем /newbot нас попросят придумать имя для нашего нового бота. Пусть оно будет MyFirstTestBot.
Далее нам нужно придумать юзернэйм для нашего бота. В нашем случае это будет mft001_bot.
После этого BotFather высылает нам специальный токен:
Наш токен оказался: 851216368:AAG6_JHHsIqAK-lX2CxOWQHTAM109zdrcZM (В вашем случае токен будет другой.)
Этот токен понадобится нам при настройке нашего бота. Токен должен быть сохранён. Именно он является единственным ключем для взаимодействия с ботом.
Также мы получаем ссылку на нашего бота. В моем случае это t.me/mft001_bot.
Теперь наш Tekegram-бот создан. Мы можем начать настраивать своего бота, например, установить изображение для бота, изменить или добавить описание бота и тп.
Тема связана со специальностями:
С регистрацией бота мы закончили. Наш бот уже есть, но на данный момент он еще ничего не умеет. Теперь нам нужна его начинка – какой-то механизм, который будет обрабатывать наши запросы к этому боту и возвращать нам ответы.
Часть 2 Написание кода
Как и написано выше мы будем создавать нашего бота на языке Python. Установите его с официального сайта, если вы используете Windows или выполните команду в терминале на Linux:
sudo apt-get install python python-pip
Далее воспользуемся системой управления пакетами PIP, которая используется для установки и управления программными пакетами, и установим библиотеку PyTelegramBotAPI (Telebot):
pip install pytelegrambotapi – user
Создадим логику работы нашего бота. Используя полноценный IDE или простой текстовый редактор создадим файл ourbot.py и заполним его необходимой логикой.
Для начала нам нужно выполнить импорт библиотеки PyTelegramBotAPI (Telebot), написав в нашем файле:
import telebot
Далее подключим нашего бота, используя полученный ранее токен:
bot = telebot.TeleBot(‘851216368:AAG6_JHHsIqAK-lX2CxOWQHTAM109zdrcZM’)
Теперь создадим метод, для получения сообщений.
Возможности PyTelegramBotAPI позволяют отправлять боту аудио (content_types=[‘audio’), видео (content_types=[‘video’), документы (content_types=[‘document’), текст (content_types=[‘text’), географический адрес (content_types=[‘location’), данные контакта (content_types=[‘contact’) и стикеры (content_types=[‘sticker’). Мы, для простоты опыта, будем общаться с ботом только текстом:
def handle_text_messages(message):
Теперь рассмотрим логику обработки наших текстовых сообщений. Мы хотим захардкодить простое общение бота с пользователем: бот должен уметь здороваться, когда с ним здороваются, уметь отвечать на вопросы «Кто ты?», «Как тебя зовут?» и «Что ты умеешь?».
Видео курсы по схожей тематике:
Создание адаптивного сайта с Bootstrap 3
UX/UI Design Стартовый
HighLoad++ 2017. Безопасность
if message.text == «Привет»:
bot.send_message(message.from_user.id, «Привет»)
elif message.text == «Кто ты?»:
bot.send_message(message.from_user.id, «Я тестовый чатбот для учебного примера.»)
elif message.text == «Как тебя зовут?»:
bot.send_message(message.from_user.id, «Меня зовут MyFirstTestBot.»)
elif message.text == «Что ты умеешь?»:
bot.send_message(message.from_user.id, «Я умею отвечать на несколько простых вопросов — кто я, как меня зовут и что я умею делать.»)
bot.send_message(message.from_user.id, «Я тебя не понимаю. Напиши что-то другое.»)
После тела метода, обрабатывающего наши запросы к боту, добавим вызов метода:
bot.polling(none_stop=True, interval=0)
Задачей этого метода является создание потока, в котором бот отправляет запросы на сервер, уточняя таким способом, не писал ли ему кто-то сообщение. Параметр none_stop: False означает, что наша программа будет продолжать отправлять запросы на сервер после получения сообщения об ошибке от сервера Telegram.
Сохраним наш код: