Discord Webhook にメッセージを送る
準備
- 外部サービスからDiscordにメッセージを送る(Webhook)
こちらを参考に投稿したいチャンネルで Webhook を作成して Webhook URL をメモします。
こんな感じで動きます
ソースコード
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections; // IEnumerator のための参照
using UnityEngine.Networking; // UnityWebRequest のための参照
using System; // Serializable のための参照
using System.Text; // Encoding のための参照
public class Sample_DiscordWebhook : MonoBehaviour, IPointerClickHandler
{
// 送信する Unity データを JSON データ化する RequestData ベースクラス
[Serializable]
public class RequestData
{
// content が投稿テキスト
// https://discord.com/developers/docs/resources/webhook#execute-webhook
public string content;
}
// アクセスする Discord Webhook URL
string urlDiscordWebhook = "アクセスする Discord Webhook URL";
public void OnPointerClick(PointerEventData eventData)
{
// HTTP リクエストを非同期処理を待つためコルーチンとして呼び出す
StartCoroutine("PostData");
}
// POST リクエストする本体
IEnumerator PostData()
{
// HTTP リクエストする(POST メソッド) UnityWebRequest を呼び出し
// アクセスする先は変数 urlGitHub で設定
UnityWebRequest request = new UnityWebRequest(urlDiscordWebhook, "POST");
// RequestData ベースクラスを器として呼び出す
RequestData requestData = new RequestData();
// content を設定
requestData.content = "Hello"; // ダミーで 1000 pt のゲーム結果を送る
// 送信データを JsonUtility.ToJson で JSON 文字列を作成
// pointRequestData の構造に基づいて変換してくれる
string strJSON = JsonUtility.ToJson(requestData);
Debug.Log($"strJSON : {strJSON}");
// 送信データを Encoding.UTF8.GetBytes で byte データ化
byte[] bodyRaw = Encoding.UTF8.GetBytes(strJSON);
// アップロード(Unity→サーバ)のハンドラを作成
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
// ダウンロード(サーバ→Unity)のハンドラを作成
request.downloadHandler = new DownloadHandlerBuffer();
// JSON で送ると HTTP ヘッダーで宣言する
request.SetRequestHeader("Content-Type", "application/json");
// リクエスト開始
yield return request.SendWebRequest();
// 結果によって分岐
switch (request.result)
{
case UnityWebRequest.Result.InProgress:
Debug.Log("リクエスト中");
break;
case UnityWebRequest.Result.Success:
Debug.Log("リクエスト成功");
// コンソールに表示
Debug.Log($"responseData: {request.downloadHandler.text}");
break;
}
}
}