Para probar el rendimiento de un traductor bot de Telegram escrito en Python, usamos servidor de bots de Telegram preconfigurado. Este bot puede traducir texto del ruso al inglés y de otros idiomas al ruso, mientras que el idioma de entrada en este caso se determinará automáticamente.
Procedamos con la instalación:
source my-tel-bot/bin/activate
pip3 install googletrans==3.1.0a0 - es importante instalar esta versión particular de la biblioteca
pip3 install pyTelegramBotAPI
pip3 install asyncio
pip3 install aiohttp
Reemplacemos nuestro bot de demostración con el existente:
/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)
# Manejo del saludo del comando /start.
@bot.message_handler(commands=['start'])
async def send_welcome(message):
await bot.reply_to(message,'------\n'
+ 'Здравствуй, '
+ message.from_user.first_name
+ ' \nTraduciré del ruso al inglés. \nY de otros idiomas al ruso. '
+'\n------')
# Procesando el comando /help.
@bot.message_handler(commands=['help'])
async def send_welcome(message):
await bot.reply_to(message,'------\n'
+ 'Simplemente ingrese el texto y presione enviar\n'
+ 'Voy a determinar qué idioma es\n'
+ 'Si no está traducido, inténtalo de nuevo\n'
+ 'Google Translate'
+'\n------')
# Procesamiento de texto de mensaje, si la entrada está en ruso, luego traducción al inglés,
# si es otro idioma, entonces la traducción al ruso.
@bot.message_handler()
async def user_text(message):
translator = Translator()
# Determinación del idioma de entrada.
lang = translator.detect(message.text)
lang = lang.lang
# Si la entrada está en ruso, traduzca al inglés de forma predeterminada.
# Si necesita otro idioma, cambie a .
if lang == 'ru':
send = translator.translate(message.text)
await bot.reply_to(message, '------\n'+ send.text +'\n------')
# De lo contrario, traduce otro idioma al ruso. {dest='ru'}.
else:
send = translator.translate(message.text, dest='ru')
await bot.reply_to(message, '------\n'+ send.text +'\n------')
# Manejo de imágenes con subtítulos
@bot.message_handler(content_types=['photo'])
async def handle_image(message):
translator = Translator()
#Controlador de mensajes de imagen
chat_id = message.chat.id
photo = message.photo[-1].file_id
caption = message.caption
# Determinación del idioma de entrada.
lang = translator.detect(caption)
lang = lang.lang
# Si la firma está en ruso, traduzca al inglés de forma predeterminada.
if lang == 'ru':
send = translator.translate(caption)
# De lo contrario, traduce otro idioma al ruso. {dest='ru'}.
else:
send = translator.translate(caption, dest='ru')
await bot.send_photo(chat_id, photo, caption=send.text)
# Procesamiento de solicitudes en línea. El modo en línea debe estar habilitado en la configuración del bot @BotFather.
@bot.inline_handler(lambda query: True)
async def inline_query(query):
results = []
translator = Translator()
text = query.query.strip()
# Si la solicitud está vacía, no transferimos
if not text:
return
# Determinación del idioma de entrada.
lang = translator.detect(text)
lang = lang.lang
# Si la entrada está en ruso, traduzca al inglés de forma predeterminada.
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)))
# De lo contrario, traduce otro idioma al ruso {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)
# Inicio y reintento en caso de error.
asyncio.run(bot.infinity_polling())
Listo, no olvide especificar su token de clave en el script y reinicie el servicio:
service my-tel-bot restart
Sin comentarios aún