RustでTimes拡散DiscordBot
ナマステ, neruneruna7だ.
今回の記事は,Ubiquitimesの派生プロダクトについてである.
名前は Ubiqutimes-Cardiac
だ.
概要
Timesに書き込んだ内容を,書き込んだDiscordサーバとは他のサーバにも拡散するDiscord Botである.
この記事を見ている人の中には,何かしらのコミュニティに所属している人もいると思う.特にソフトウェアエンジニア,プログラミング系のコミュニティではTimes文化なるものがあるコミュニティも少なくない.
そして,複数のコミュニティに属している場合,同じ内容を各コミュニティに書き込みたいこともあるだろう.本Botは,その手間を削減することを目的とするDiscordBotである.
また,プロダクト内容や機能としてはcalloc134のtimesを全部共有してくれるdiscordボットをサクッと作ったとほぼ同一である.
(一応calloc134本人にこのように名前出す許可を取っています)
余談,プロダクトの命名
Ubiquitous
(遍在) + Times
+ Cardiac
(心臓)
目標
このプロダクトを作成するにあたり,開発を通じて得るものとして以下の目標を設定した.
- 変更に強い設計
- 実際にユーザを得ることを想定した設計
- ユーザからのフィードバックを得て,改善につなげる流れ
補足: 変更に強い設計を目標の1つとして掲げているのは,源流のUbiquiTimesからの影響である.UbiquiTimesと比べて規模が小さいため,開発の際に様々な設計を試しやすい.そうして得たものをUbiquiTimesへ還元するのである.
設計・アーキテクチャについて
設計の過程において,俗にいうクリーンアーキテクチャについてごく軽く調べ参考にした部分はある.しかし,方針としてクリーンアーキテクチャを目指す・採用することを目指しているわけではない.
本プロダクトにおいては以下の3つを達成していればよい.
- 使用するDBを切り替えしやすい
- 使用するDiscordライブラリを切り替えしやすい(Slackのものにも切り替えられる)
- ライブラリによって変化しない型,トレイト,関数をまとめる(Domain?)
できること
現在以下のコンテンツについて拡散を行うことができる.
- テキスト
- ファイル(画像など)
拡散の仕組み
WebHookを利用して拡散を行っている.
なぜBotから直接チャンネルへ書き込むのではなくWebHookを利用しているのか,という疑問があるだろう.その理由はこのBotはあくまでもUbiquiTimesから派生したものであり,UbiquiTimesはWebHook前提の仕組みなので,派生であるこのプロダクトそれを受け継いでいる.
メリットとして,どちらかで得られた知識・コードを簡単に共有・流用できるという点がある.
技術構成
導入
リポジトリのREADMEにBotの導入リンクがあるので,それを使用する.
使用方法
help
スラッシュコマンド
使用可能なすべてのスラッシュコマンドと,その説明を表示する.
特定のコマンドを選んで,より詳細な説明を表示することもできる.
ut_c_guild_init
スラッシュコマンド
Botを導入したら,まずut_c_guild_init
スラッシュコマンドを実行する.
これは,Botが動作するサーバーの情報を登録するためのものである.
ut_c_times_set
スラッシュコマンド
次に,自身のTimesであるチャンネルでut_c_times_set
スラッシュコマンドを実行する.
user_name
は,他のサーバーから拡散されてきた際のユーザー名であり,自由に設定することができる.また,サーバーごとに違う名前を設定してもよい.ただし,プレフィクスとしてUT-
が自動的に付加される.
例を示す
- サーバA
ut_c_times_set
コマンドの際にユーザ名をAlpha
に設定 - サーバB
ut_c_times_set
コマンドの際にユーザ名をBeta
に設定
この状態で,BからAに拡散された場合,AのチャンネルにはUT-Beta
からのメッセージとして表示される.
Timesのチャンネルや,user_name
を変更したい場合は,再度このコマンドを実行することで変更できる.
Timesの内容を拡散したいすべてのサーバーで繰り返し
ut_c_guild_init
,times_set
の2つのコマンドを,Timesの内容を拡散したいすべてのサーバーで実行する.
もちろん,Botが導入されているサーバーであることが前提である.
~UT
プレフィックスコマンド
Timesに書き込んだ内容を拡散するためのコマンドである.
どのサーバーで実行してもよいし,どのチャンネルで実行してもよい.
ただし,実行したサーバーの自身のTimesには,Botから書き込まれることはない.
例として,テキストと画像を拡散したい場合は以下の画像のように入力する.
拡散元
拡散先では以下のように表示される
拡散先
画像ファイルではこのように同じような表示までされるが,テキストファイルなどでは少し違う表示になる.
拡散元
拡散先
拡散元,拡散先で同じように表示がされるのが理想だったが,やり方がわからなかったため断念した.
また仕組みとしてはCDNへのリンクを貼っているだけなので,アクセスするとダウンロードが始まってしまう.ファイル名が見えるだけで,どんなファイルなのか全くわからないというのは少々怖い.
そのため,ファイルの種別とサイズを表示することで,ある程度どんなファイルなのか,ファイルにアクセスする前に判別できるようにしている.
このコマンド実行時に呼ばれる処理はut_c_times_release
スラッシュコマンドと同一であるが,help
コマンドで確認できるようにスラッシュコマンドとしてもあるだけである.また,ut_c_times_release
として使用してもプレフィックスコマンドへ誘導するメッセージが表示されるだけである.
おわりに
今後も改善・メンテナンスを続けていく予定である.
現在は24時間稼働しており,また誰でも使えるのでぜひ使ってみてほしい.
リポジトリのREADMEにBotの導入リンクがあるので,それを使用することで導入できる.
フィードバックを頂けると喜びます.
Discussion