以下の記事でDavCalやGoogleカレンダーをコマンドラインで閲覧できるようになりました.
せっかくなのでDiscordにも毎朝その日のイベントを投稿するようにしてみます.
DiscordはWebhooksを使ってかんたんにメッセージを投稿することが出来ます.
投稿したいチャンネルの⚙アイコン「チャンネルの編集」から「連携サービス」→「ウェブフック」から操作できます.
新しいウェブフックを作成し,投稿チャンネルを確認して「ウェブフック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に投稿するようにしてみます.
以下の適当な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