Pour tester les performances d'un traducteur de bot de télégramme écrit en Python, nous avons utilisé serveur de bot télégramme préconfiguré. Ce bot peut traduire du texte du russe vers l'anglais et d'autres langues vers le russe, tandis que la langue d'entrée dans ce cas sera déterminée automatiquement.
Procédons à l'installation:
source my-tel-bot/bin/activate
pip3 install googletrans==3.1.0a0 - il est important d'installer cette version particulière de la bibliothèque
pip3 install pyTelegramBotAPI
pip3 install asyncio
pip3 install aiohttp
Remplaçons notre bot de démonstration par celui existant:
/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)
# Gérer le message d'accueil de la commande /start.
@bot.message_handler(commands=['start'])
async def send_welcome(message):
await bot.reply_to(message,'------\n'
+ 'Bonjour, '
+ message.from_user.first_name
+ ' \nJe traduirai du russe vers l'anglais \nEt d'autres langues en russe '
+'\n------')
# Traitement de la commande /help.
@bot.message_handler(commands=['help'])
async def send_welcome(message):
await bot.reply_to(message,'------\n'
+ 'Entrez simplement du texte et appuyez sur envoyer\n'
+ 'Je déterminerai de quelle langue il s'agit\n'
+ 'Si non traduit, réessayez\n'
+ 'Google Traduction'
+'\n------')
# Traitement du texte du message, si l'entrée est en russe, puis traduction en anglais,
# si une autre langue, alors traduction en russe.
@bot.message_handler()
async def user_text(message):
translator = Translator()
# Détermination de la langue d'entrée.
lang = translator.detect(message.text)
lang = lang.lang
# Si l'entrée est en russe, traduisez en anglais par défaut.
# Si vous avez besoin d'une autre langue, changez pour .
if lang == 'ru':
send = translator.translate(message.text)
await bot.reply_to(message, '------\n'+ send.text +'\n------')
# Sinon, traduisez une autre langue en russe {dest='ru'}.
else:
send = translator.translate(message.text, dest='ru')
await bot.reply_to(message, '------\n'+ send.text +'\n------')
# Gestion des images avec des légendes
@bot.message_handler(content_types=['photo'])
async def handle_image(message):
translator = Translator()
#Gestionnaire de messages d'image
chat_id = message.chat.id
photo = message.photo[-1].file_id
caption = message.caption
# Détermination de la langue d'entrée.
lang = translator.detect(caption)
lang = lang.lang
# Si la signature est en russe, traduisez en anglais par défaut.
if lang == 'ru':
send = translator.translate(caption)
# Sinon, traduisez une autre langue en russe {dest='ru'}.
else:
send = translator.translate(caption, dest='ru')
await bot.send_photo(chat_id, photo, caption=send.text)
# Traitement des demandes en ligne. Le mode en ligne doit être activé dans les paramètres du bot @BotFather.
@bot.inline_handler(lambda query: True)
async def inline_query(query):
results = []
translator = Translator()
text = query.query.strip()
# Si la demande est vide, nous ne transférons pas
if not text:
return
# Détermination de la langue de saisie.
lang = translator.detect(text)
lang = lang.lang
# Si l'entrée est en russe, traduisez en anglais par défaut.
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)))
# Sinon, traduisez une autre langue en russe {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)
# Démarrage et nouvelle tentative en cas d'échec.
asyncio.run(bot.infinity_polling())
Terminé, n'oubliez pas de spécifier votre jeton de clé dans le script et de redémarrer le service:
service my-tel-bot restart
Aucun commentaire pour l'instant