シェルで Discord にメッセージを送る curl の書き方のメモ

シェルで Discord にメッセージを送る curl の書き方のメモです。この記事は 2022年 ゆるくすすめる ( ワンフットシーバス ) | GWアドベントカレンダー の 4/29 1日目の記事でもあります。

たとえば

サーバーで、cron の対象にしたシェルが実行されたときに Dircord に通知したいようなシーンがあるんですが、わざわざ Node.js でそれだけの axios コード書くのも、またシェルから参照が増えるのはなーと思うので、シェルから直接実行したくなります。

このように書くと動きました

いろいろ試行錯誤したのですが、以下のナレッジでうまく突破できました。

はじめはヒアドキュメントでやれば複数行でデータが書けるよねと分かり、前もって作った curl の内容を eval で実行する方法を方法を組み合わせました。

こちらが、実際に動いたコードです。

!#/bin/sh

curl=`cat <<EOS
curl
 --verbose
 -X POST
 https://discord.com/api/webhooks/0000000000000000/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 -H 'Content-Type: application/json'
 --data '{"content": "テスト"}'
EOS`
eval ${curl}

実際の Discord のチャンネルにデータを送る https://discord.com/api/webhooks/~ のURLの 0000000000000000AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA の部分はダミーにしていているので、自分の Discord の送り先で行う方は、置き換えてください。メッセージの中身 content も自由に書き換えてください。

cron で 1 日ごとに Let’s encrypt を叩くコードが出来上がりました。

image

もちろんこれだけで稼働状況が分かるわけじゃないですが、少なくとも、あ、ちゃんと定期的に動いたねくらいはすぐ把握できるので、ありがたいです。