Discord WebhookとLambdaを使って毎日のタスクを自動投稿してみた

Discord WebhookとLambdaを使って毎日のタスクを自動投稿してみた

2026.02.19

はじめに

こんにちは、山本 翔大です。
最近新しいスマホゲームを始めたのですが、毎日更新される内容が多く、頻繁にやり忘れてしまうことに困っていました。
そこで今回は Discord Webhook を使って毎日定時にタスク一覧を送信する仕組みを作ってみようと思います。

1. Webhook URL の取得

まずは、Webhook URL を取得します。以下の手順で URL を取得してください。

  1. タスクを送信したいチャンネルの歯車アイコンをクリック
  2. 「連携サービス」から「ウェブフック」を選択
  3. 「新しいウェブフック」をクリックし名前を設定
  4. 「ウェブフック URL をコピー」をクリックしURLを取得

IMG_4068

取得した URL は後で使用するためメモ帳等に保存しておいてください。

2. Lambda 関数の作成と設定

関数の作成

次に Lambda の作成を行います。
マネジメントコンソールから「関数の作成」をクリックし、以下の設定で Lambda 関数を作成してください。

  • 名前:DailyTaskBot(任意)
  • ランタイム:Python 3.12

IMG_4069

関数の設定

次に作成した関数の設定を変更します。
まずは先ほど保存したウェブフック URL を環境変数に保存します。
「設定」タブを開き「環境変数」から以下のように設定してください。

  • キー:DISCORD_WEBHOOK_URL
  • 値:(保存したURLを貼り付ける)

IMG_4070

保存が完了したらタイムアウト時間を変更します。
今回はタスク 1 件に応じて 1 秒時間をあけて送信しています。
「設定」タブから「一般設定」を選びタイムアウト時間を 1 分に変更してください。

コードの入力

次に Discord に送信するためのコードを入力します。
「コード」タブをクリックし以下のコードを貼り付けてください。

import json
import urllib.request
import time
import os
from datetime import datetime, timedelta, timezone

WEBHOOK_URL = os.environ.get('DISCORD_WEBHOOK_URL')

def send_message(content):
    if not WEBHOOK_URL:
        print("Error: DISCORD_WEBHOOK_URL is not set.")
        return None

    payload = {"content": content}
    headers = {
        "Content-Type": "application/json",
        "User-Agent": "DiscordBot (https://example.com, v1.0)"
    }

    data = json.dumps(payload).encode("utf-8")
    req = urllib.request.Request(WEBHOOK_URL, data=data, headers=headers, method="POST")

    try:
        with urllib.request.urlopen(req) as res:
            return res.getcode()
    except Exception as e:
        print(f"Error: {e}")
        return None

def lambda_handler(event, context):
    # 日本時間の取得
    jst = timezone(timedelta(hours=+9), 'JST')
    today = datetime.now(jst).strftime('%Y/%m/%d')

    # 送信したいタスクリスト
    tasks = [
        f"━━━━━━━━━━━━━━━━━━━━\n**📅 {today} のデイリータスク**\n━━━━━━━━━━━━━━━━━━━━",
        "**タスクA**: デイリークエストをクリアする",
        "**タスクB**: ショップの無料枠を回収する",
        "**タスクC**: 収集物の確認",
    ]

    # 1秒ごとに送信
    for task in tasks:
        send_message(task)
        time.sleep(1)

    return {
        'statusCode': 200,
        'body': f'Tasks for {today} sent successfully'
    }

このコードではタスクリストを作成し、1 秒ごとに送信しています。
タスクの内容を変えたい場合は以下の部分を変更してください。

    tasks = [
        f"━━━━━━━━━━━━━━━━━━━━\n**📅 {today} のデイリータスク**\n━━━━━━━━━━━━━━━━━━━━",
        "**タスクA**: デイリークエストをクリアする",
        "**タスクB**: ショップの無料枠を回収する",
        "**タスクC**: 収集物の確認",
    ]

3. トリガーの設定

次に毎日定時実行するためのトリガーを設定します。
Lambda 画面上部の「トリガーを追加」をクリックしてください。
ソースから「EventBridge (CloudWatch Events)」を選択し、「Create a new rule」を選択します。
ルール名を入力したら「Schedule expression」にスケジュール式を入力します。
今回は午前 5 時に更新されるためそれに合わせて 5 時に送信されるように設定しました。

cron(0 20 * * ? *)

IMG_4071

4. テストと実際の運用

最後にテストを行います。
「テスト」タブにある「テスト」ボタンをクリックすると、時間に関わらずタスクリストを送信することができます。
正常に設定できていれば、以下の画像のように表示されます。

実際に運用する際は、タスクが個別で送信されるように設定しているため、完了したタスクにリアクションをつけて管理してください。

IMG_4072

おわりに

以上で終了となります。

今回のように通知を一方向で送るだけであれば、Webhook を使うのがシンプルでおすすめです。
ただし、受信したメッセージに対して返答したり、操作を行ったりすることはできません。やりたい内容に応じて Bot との使い分けを行ってください。

参考資料

https://qiita.com/nemutas/items/3f5816eabbf0eda5e6a9
https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。

運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。

当社は様々な職種でメンバーを募集しています。

「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

FacebookHatena blogX

関連記事