Yosuga

https://github.com/elecdeer/yosuga-bot

概要

Discord用のテキスト読み上げBotです。スラッシュコマンドによってボイスチャンネルに呼び出すことができ、紐付けたテキストチャンネルに書き込まれた内容を読み上げます。マイクミュートにしている人も会話に参加しやすくなり便利です。

身内間で使用するため、自宅サーバで運用中です。

音声合成はVOICEVOXとvoiceroid_daemonによって行います。かわいく聞き取りやすい音声で読み上げてくれます。

ユーザ別・サーバ別の音声設定の他、VCへの入室者通知や、自動退出機能も備えています。


使用技術

  • Node.js
  • TypeScript
  • Discord.js
  • Docker


ポイント1

テキストチャンネルに書き込まれた内容をそのまま音声合成エンジンに投げてしまうと、URLや絵文字などがよく分からない読みになってしまうため、いくつか置換処理を通しています。

URLの場合はそのリンク先にアクセスしてOGP情報を取得し、そのタイトルに置換しています。

絵文字の場合は、Unicode-orgのCLDRアノテーションデータから作成したテーブルに基づき置換しています。


ポイント2

GitHub Actionsを用いてDockerイメージを自動ビルドしています。Dockerを使用することで、ホストサーバのNode.jsやFFmpegのインストール状態などを気にしなくて良くなりました。


ポイント3

設定はマスター・ギルド(Discordのサーバー)・ユーザの3レベルあり、下位レベルで設定されていない項目については上位の設定値を利用するようになっています。

実装部分でもTypeScriptの型定義を凝ることで、異常な設定項目などを静的にエラー検出できるようにしています(typesConfig.tsなど)。