Discord スラッシュコマンドでファイルアップロードする
はじめに
誰かがファイルをアップロードしたら、それをVectorDBに格納するコマンドが作ろうと思っています。
そこで、前段階として、スラッシュコマンドでファイルをアップロードできないか調べてみました。
なお、開発環境はNode.jsで、本番環境はAWS Lambdaを使って運用しています。
すでにbotの作成、登録済みであることを前提としています。
(そちらの解説はしません)
コマンドの作成
公式ドキュメントにて、コマンドのオプションを調べると"ATTACHMENT"がありました。
Application Command Option Type
上記をもとに、
以下のようにパラメタを作り
const PDF_COMMAND = {
name: "pdf",
description: "PDFのアップロード",
type: 1,
options: [
{
name: "memo",
type: 3,
required: true,
description: "ファイル説明",
},
{
name: "pdf",
type: 11,
required: true,
description: "PDFファイル",
},
],
};
実行します。
PDF_COMMAND以外は既存のコマンド(ダミー)です。
const ALL_COMMANDS = [A_COMMAND, B_COMMAND, C_COMMAND, PDF_COMMAND];
InstallGlobalCommands(DISCORD_APP_ID, ALL_COMMANDS);
コマンドの作成方法の詳細は触れませんが、コードは公式ドキュメントでも使われている以下のサンプルコードを参照してください。
discord/discord-example-app
コマンドが作成されたかチェック
ドラッグ&ドロップするとファイルの項目が埋まるので、残りの項目を入力して送信します。
ログを取るとパラメタが届いていることがわかります。
形式は以下の資料のとおりです。
上記内の"data"が
で、"resolved"というキーが以下のResolved Dataです。
"attachment"というキーに目当てのファイルの情報が格納されます。
※画像URLに urlと proxy_url があり、後者はCDNでキャッシュされた画像URLのようです。削除されるタイミングやURLが一定でないなど仕様の違いがあるようですが、明確に定義された資料が見つかっていません。
ただし、今回の用途はアップロード直後で、なおかつ内部アクセスなので、いずれを使っても大きな支障はないかと思います。
最後に
画像のURLが取れたので具体的な処理は省きます。
機会があれば、読み込んだファイルをVectorDBに格納する処理あたリは別途記事にするかもしれません。
ChatGPTは、いわば 1on1で生成AIと向き合うわけですが、Discordなどで資料を持ち寄りLLMを交えてディスカッションしてみるのも面白そうなので、この機能を使って実現してみたいと思います。
Discussion