🐡

キャンペーンが開始されたらdiscordに通知

2024/11/04に公開

はじめに

SNSを見ていたらお得なキャンペーン情報を見かけるが、当日になったら確実に忘れている。後各種payの還元情報がいい例だけど、どれだけ使ったかの集計が面倒なので、

  • Notionにキャンペーン情報のDBを作成
  • 開始日になったらdiscordに通知される
    • 通知されたら手動でお気に入り登録
  • 終了日になったら、または上限を使い切ったらお気に入りを外す

という運用を行う。


今回は開始日になったらdiscord通知する処理を作成した。

code

notion.gs
const NOTION = {
  token: '<token>',
  db: {
    campaign: '<id>',
  },
};

function getCampaignList(){
  return Notion.initManager(NOTION.token).query(NOTION.db.campaign);
}
main.gs
function noticeCampaign(){
  const alertList = getCampaignList().reduce((alertList, json) => {
    const startDate = json.properties['開始日'].date?.start;
    if(startDate && dayjs.dayjs(startDate).isSame(dayjs.dayjs(), 'days')) alertList.push(`イベント開始 ${json.properties['名前'].title.map(t => t.plain_text).join('\n')}`);
    return alertList;
  }, []);
  if(!alertList.length) return;
  discord(
    DISCORD.webhook.notice,
    alertList.join('\n'),
    true
  );
}

discord.gs
const DISCORD = {
  id : '<id>',
  webhook : {
    notice : '<token>',
  },
};

function discord(webhook, text, mentionFlg){

  const payload = {
    username: 'notice',
    content: (mentionFlg) ? `<@${DISCORD.id}>\n${text}` : text,
  };

  UrlFetchApp.fetch(
    webhook,
    {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload),
    }
  );
}


結果

Discussion