🤖
[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