見出し画像

discord.pyで翻訳Botを作る方法


1. 今回やること

今回は、discord.pyで翻訳Botを作っていきたいと思います。

基本的にPythonのインストールされたWindowsPCが必要です。
また、discord.pyもインストールしておいてください。

2. 翻訳システムを書く

まず、main.pyに以下の内容を書いてください。

import aiohttp
import urllib.parse


def targetToSource(target: str):
    return {"ja": "en", "en": "ja", "zh-CN": "ja", "ko": "ja", "ru": "ja"}.get(
        target, "en"
    )


async def translate(source: str, target: str, text: str):
    async with aiohttp.ClientSession() as session:
        async with session.get(
            f"https://translate.googleapis.com/translate_a/single?client=gtx&sl={source}&tl={target}&dt=t&dj=1&q={urllib.parse.quote(text)}"
        ) as response:
            data = await response.json()

            translated_text = "".join(
                sentence["trans"] for sentence in data.get("sentences", [])
            )
            source_language = data.get("src", source)

            return {"text": translated_text, "source": source_language}

3. DiscordBotの根幹と、コマンドを作る

今回のDiscordBotは、特権インテントを使用します。
先に有効にしておいてください。
また、DiscordBotのTokenを取得しておいてください。
※絶対に流出させないでください。

import discord
from discord.ext import commands

intents = discord.Intents.all()

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.command(name="translate")
async def translate_command(self, ctx: commands.Bot, source: str, target: str, text: str):
    data = await translate(source, target, text)
    text = data['text']
    await ctx.reply(f"{text}")

bot.run("DiscordBotのToken")

4. 最終的なソースコード

※main.pyというファイル名で保存してください。

import discord
from discord.ext import commands
import aiohttp
import urllib.parse


def targetToSource(target: str):
    return {"ja": "en", "en": "ja", "zh-CN": "ja", "ko": "ja", "ru": "ja"}.get(
        target, "en"
    )


async def translate(source: str, target: str, text: str):
    async with aiohttp.ClientSession() as session:
        async with session.get(
            f"https://translate.googleapis.com/translate_a/single?client=gtx&sl={source}&tl={target}&dt=t&dj=1&q={urllib.parse.quote(text)}"
        ) as response:
            data = await response.json()

            translated_text = "".join(
                sentence["trans"] for sentence in data.get("sentences", [])
            )
            source_language = data.get("src", source)

            return {"text": translated_text, "source": source_language}

intents = discord.Intents.all()

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.command(name="translate")
async def translate_command(self, ctx: commands.Bot, source: str, target: str, text: str):
    data = await translate(source, target, text)
    text = data['text']
    await ctx.reply(f"{text}")

bot.run("DiscordBotのToken")

5. 実行してみる

py main.py

実行し、何もエラーが出なければ成功です。

Botをサーバーにインストールし、

!translate ja en こんにちは!

と入力し送信すると、

Hello!

と返信されるはずです。

6. エラーが出た!どうしよう

まず、以下の点を確認してください。

  • Botに適切な権限があるか

  • BotのTokenが間違っていないか

7. 最後に

翻訳Botが動いてくれたらうれしいです。
ここまで読んでいただきありがとうございました。
最後に、この記事へのいいねとフォローもよろしくお願いします

最後に、この記事へのいいねとフォローもよろしくお願いします。

7. 番外編

投稿主は、以下のDiscordBotを作成しています。
便利なので入れてみてね!


いいなと思ったら応援しよう!