Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

HOYAのVoiceTextを使ってDiscordのテキストを読み上げるBotを作ってみた

$
0
0

はじめに

このBotを作った経緯としては、夜遅くなどどうしてもしゃべれない時間帯があるため、そうした時間帯でもVCで参加する方法が必要になり、このBotを作ってみました。
どうやら、既に喋太郎というBotがあるらしいですが、このBotを最初に作った時(2018年2月ぐらい)にはなかったのでご容赦ください。
似たようなことをしたい人の参考になれば良いなと思います。

ソースコード

GitHubにあります。
noriokun4649/Discord-TTS-Voice-channel-Bot
利用してるライブラリなどの依存関係はpackage.jsonに書いてありますが下記の通りです。

  • Node.js v12.19.0
  • @discordjs/opus : 0.3.2
  • config : 3.3.2
  • config-reloadable : 1.0.8
  • discord.js : 12.4.0
  • ffmpeg-static : 4.2.7
  • voice-text : 0.1.2

開発してみての感想

VoiceTextのライブラリや、Discordのライブラリが用意されていたため、簡単に開発することができました。
躓いた点としては、VoiceTextのライブラリから返ってくるbufferをDiscord.jsのstreamに渡す方法に躓きました。
このBotを作った当初(2018年2月ごろ)の時点では、一度wavファイルに保存して、保存後wavファイルを読み取りDiscord.jsに渡すという糞みたいな処理をしてましたが、現在は直接bufferからstreamに変換して渡しています。

また、DiscordのAPI自体の仕様で、Discordのテキストチャネルで送信されるサーバ独自の絵文字やメンションなどが変わった形で送られてくるため、こうした絵文字やメンションの処理も少しだけ戸惑いましたが、最終的には正規表現で対応しました。

使い方

Node.jsで動くので通常どおりnpmのコマンドで使えます。

機能や設定、コマンドなど

機能はそんなに多くありませんが下記のような機能があります。

  • コマンドの接頭語の変更機能
  • エラー時の自動再起動する機能
  • 読み上げ音声の変更機能
    • 音声の種類変更
    • 読み上げ音声の速度の変更
    • 読み上げ音声の高さの変更
  • ブラックリスト
    • コマンドの接頭語別に読み上げ禁止にする機能
    • ユーザー別に読み上げ禁止にする機能
    • すべてのBotを読み上げ禁止にする機能

読み上げ音声の変更機能以外は、Configファイルで設定可能です。

Configファイルについて

configフォルダ内のdefault.jsonがコンフィグファイルです。

{"Api":{"discordToken":"","voiceTextApiKey":""},"Prefix":"/","AutoRestart":true,"ReadMe":false,"Defalut":{"apiType":1,"voiceType":"hikari"},"BlackLists":{"memberIds":["381054450451742720"],"prefixes":["!","/"],"bots":true}}
項目内容・説明
discordTokenDiscordのトークンを記入
voiceTextApiKeyVoiceTextのAPIキーを記入
Prefixコマンドの接頭語を決めます
AutoRestart予期せぬエラー時に自動でボイスチャンネルへ再接続すかどうか
ReadMeこのBotが送るメッセージを読み上げるかどうか
apiTypeデフォルトのAPIを指定 (利用できるAPIが1になってしまったので無意味)
voiceTypeデフォルトのボイスを指定
memberIds読み上げから除外するユーザーのユーザーID
prefixes読み上げから除外する接頭語
botsBotを読み上げから除外する

Botのコマンドについて

接頭語+α内容・説明
joinボイスチャンネルにBotを呼びます
reconnectボイスチャンネルへ再接続します
killボイスチャンネルから切断します
mode読み上げに利用するTTSのAPIを変更します
typeAPIで利用可能な音声タイプを一覧表示します
voice音声タイプを変更します
speed音声の速度を変更します(0~200の数値)
pitch音声の高さを変更します(0~200の数値)
reloadコンフィグを再読み込みします

接頭語は、Configファイルで指定した接頭語を使います。

ToDo

一応まだ、開発のモチベーションがあるので今後の予定としては、ユーザーごとに読み上げ音声の種類を設定できるようにしたいと考えています。
聞き専の人が複数居ても、読み上げ音声の種類で人を区別できるようになるので利便性が上がると思います。

最後に

2018年2月頃に書いたプログラムをリファクタリングや機能の改善、バグ修正などしましたが、最終的には実用に足りる実装ができたと思います。
まだまだ、至らぬ点がありそうですが今後も開発出来たら良いなと思います。
最後まで見て頂きありがとうございます。


Viewing all articles
Browse latest Browse all 8691

Trending Articles