Для тестирования работоспособности телеграм бота переводчик, написанном на Python мы использовали готовый преднастроенный телеграм бот сервер. Данный бот умеет переводить текст с русского языка на английский и с других языков на русский, при этом язык ввода в данном случае будет определен автоматически.
Приступим к установке:
source my-tel-bot/bin/activate
pip3 install googletrans==3.1.0a0 -важно установить именно эту версию библиотеки
pip3 install pyTelegramBotAPI
pip3 install asyncio
pip3 install aiohttp
Заменим наш демо бот на существующий:
/root/my-tel-bot/bot.py
from googletrans import Translator
from telebot.async_telebot import AsyncTeleBot
import asyncio
from telebot.types import InlineQuery, InputTextMessageContent
from telebot import types
bot = AsyncTeleBot("", parse_mode=None)
# Обработка команды /start приветствие.
@bot.message_handler(commands=['start'])
async def send_welcome(message):
await bot.reply_to(message,'------\n'
+ 'Здравствуй, '
+ message.from_user.first_name
+ ' \nПереведу с русского на английский \nИ с других языков на русский '
+'\n------')
# Обработка команды /help.
@bot.message_handler(commands=['help'])
async def send_welcome(message):
await bot.reply_to(message,'------\n'
+ 'Просто вводи текст и нажимай отправить\n'
+ 'Я сам определю какой это язык\n'
+ 'Если не перевел, попробуй еще раз\n'
+ 'Перевод google'
+'\n------')
# Обработка текста сообщения, если ввод на русском, то перевод на английский,
# если другой язык, то перевод на русский.
@bot.message_handler()
async def user_text(message):
translator = Translator()
# Определение языка ввода.
lang = translator.detect(message.text)
lang = lang.lang
# Если ввод по русски, то перевести на английский по умолчанию.
# Если нужен другой язык, измени на .
if lang == 'ru':
send = translator.translate(message.text)
await bot.reply_to(message, '------\n'+ send.text +'\n------')
# Иначе другой язык перевести на русский {dest='ru'}.
else:
send = translator.translate(message.text, dest='ru')
await bot.reply_to(message, '------\n'+ send.text +'\n------')
# Обработка картинок с подписями
@bot.message_handler(content_types=['photo'])
async def handle_image(message):
translator = Translator()
#Обработчик сообщений с изображениями
chat_id = message.chat.id
photo = message.photo[-1].file_id
caption = message.caption
# Определение языка ввода.
lang = translator.detect(caption)
lang = lang.lang
# Если подпись по русски, то перевести на английский по умолчанию.
if lang == 'ru':
send = translator.translate(caption)
# Иначе другой язык перевести на русский {dest='ru'}.
else:
send = translator.translate(caption, dest='ru')
await bot.send_photo(chat_id, photo, caption=send.text)
# Обработка инлайн запросов. Инлайн режим необходимо включить в настройках бота у @BotFather.
@bot.inline_handler(lambda query: True)
async def inline_query(query):
results = []
translator = Translator()
text = query.query.strip()
# Если запрос пустой, не делаем перевод
if not text:
return
# Определение языка ввода.
lang = translator.detect(text)
lang = lang.lang
# Если ввод по русски, то перевести на английский по умолчанию.
if lang == 'ru':
send = translator.translate(text)
results.append(types.InlineQueryResultArticle(
id='1', title=send.text, input_message_content=types.InputTextMessageContent(
message_text=send.text)))
# Иначе другой язык перевести на русский {dest='ru'}.
else:
send = translator.translate(text, dest='ru')
results.append(types.InlineQueryResultArticle(
id='1', title=send.text, input_message_content=types.InputTextMessageContent(
message_text=send.text)))
await bot.answer_inline_query(query.id, results)
# Запуск и повторение запуска при сбое.
asyncio.run(bot.infinity_polling())
Готово, не забудьте указать Ваш токен ключ в скрипте и перезапустить службу:
service my-tel-bot restart
Нет комментариев