カレンダーをWebhooksでDiscordに投稿

以下の記事でDavCalやGoogleカレンダーをコマンドラインで閲覧できるようになりました.

せっかくなのでDiscordにも毎朝その日のイベントを投稿するようにしてみます.

DiscordはWebhooksを使ってかんたんにメッセージを投稿することが出来ます.

投稿したいチャンネルの⚙アイコン「チャンネルの編集」から「連携サービス」→「ウェブフック」から操作できます.
新しいウェブフックを作成し,投稿チャンネルを確認して「ウェブフックURLをコピー」でWebhooks URLを入手します.

curlで投稿テストをしてみます.

$ curl -X POST -H "Content-Type: application/json" \
  -d '{"username": "ボット", "content": "こんにちは🤖"}' \
  'https://ptb.discord.com/api/webhooks/826777625053495306/QZoG2LLZOFlsKO_Auf1IQcXHVFozlgU37EGO9bhQKAifzZ0VAkyIYuQjRSzuOvC7U1gR'

Discord bot

これで投稿できました :)

Discordにメッセージを投稿できるようになったので,以下のエントリで書いた khal コマンドで今日1日分の予定タイトルを入手してDiscordに投稿するようにしてみます.

以下の適当なScriptを用意しました.

2021-04-01 編集)
イベントがない日にも投稿してしまっていたのを修正&Bashismだったのをshで動くよう修正

#!/bin/sh
# khalコマンドで今日の予定を入手してDiscordにpostする
# https://matoken.org/blog/2021/03/31/post-your-calendar-to-discord-with-webhooks/

# DiscordのWebhook URL
# 以下のURLを参考に入手して設定する
# https://support.discord.com/hc/ja/articles/228383668-%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB-Webhooks%E3%81%B8%E3%81%AE%E5%BA%8F%E7%AB%A0
DISCORD_WEBHOOK='https://ptb.discord.com/api/webhooks/…………'

# khal
#   list -> 一覧表示
#   --format "{title}" -> タイトルだけ表示
#   today -> 今日から
#   today -> 今日まで
# sed -> jsonの改行形式に変換
CAL=$(khal list --format "{title}" today today | sed -z -e "s/\n/\\\\\\\\n/g")

# イベントのない日は投稿せず終了
if [ "${CAL}" = 'No events\\n' ]
then
  echo "${CAL}"
  exit
fi

MSG=$(printf '{"username": "今日のイベント📅", "content": "%s"}\n' "${CAL}")
echo "$MSG"

# Discord WebHock でKagolug の#random へpost
curl -X POST -H "Content-Type: application/json" \
	-d "${MSG}" \
	"${DISCORD_WEBHOOK}"

試しに実行すると投稿されました.

手動で叩くのは面倒すぎるので自動実行するようにcrontabに登録しておきます.

$ crontab -l | grep calpost
58 4 * * *      /home/matoken/bin/calpost.sh 2>&1 > /home/matoken/tmp/cron/calpost.sh.log

毎日04:58に実行するようにしました.

環境
$ dpkg-query -W vdirsyncer khal curl bash
bash    5.0-4
curl    7.64.0-4+deb10u1
khal    1:0.9.10-1.1
vdirsyncer      0.16.7-2
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

Your post must include a link to this post.

How does this work?
Write a response on your own website and include a link to this post. Then submit your response’s URL here. Your response may appear here after moderation. To update or remove it, edit or delete your original post and submit the same URL again. Learn more about Webmentions.