🤖
[Rust] DiscordのBOT作成 < serenity > - ④
埋め込みメッセージの作成
埋め込みメッセージを送信する
- 下記のような埋め込みメッセージを作成し送信する

埋め込みメッセージ
ソースコード
main.rs
use serenity::utils::Colour; // カラー
use serenity::model::Timestamp; // タイムスタンプ
~~~~~~~~~~中略~~~~~~~~~~
if msg.content == "!embed" {
let m = msg.channel_id.send_message(&ctx.http, |m| {
m.embed(|e| {
e.author(|a| { a.name(&msg.author.name).icon_url(&msg.author.face()) }) // 作成者
.color(Colour(0x8642a4)) // 色
.title("タイトル") // タイトル
.url("https://zenn.dev/") // リンク(タイトル)
.description("説明文") // 説明文
.field("フィールド1", "内容1", false) // フィールド(単体)
.fields(vec![ // フィールド(複数)
("フィールド2", "内容2", true),
("フィールド3", "内容3", true),
("フィールド4", "内容4", true),
("フィールド5", "内容5", false),
("フィールド6", "内容6", true),
("フィールド7", "内容7", true),
])
.thumbnail("https://zenn.dev/images/icon.png") // サムネイル
.image("https://zenn.dev/images/logo-only-dark.png") // イメージ
.footer(|f| f.text("フッター")) // フッター
.timestamp(Timestamp::now()) // タイムスタンプ
})
})
.await
.expect("エラー");
}
ソースコード解説
埋め込みメッセージの構成
- 埋め込みメッセージの送信には
.send_message()を使う -
.send_message()内に.embed()を使って埋め込みをセットする - 埋め込みメッセージの内容は
.embed()内にパーツを追加する形で作成する
埋め込みメッセージの構成
let m = msg.channel_id.send_message(&ctx.http, |m| {
m.embed(|e| {
// ここに埋め込みメッセージのパーツを追加していく
})
})
.await
.expect("エラー");
作成者
-
.author()- 埋め込みメッセージの作成者の表示を設定する
- 埋め込みメッセージの作成者の表示を設定する
-
.name()- 作成者の名前を設定する
-
msg.author.nameはメッセージ送信者の名前
-
.icon_url()- 作成者のアイコンのURLを設定する
-
msg.author.face()はメッセージ送信者のアイコンを取得する
作成者
.author(|a| { a.name(&msg.author.name).icon_url(&msg.author.face()) })

作成者
色
-
.color()- 埋め込み左側の色を設定する(デフォルトは黒)
- 色は
Colour()で指定する
-
Colour()- 色を設定するためのタプル型
- 色は16進数で指定する
- 使用には
use serenity::utils::Colourが必要
色
use serenity::utils::Colour;
.color(Colour(0xffffff)) // 白色に設定

白色
タイトル・リンク
-
.title()- 埋め込みのタイトルを設定する
- 埋め込みのタイトルを設定する
-
.url()- 埋め込みのタイトルをクリックしたときのリンクのURLを設定する
タイトル(リンク無し)
.title("<<ココにタイトル>>")

タイトル(リンク無し)
- リンクを付けるとタイトルの文字が青くなる
タイトル(リンク有り)
.title("<<ココにタイトル>>")
.url("https://zenn.dev/")

タイトル(リンク有り)
説明文
-
.description()- 埋め込みの説明文を設定する
説明文
.description("<<ココに説明文>>")

説明文
フィールド
-
.field()- 埋め込みの内の項目を追加・設定する
- 第三引数は項目の並びを設定する
-
trueで横に並べることを許可 -
falseで横に並べることを禁止(独立させる)
-
-
.fields()-
.field()を一括で追加・設定できるようにしたもの
-
フィールドの例1
.field("フィールド1", "内容1", true)
.field("フィールド2", "内容2", true)
.field("フィールド3", "内容3", false)
.field("フィールド4", "内容4", true)
.field("フィールド5", "内容5", false)
.field("フィールド6", "内容6", true)
.field("フィールド7", "内容7", true)

フィールドの例1
フィールドの例2
.fields(vec![
("フィールド1", "内容1", false),
("フィールド2", "内容2", false),
("フィールド3", "内容3", false),
("フィールド4", "内容4", false),
("フィールド5", "内容5", false),
])

フィールドの例2
サムネイル・イメージ
-
.thumbnail()- サムネイル(右上の画像)のURLを設定する
- サムネイル(右上の画像)のURLを設定する
-
.image()- 画像(下中央の画像)のURLを設定する
サムネイル・画像
.thumbnail("https://zenn.dev/images/icon.png")
.image("https://zenn.dev/images/logo-only-dark.png")

サムネイル・画像
フッター
-
.footer()- フッターを設定する
- フッターを設定する
-
.text()- フッターのテキストを設定する
フィールド
.footer(|f| f.text("<<ココにフッター>>"))

フッター
タイムスタンプ
- タイムスタンプの有無を設定する
-
Timestamp::now()で現在時刻を取得する - 使用には
use serenity::model::Timestampが必要
フィールド
use serenity::model::Timestamp;
.timestamp(Timestamp::now())
ローカルの画像ファイルを使う
-
画像やサムネイル、作成者のアイコンにローカルの画像を使用することも可能
-
ローカルの画像を使用する場合は
attachment:// + ファイル名とし、.embed()の後に.add_file()で画像ファイルのパスを追加する
サムネイル・画像(ローカル)
m.embed(|e| {
e.author(|a| { a.name("作成者".to_string()).icon_url("attachment://icon.png") }) // attachment:// + ファイル名
.thumbnail("attachment://thumbnail.png") //
.image("attachment://image.png") //
~~~~~~~~~~中略~~~~~~~~~~
})
.add_file("./icon.png") // 画像ファイルのパス
.add_file("./thumbnail.png") //
.add_file("./image.png") //

ローカルの画像ファイルを使う
Discussion