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

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

カレンダーのDavCalをコマンドラインに出力したい – matoken’s meme

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

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

タイトル: Webhooksへの序章 – Discord

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

Webhooks URLはこんな感じのものです．
https://ptb.discord.com/api/webhooks/826777625053495306/QZoG2LLZOFlsKO_Auf1IQcXHVFozlgU37EGO9bhQKAifzZ0VAkyIYuQjRSzuOvC7U1gR

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

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

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

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

* カレンダーのDavCalをコマンドラインに出力したい – matoken’s meme

以下の適当な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