見出し画像

Discordで自動翻訳BOTを作った話

マカです。
Discordの翻訳BOT「MTS」(MakaTranslateService)を作りました!
なんで作ったかというと、
無料の翻訳BOTがない!!!(あっても10000文字まで無料とかだった)
あれ、これ自分で作れば無料じゃね!?!?!?
ってことで作りました。
サポートサーバー↓


お知らせ

2024/05/02 /noticeを追加しました。サーバー個別のお知らせも載せているので定期的に見てあげてください。

2024/06/01 二代目翻訳bot「太郎」を作成しました。
導入方法のところにリンクあります。

2024/06/02 チャンネルごとの言語設定をできるようにしました。
詳細はこちらの記事から

2024/06/04 三代目翻訳bot「次郎」を作成しました。

導入方法

2024/07/04 三代目翻訳bot「次郎」↓
https://discord.com/oauth2/authorize?client_id=1258420632811602051&permissions=294742223888&integration_type=0&scope=bot+applications.commands

2024/06/01 二代目翻訳bot「太郎」↓
https://discord.com/oauth2/authorize?client_id=1246107625599533166&permissions=827318430800&scope=bot+applications.commands

MTS↓
下記リンクを押して導入してください。(認証Botではないです。)(Botを制作しているアカウントでの2FA認証は有効にしてます。)
https://discord.com/oauth2/authorize?client_id=1154813675803263076&permissions=9624485194896&scope=bot+applications.commands

(2024/04/12なんかパーミッションエラー出てました。招待コード下の方で多分いけます。)

使用方法

prefix(接頭語) はv!です。
サーバーに導入したら、まずは
v!set [第一言語] [第二言語]
で言語を指定してください。(管理者権限があるアカウントのみ有効)
[]内はGoogle翻訳ISO-639 コードで指定してください。
(Deepl翻訳が対応していない言語には自動翻訳は対応していません。)
対応していない言語であれば対応していない旨が表示されます。
v!setをしない場合自動翻訳はできません。(コマンドを打った場合に警告が出ます。)
また、サーバーごとの言語設定なので、チャンネルごとでの設定はできません。

自動翻訳を開始する場合
v!startでGoogle翻訳を使用した自動翻訳を、コマンドを打ったチャンネルで開始することができます。
v!start deepl でDeepl翻訳を使用した自動翻訳をプレミアサーバーの場合は開始できます。
自動翻訳を終了する場合は
v!stop
で止めることができます。
また、スラッシュコマンドで開始、終了することもできます。
/automatictranslation
スラッシュコマンドを使用した場合、プレミアサーバーではデフォルトでDeepl翻訳での自動翻訳が有効になります。
プレミアサーバー以外ではGoogle翻訳になります。
また、プレミアサーバーであってもDeepl翻訳の上限に達した場合は自動でGoogle翻訳に指定されます。
翻訳したメッセージを表示するまでにかかる目安の時間は
Google翻訳2500ms(2.5秒) / Deepl翻訳800ms(0.8秒)
です。

一時的な翻訳
v!tr [言語コード] [翻訳する文]
でGoogle翻訳します。
言語コードはv!setで使用するGoogle翻訳ISO-639 コードで指定してください。
このコマンドの場合はGoogle翻訳ISO-639 すべてが使用できます。

v!usage
Deepl翻訳の全サーバーでの利用度を表示します。

v!payment
あなたの寄付状況およびプレミア使用率を表示します。

仕様とか

このBotでは、Google翻訳はGAS(GoogleAppsScript)を使用しています。
自動翻訳時、Google翻訳を使用する場合2.5秒ぐらい翻訳に時間がかかります。
Deepl翻訳の場合はモノによりますが、0.8秒ぐらいで翻訳されます。
自動翻訳した文章は、Bot側で翻訳元のメッセージidと翻訳後のメッセージidを一定時間キャッシュ(一時ファイル)に保存します。
メッセージidは0秒から12時間ほど保持されます。
メッセージ自体の保存、保持はされません。
なぜキャッシュにメッセージidを保存するかというと、翻訳元メッセージが削除された場合、翻訳後のメッセージも削除するため、あと翻訳元メッセージが編集された場合、翻訳後のメッセージも編集するためです。
メッセージが連投された場合は翻訳されないことがあります。
あとURLなどは省略されます。
Deepl翻訳は、APIが無料ではないので寄付してくださった方が指定したサーバーでのみ有効です。
指定できるサーバーの数及び期間は寄付してくださった量によって変わります。
寄付はPayPay一口¥2,500(JPY)の予定です(要相談)(Deepl APIが¥2,500/100万文字なので)(寄付が多かったら¥500(JPY)とかも考えます)
あまりにも使用量が多かったらDeeplを使用した自動翻訳できる期間を変更する場合があります。
なお、Deeplを使用した自動翻訳であっても、メッセージを編集した場合は編集後のメッセージはGoogle翻訳で翻訳されます。
個人制作なのと、使用しているサーバーの性能があまり良くないのでbotが止まる場合やエラーが発生する場合がありますが、目をつぶってください、、、
10分以上止まってたらサポートサーバーまでお願いします。
また、導入する際に一部権限を無効にした場合はBOTが機能しない場合があります。
またBOT自体完全ではないのでバグって落ちることがあります。

あなたもBOTを作ってみませんか?

自分で作れば無料なこと結構あります!
あとこのBOTではGAS(GoogleAppsScript)を使用してGoogle翻訳を行っていますが、利用頻度が高くなるとGASへのリクエストが多くなり、結構エラー吐きます
なので自分で作ったほうがいいですはい。
このBOTの原型となるソースコードをおいておくのでぜひ作ってみてください!(コードはそんなにきれいじゃない)
https://github.com/makamaika/discord-automatictranslation-v13
githubにも注意書きがありますが、GASで作ったAPIはmaka(この記事の作者)が作ったものなので、適宜変更してください。(変更しなくても多分使えますが動作保証はしません。)

ついでにGASでGoogle翻訳Webアプリケーションの作り方

1, https://script.google.com/home にアクセスします(Googleアカウントが必要)
2, 左上の「新しいプロジェクト」を押して新規プロジェクトを作成します。

3, プロジェクト名を変えます(後々わからなくなるので)

4, 

4, コードを書きます
以下のコードに書き換えてください。

function doGet(e){
  var p = e.parameter;
  var translatedText = LanguageApp.translate(p.text, p.source,p.target,{contentType: 'text'});
  return ContentService.createTextOutput(translatedText);
}

5, 保存します。
フロッピーディスクマーク(戻る進むの一個右、実行ボタンの一個左)をクリックしてください。

6, 右上のデプロイボタン押してデプロイを管理を押してください。

7, デプロイメントの作成を押してください。

8, 左上の歯車を押してウェブアプリを選択してください。

9, アクセスできるユーザーを全員に変更して、右下のデプロイボタンを押してください。

10, ウェブアプリのurlをコピーしてください。

11, botのコードのhttps://script.google.com/macros/s/からexecまでのurlを変更してください。

保存して完了です。
お疲れ様でした。

この記事が気に入ったらサポートをしてみませんか?