🦾

DiscordからNotion APIを使用してデータベースに追加してみた

2023/11/05に公開

作成した目的

開発でタスクを作成する際に連絡手段をDiscordを使用しているのですが
いちいちNotionを開くのがめんどくさすぎたのが背景にありました

必要なツールと環境

https://discord.js.org/
https://www.npmjs.com/package/@notionhq/client
https://nodejs.org/en
https://code.visualstudio.com/

Discordボットのセットアップ

https://qiita.com/D_drAAgon/items/6120f63b08f6f4cd876e
この方の記事を見ると分かりやすいです

Notion APIのセットアップ

https://qiita.com/n0bisuke/items/b0cf0c416aa8e46bdb1b
この方の記事を見ると分かりやすいです

DiscordからNotionへのデータの送信

Discord側のコード

import { Client, GatewayIntentBits } from "discord.js";
import { main } from "./notionTest.js";

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
  ],
});

client.on("messageCreate", async (message) => {
  if (message.author.bot) return; //BOTのメッセージには反応しない
  console.log(message);

  if (message.content === "タスクを作成したい") {
    message.channel.send(
      "タスクを作成したいのであれば\nタスク名\nタグ\n詳細\n上記に順に送ってください\nそれぞれ改行は必須です\n行の先頭に「新規作成」と書いてください"
    );
  }
  if (message.content.includes("新規作成")) {
    const lines = message.content.split("\n");

    const dataObject = {
      firstLine: lines[1],
      secondLine: lines[2],
      thirdLine: lines[3],
    };

    message.channel.send(
      "新規作成に成功しました。下記がタスクのURLです\n" +
        (await main(dataObject))
    );
  }
});

client.on("ready", () => {
  console.log("ボットが起動したよ");
});
client.login(
  "DiscordのbotTOKEN"
);

Notionのデータベースに追加するコード

import { Client } from "@notionhq/client";

// 自身の利用するデータベースID
const databaseId = "データベースのID"; // 間にハイフンがなくて大丈夫

// アクセストークン
const auth = "内部インテグレーションシークレットID";

// Initializing a client
export const main = async (message) => {
  const notion = new Client({ auth });

  // ページに追加するデータ
  const properties = {
    名前: {
      title: [
        {
          text: {
            content: message.firstLine,
          },
        },
      ],
    },
    タグ: {
      multi_select: [
        // タグは multi_select タイプ
        {
          name: message.secondLine,
        },
      ],
    },
    テキスト: {
      rich_text: [
        // テキストは rich_text タイプ
        {
          text: {
            content: message.thirdLine,
          },
        },
      ],
    },
    // 他のプロパティも必要に応じて設定
  };

  const response = await notion.pages.create({
    parent: { database_id: databaseId },
    properties,
  });
  console.log("新しいページが作成されました:", response);

  return response.url;
};

実行方法

node 実行したいファイル名
nodeで起動したらあとはDiscordでテキストを送信してタスクを作成するで完了🎉

感想

とりあえずなるはやで作成したのでこれがベストではなく、基盤として
ブラッシュアップしていければいいと思っています。

Discussion