はじめに
ゲーマー向けのチャットサービス
Discord
が多機能なことで近年脚光を浴びています。
DiscordはBotを導入することで、機能を拡張できます。
今回はDiscord botでチャット画面にモーダルのフォームを表示し、入力された値をkintoneに登録して管理するカスタマイズを紹介します。
開発の流れ
- kintoneアプリの作成
- Discord botの作成
- node.jsによるkintoneとの連携プログラムの開発
kintoneアプリの作成
アプリの設定のフォームタブより以下の画像を参考にkintoneアプリを作成します。
以下のフィールドを追加します。
| フィールド名 | フィールドタイプ | フィールドコード | 備考 |
|---|---|---|---|
| 店名 | 文字列(1行) | restaurant_name | 必須項目 |
| 種類 | ドロップダウン | couisine | 次の画像を参考に項目を追加 |
| URL | リンク | url_link | WebのURLリンクフィールド |
「フォームを保存」して、アプリの「設定」画面に移動します。
「APIトークン」をクリックします。
「生成する」ボタンをクリックします。
生成されたAPIトークンの「アクセス権」に「レコードの追加」をチェックして保存します。
「アプリを更新」ボタンをクリックして、変更を反映します。
以上でアプリの作成は終了です。
Discord botの作成
Discord 開発者ポータル
を開き、「New Application」ボタンをクリックします。
アプリケーション名を入力します。
チェックボックスをチェックして規約に同意します。
「Create」ボタンをクリックします。
以上でBotが作成されました。
Discord botのサーバーへの招待
次に作成したBotを以下の手順でサーバーに招待します。
「Settings」にて「Installation」メニューをクリックします。
「Guild Install」の「Scopes」に「bot」を追加します。
「Install Link」の「Copy」ボタンをクリックします。
別のブラウザーのタブ、またはウィンドウを開き、コピーしたリンクをペーストして開きます。
表示された画面で「サーバーに追加」を選択します。
ドロップダウンより追加したいサーバー名を選択し「認証」ボタンをクリックします。
以上で、Discord botの設定は終了です。
node.js による kintone との連携プログラムの開発
今回はDiscord.jsというJavaScriptライブラリを使用してローカルマシンでDiscordの会話を監視するbotプログラムを作成します。
Discord.jsを使うにはNode.jsのインストールが必要です。
Node.js
のサイトより、ダウンロードしてください。
次にお使いのPCのコマンドターミナルを開き、プロジェクトファイルを格納するフォルダーを作成します。
次のコマンドを参考にフォルダーを作成し、作成されたフォルダーに移動します。
今回のフォルダー名はlunch-botにしています。
|
|
node -vでNode.jsがインストールされていることを確認します。
またnpm init -yでプロジェクトの初期化を行います。パッケージの依存関係を記したpackage.jsonファイルが生成されます。
|
|
これでNode.jsの準備ができたので、以下のコマンドを実行してDiscord.jsをインストールします。
|
|
次に以下のコマンドを実行し、kintoneのJS SDKをインストールします。
|
|
これでNode.jsの設定は完了です。
認証情報の管理
Discordやkintoneのトークン情報は「config.json」ファイルで管理します。
プロジェクトのディレクトリに「config.json」ファイルを作成し、以下のフォーマットで認証情報を記述します。
|
|
JavaScriptのコード内では以下のようにすると、認証情報を取り出せます。
|
|
クライアント ID の入手
Discord Developer Portal
より上記で作成したアプリケーションの設定画面から「OAuth」メニューを選択します。
「Client Information」より「CLIENT ID」の「Copy」ボタンをクリックします。
コピーした値を「config.json」に貼り付けます。
Discord API トークンの入手
次に「Bot」メニューを選択し、「Bot」の設定画面より「Reset Token」をクリックします。
「Copy」ボタンをクリックして、「config.json」にコピーした値を貼り付けます。
サーバー ID の入手
今度はDiscordのクライアント画面を開きます。
上記でBotを招待したサーバーを開き、右クリックでサブメニューを開きます。
メニューの一番下の「サーバーIDをコピー」をクリックして、「config.json」にコピーした値を貼り付けます。
サーバーIDをコピーが表示されない場合はユーザアカウントの開発モードを有効にする必要があります。
kintone の認証情報の設定
上記でkintoneのアプリを作成した際に生成したAPIトークン、お使いのkintoneのドメイン情報、アプリのIDを同様に「config.json」に設定します。
以上で認証情報の設定は終了です。
プログラムの作成
discord botにてスラッシュコマンドを実行するには、以下の手順に沿ってのプログラミングが必要になります。
- コマンドプログラム:コマンドの定義や関数を記述します。
- コマンドハンドラープログラム:コマンドファイルを読み込み、コマンドを実行するコードを記述します。
- コマンドデプロイメントプログラム:スラッシュコマンドをDiscordに登録するコードを記述します。
コマンドプログラムの作成
以下のコマンドでプロジェクトのファルダー内に「Commands」フォルダーおよび「utility」サブフォルダーを作成します。
|
|
以下のコードを参考にプログラムを作成します。
「add-lunch.js」のファイル名で「utility」サブフォルダーの中に保存します。
|
|
以上でコマンドプログラムの作成は完了です。
コマンドプログラムの解説
スラッシュコマンドでモーダルを表示するためのdiscord.jsクラスのモジュールをロードします。
|
|
スラッシュコマンドを定義します。
|
|
スラッシュコマンドの実行時のインタラクションにレスポンスする関数を定義します。
|
|
モーダルを定義します。
モーダルに追加するコンポーネントを定義し、アクション行としてモーダルに追加します。
モーダルに追加できるコンポーネントは、1行テキスト(Short)か複数行のテキスト(Paragraph)のみです。
また、アクション行にはひとつのテキストコンポーネントのみ指定でき、最大5行までです。
スラッシュコマンドのレスポンスとしてモーダルを表示します。
スラッシュコマンドの設定に関する詳細は、discord.js guideの
Creating slash commands
の項を参照してください。
モーダルの設定に関する詳細は、discord.js guideの
Modals
の項を参照してください。
|
|
コマンドハンドラープログラムの作成
以下のコードを参考にプログラムを作成し、プロジェクトフォルダー直下に「index.js」のファイル名で保存します。
フォルダーツリーのディレクトリを「lunch-bot」に戻します。
|
|
以上でコマンドハンドラープログラムの作成は完了です。
コマンドハンドラープログラムの解説
node.js標準のファイルシステムおよびパスユティリティのモジュールを読み込み、必要なdiscord.jsクラスを読み込みます。
「config.json」ファイルに設定した認証情報を読み込みます。
discord.jsのクライアントインスタンスを生成し、上記で作成したコマンドファイルからコマンドを読み込みます。
client.commandsコレクションに読み込んだコマンドを設定します。
詳細は、discord.js guideの
Loading commands file
の項を参照してください。
|
|
スラッシュコマンドの実行時のリスナーを生成します。
受け取ったインタラクションがスラッシュコマンド以外の場合には、ハンドラーから抜け出します。
詳細は、discord.js guideの
Receiving command interaction
の項を参照してください。
|
|
受け取ったインタラクションにマッチするスラッシュコマンドを実行します。
詳細は、discord.js guideの
Executing commands
の項を参照してください。
|
|
モーダルフォーム送信時のリスナーを生成します。
受け取ったインタラクションがモーダルフォーム以外の場合には、ハンドラーから抜け出します。
詳細は、discord.js guideの
Receiving modal submissions
の項を参照してください。
|
|
モーダルに入力されたデータを取得します。
詳細は、discord.js guideの
Extracting data from modal submissions
の項を参照してください。
|
|
モーダルフォームから取得したデータをkintoneに登録します。
登録が成功した場合、discordのモーダル送信のレスポンスとしてレストラン名とWebサイトのURLを表示します。
モーダル送信のレスポンスの詳細は、discord.js guideの
Responding to modal submissions
の項を参照してください。
|
|
コマンドデプロイメントプログラムの作成
以下のコードを参考にプログラムを作成し、プロジェクトフォルダー直下に「deploy-commands.js」のファイル名で保存します。
|
|
以上でコマンドデプロイメントプログラムの作成は完了です。
コマンドデプロイメントプログラムの解説
コマンドデプロイメントプログラムの詳細は、discord.js guideの
Registering commands
の項を参照してください。
コマンドデプロイメントプログラムの作成が完了したら、以下のコマンドを実行してDiscordにコマンドを登録します。
|
|
動作確認
コマンドターミナルで次のコマンドを実行し、Discord Botプログラムを実行します。
|
|
起動したLunch BotがDiscordアプリ上でオンライン表示されているのを確認します。
「/add-lunch」コマンドをDiscordアプリで実行します。
モーダルフォームが表示されるので、レストランの情報を入力し、送信ボタンをクリックします。
kintoneへの登録が成功すると「レストラン名」「Webサイト」がDiscordアプリに表示されます。
kintoneのアプリに入力したレストラン情報が登録されていれば成功です。
今回は、サンプルアプリのため、ローカルサーバーを起動して動作確認を行いましたが、「Google Cloud Run」や「Digital Ocean」等のクラウドサービスプロバイダーにデプロイして実運用してください。
まとめ
Discordは、本来ゲーマー向けのコミュニケーションツールですが、Discord Botをカスタマイズすることで機能を拡張できます。
今回のようにkintoneと連携し、モーダルフォームを表示することでデータの管理が容易になり、ビジネスツールとしても大いに活用できます。
このTipsは、2024年9月版kintoneとdiscord.js v14.15.3で動作を確認しています。
