2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Siv3DAdvent Calendar 2023

Day 11

Siv3DからDiscordにメッセージを送信してみた

Last updated at Posted at 2023-12-10

はじめに

Discordには簡単にプログラムからメッセージが送信できるWebhookが使用できます。
Webhookは、外部のサービスからデータを受け取り、それをトリガーに特定のアクションを行う仕組みです。
今回はOpenSiv3DとDiscordのWebhook連携について説明します。

Discord Webhookでできること

DiscordのWebhookでは送信に関することができます。
メッセージを受信に反応して何かする系はWebhookでは行うことができません。

  • テキスト送信 (今回の記事で取り上げる内容)
  • 画像送信
  • ファイル送信
  • 埋め込みテキストの送信
    • DiscordにURLを貼ったときにプレビューが出るあれです

DiscordでのWebhook作成

自分で作成したサーバーで行うことをおすすめします。
他の人の作成したサーバーで行う場合、権限がなく設定ができない可能性があります。

  • 送りたいチャンネルの設定を選択
    image.png

  • Integrations(連携サービス)を選択
    image.png

  • Create Webhook(新しいウェブフック)を選択
    image.png

  • 名前、プロフィール画像の設定

    • プログラム側でも変更できます
    • 後ほどURLを使うので、CopyWebhook URL(ウェブフックURLをコピー)を押してメモをしてください
      image.png

Webhook送信

WebhookURL、メッセージ、ユーザー名、アバターURLを指定しWebhookを送信する例です。
普通に書くと大量にリクエストが送られるので、トリガーをかけて書きましょう。
以下のコードでは、スペースキーを押すとDiscordにメッセージが送信されます。

# include <Siv3D.hpp> // Siv3D v0.6.13

void Main() {
	while (System::Update()) {
		if (KeySpace.down()) {
			// 作成したWebhook URL
			const URL url = U"https://discord.com/api/webhooks/...";
			// 送りたいメッセージ
			const String message = U"Hello Webhook!";
			// 表示されるユーザー名
			const String userName = U"Siv3D";
			// アバターURL
			const URL avaterUrl = U"https://avatars.githubusercontent.com/u/7557228?s=200&v=4";

			const HashTable<String, String> headers = {{U"Content-Type", U"application/json"}};
			const std::string data = JSON{
				{U"content", message},
				{U"username", userName},
				{U"avatar_url", avaterUrl}
			}.formatUTF8();
			const FilePath saveFilePath = U"post_result.json";

			SimpleHTTP::Post(url, headers, data.data(), data.size(), saveFilePath);
		}
	}
}

Discordでこのようなメッセージが確認できると成功です!
image.png

活用例

ゲームのプレイ回数カウント

  • 文化祭などで複数PCを使ってゲームを展示する際、各ゲームが何回プレイされたかをある程度簡単に記録することができます
  • ゲームの開始時にDiscordにWebhook送信を行うように実装し、後ほどDiscordの検索機能を使うことでプレイ回数をカウントすることができます

簡易フィードバックシステム

  • Formsなど外部サービスを使わず、Webhookを使うことで簡単なフィードバックシステムを作成することができます
  • ゲーム内でフィードバックシステムを作ることで、バグ報告をする際に簡単にセーブデータも送信することができ、開発者はバグの検証をスムーズに行うことができると考えています

まとめ

今回はOpenSiv3Dを使ってDiscordにメッセージ送信する方法を紹介しました。
Webhookは簡単に使用できるので、ぜひ皆さんも使ってみてください!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?