🤖

[Rust] DiscordのBOT作成 < serenity > - ③

2022/09/04に公開

メッセージ送信の書き方

  • 後述のメッセージ操作など高度な動作を行う場合、メッセージのオブジェクトが必要となる
  • 下記のようなオブジェクトを受け取る書き方が必要になってくる
これまでの書き方
if let Err(why) = msg.channel_id.say(&ctx.http, "!hello").await {
    println!("エラー : {:?}", why);
}
メッセージのオブジェクトを受け取る書き方
let m = msg.channel_id.say(&ctx.http, "!hello").await.expect("エラー");

メッセージ送信・応答の種類

メッセージの送信
let m = msg.channel_id.say(&ctx.http, "channel_id.say").await.expect("エラー");


メッセージの送信


リプライを返す
let m = msg.reply(&ctx.http, "reply").await.expect("エラー");


リプライを返す


リプライを返す(色付き)
let m = msg.reply_ping(&ctx.http, "reply_ping").await.expect("エラー");


リプライを返す(色付き)


リプライを返す(メンション付き)
let m = msg.reply_mention(&ctx.http, "reply_mention").await.expect("エラー");


リプライを返す(メンション付き)


リアクションを返す
let m = msg.react(&ctx.http, '\u{1f600}').await.expect("エラー");


リアクションを返す

メッセージの削除

メッセージの削除
m.delete(&ctx.http).await.expect("エラー");

メッセージの編集

  • メッセージのオブジェクトmlet mutで宣言されていること
  • テキスト以外を含むメッセージも送信可能
メッセージの編集
let n = m.edit(&ctx.http, |m| { m.content("edit") } ).await.expect("エラー");


メッセージの編集

高度なメッセージ送信

  • テキスト以外(埋め込み、ボタン等)を含む送信を行う場合はsend_message()を使う
  • 下記はテキストのみを送信する例
  • send_message()内に.content()を使ってテキストをセットする
メッセージコンポーネントの送信
let m = msg.channel_id.send_message( &ctx, |m| { 
        m.content("channel_id.send_message") 
    })
    .await
    .expect("エラー");

Discussion