🤖

timesを全部共有してくれるdiscordボットをサクッと作った

2023/09/02に公開

こんにちは、calloc134です。

皆さんは技術コミュニティに所属していますか?
その中で、timesという文化を持っているコミュニティは多いと思います。
timesとは、自分の独り言スペースとして使えるチャンネルです。

timesには、独り言として技術の雑談や、最近の近況や、自分の考えを書いたりすることができます。そして、それを読んでくれる人がいると、それに対してコメントを書いてくれたりします。
自分は現在3つほどの技術コミュニティに所属しており、それぞれのコミュニティでtimesを書いています。

さて、timesを書くたびに、3つのコミュニティに同じ内容を書くのは面倒です。そこで、timesを全部共有してくれるdiscordボットを作りました。

使い方

ボットをサーバに追加

このボット君を、内容送信したいサーバに追加します。

必要な値のコピー

まず、コマンドを利用するユーザのIDをコピーします。

また、送信したいtimesのチャンネルのIDをコピーしてから、ボットにtimes送信先チャンネルを登録します。

なお、チャンネルIDをコピーするためには、discordの設定から「詳細」を選択し、「開発者モード」を有効にする必要があります。

これらのデータをメモ帳のようなものにコピーしておきます。

チャンネルIDの登録

/add_channel_idコマンドを利用して、times送信先チャンネルを登録します。

無事に登録されると以下のような画面となります。

なお、削除は/remove_channel_idコマンドを利用して行うことができます。

また、登録されているチャンネルIDは/show_channel_idコマンドを利用して確認することができます。

投稿の作成

/timesコマンドを利用して、投稿を作成します。

投稿がおこなわれると以下のようになります。

また、投稿がされているのがわかります。

需要があれば一般公開を考えています

技術構成

今回は、以下の技術を利用しています。

  • TypeScript
  • fastify
  • discord-interactions
  • @cyclic.sh/dynamodb

また、このdiscordボットをデプロイするのにcyclic.shというサービスを利用しています。

https://cyclic.sh

このサービスでは、GitHubのリポジトリと連携して、リポジトリにpushされた際に自動的にデプロイを行うことができます。

対応しているランタイムはNode.jsとPython、Goとなっています。

今回は、Node.jsを利用しています。

cyclicのランタイムではwebsocketは利用できないため、discord.jsが使えない状態でした。そのため、discordのインタラクション APIを利用することで、discordボットを実装しました。

https://discord.com/developers/docs/interactions/receiving-and-responding

また、cyclic.shがdynamodbをラップしたcyclic dbを利用できるため、これを用いてユーザのチャンネルIDを登録しています。

コードの解説

以下のリポジトリからコードにアクセスできます。

https://github.com/calloc134/times_shower

詳しい解説は、需要があれば記述します。

おわりに

自分にとっては初めてのdiscordボット開発でした。
サンプルコードが軒並み生JSばかりで結構苦戦しましたが、サクッと開発できて良かったです。
参考になれば幸いです。

GitHubで編集を提案

Discussion