Image

(最終更新日: 19.09.2024)

Pythonで書かれた翻訳Telegramボットの動作確認を行うために、事前に設定されたTelegramボットサーバーを使用しました。このボットはロシア語から英語、および他の言語からロシア語へのテキスト翻訳が可能で、入力言語は自動的に検出されます。

インストールを開始します:

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'
+ '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



No Comments Yet