DiscordのEmbed、埋め込み表示は、普通に使うと1Embed1画像が上限だが、工夫すると4枚まで画像を入れられる。
詳細な挙動が見つからなかったので、軽く試したことのメモ。
送り方
D.pyで言えば、通常のChannel.send()のEmbedではなく、WebHook経由で送信し、かつurlパラメータが同じでimageが違うものを連続させると、自動的に合体する。
つまり
embed1 = discord.Embed(url="https://example.com") embed1.set_image(url="https://example.com/image1.png")
と
embed2 = discord.Embed(url="https://example.com") embed2.set_image(url="https://example.com/image2.png")
を連続して1発言に添付して送れば合体する。
画像以外の内容は同URL1件目のものが採用される。
合体用の2件目以降はurlとimageだけ設定すれば良い。
?=のクエリ部分は一般にブラウザから無視されるため、特定のURLをリンク先として設定したく、かつ同じURLだが分割したいEmbedがあるようなときはurl=”https://example.com?embed_group=a”のようにすれば良い。
クエリ部分が違うだけでもDiscord側は別URLとして扱い、Embedが分離する。
URLが同じ物が連続していれば、何件Embedを送ろうと1Embedに合体される。
制限
元々1発言には10Embedが上限との制限がある。
合体Embedは表示が合体するだけで、内部的には別々のEmbedとして扱われる。
つまり4枚Embedが2つ+2枚Embedなどは可能だが、4枚Embedが3つだと12Embedになり、
ERROR: Discord API error 400: {“message”: “Invalid Form Body”, “code”: 50035, “errors”: {“embeds”: {“_errors”: [{“code”: “BASE_TYPE_MAX_LENGTH”, “message”: “Must be 10 or fewer in length.”}]}}}
が返ってくる。
URLが同じ物が連続していれば、何件Embedを送ろうと1Embedに合体される。
このとき5つ目以降のEmbedは全く表示されない。
urlとimage以外の情報が設定されていても完全に無視され、同じURLでの最初のEmbedに設定した情報しか表示されない。
特にエラーレスポンスはなく、問題なく投稿に成功したものとして扱われる。
いずれも内部的には残り、API経由で取得すれば中を確認できる。

画像が小さくなってやや不格好だが、2件目のEmbedを1件目と同URLにして、imageを設定しないとこうなった。やはり2件目以降のEmbed内容は表示されないが、内部的には保持されている。
上手くやればDiscordアプリにだけ見える情報を埋め込んで活用できるかも?
巨大アプリでDBを持ちたくない時に。
画像が大きすぎてイマイチな時にも使えるかも。
別アプリや開発者から見られ得る内容で、秘匿情報ではないことに注意。
将来的な仕様変更で表示されるようになる可能性もある。


コメント