Image

(最后一次变更: 04.05.2024)

为了测试用 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("密钥来自 @BotFather", 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'
+ '谷歌翻译'
+'\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



暂时没有评论