Discord Bot Portal JP
逆引き 読了目安 約40分 更新 2026.07.03

逆引き:メッセージ・リアクション・添付

メッセージ送信、削除、メンション、リアクションロール、添付ファイル、画像、Embed処理の詰まりどころを整理します。

この記事で分かること

  • send/edit/replyの確認順
  • Allowed Mentionsで通知を制御する
  • 削除/一括削除の権限と制限
  • 添付・Embed・画像出力の扱い
  • reaction add/removeの到達確認
  • cache/partial/raw eventの使い分け

コミュニティの相談ログを匿名化・一般化し、メッセージ・リアクション・添付まわりの実装相談を整理した逆引きです。

メッセージ送信・削除・メンション

send/edit/reply

send、edit、reply、Webhook送信が失敗する時の確認順です。

送信先を確認する

対象チャンネル、スレッド、Webhook、DMのどこへ送る処理なのかを先に分けます。チャンネルIDやmessage IDは公開記事に出さず、ローカルログだけで確認します。

権限と到達ログ

Send Messages、View Channel、Read Message History、Embed Links、Attach Filesなど、必要権限は操作ごとに違います。handler先頭、送信前、送信後、例外を分けて記録します。

確認ポイント

  • 対象チャンネルを限定する
  • Botのチャンネル権限を見る
  • 返信対象messageの存在を確認する
  • 例外全文を管理ログに残す

参考(公式ドキュメント)

メンションとAllowed Mentions

意図しないeveryone/role通知を避ける確認です。

通知させるかを分ける

画面にユーザー名やロール名を表示したい場合と、実際に通知を飛ばしたい場合は別です。外部入力から作った文章ではAllowed Mentionsを明示します。

外部入力をそのまま使わない

利用者が入力した文字列をそのまま送信すると、@everyone、ロールメンション、ユーザーメンションが意図せず有効になることがあります。表示用のescapeと通知用のmentionを分けます。

確認ポイント

  • Allowed Mentionsを設定する
  • everyone/role mentionを抑制する
  • 表示用文字列をescapeする

参考(公式ドキュメント)

削除と一括削除

deleteやbulk deleteを権限、対象、制限で切り分けます。

削除できる条件を見る

削除には対象チャンネルの権限、Manage Messages、対象メッセージの状態が関係します。Bot自身の投稿だけを消すのか、利用者の投稿も扱うのかを分けます。

大量削除を雑にしない

一括削除には制限があり、古いメッセージや広すぎる範囲をまとめて消す設計は事故につながります。条件、件数、実行者、失敗件数を管理ログに残します。

確認ポイント

  • 削除対象の条件を明示する
  • チャンネルを限定する
  • 実行前に件数を確認する
  • 削除失敗を握りつぶさない

参考(公式ドキュメント)

添付・Embed・画像出力

ファイル、Embed URL、生成画像を公開できる文章へ戻す確認です。

表示方式を分ける

matplotlibなどで生成したグラフを送る場合、Discordへファイル添付するのか、外部URLをEmbedに載せるのか、本文だけを返すのかで必要権限と安全確認が変わります。

画像を記事へ入れない

スクリーンショットや添付ファイルにはToken、メール、サーバー名、外部URLが写ることがあります。websiteには画像ファイルや添付URLを入れず、ローカルで読み取った公開可能な確認手順だけを本文に戻します。

確認ポイント

  • Attach Files / Embed Links権限を見る
  • ファイルサイズを確認する
  • 画像内の秘密情報を確認する
  • 公開本文には一般化した手順を書く

参考(公式ドキュメント)

リアクションロール・ページング

reaction add/remove

reaction add/removeが届かない、対象emojiが合わない時の確認です。

イベント到達を見る

まずreaction add/removeのhandler先頭に到達しているかを確認します。対象message、対象emoji、押したユーザー、Bot自身の反応除外を分けます。

emoji比較を分ける

Unicode絵文字、カスタム絵文字、アニメーション絵文字では比較する値が違います。name、id、文字列のどれで判定しているかをログで確認します。

確認ポイント

  • Bot自身を除外する
  • 対象messageを限定する
  • emoji name/idを確認する
  • member/user取得を分ける

参考(公式ドキュメント)

cache/partial/raw event

古いメッセージや起動前メッセージのリアクションを扱う確認です。

キャッシュ前提を疑う

ライブラリは起動後に見たmessageだけをcacheしている場合があります。過去メッセージや固定メッセージを扱うならfetch、partial、raw eventのどれで補うかを決めます。

ライブラリごとの差を見る

discord.pyならraw reaction系イベント、discord.jsならpartialsやfetchの前提を確認します。過去ログのコードが現在のバージョンで同じとは限りません。

確認ポイント

  • 起動後のmessageか確認する
  • fetch対象を限定する
  • partials/raw eventの設定を見る
  • ライブラリの版を確認する

参考(公式ドキュメント)

リアクションロール

リアクションでロール付与/解除する機能の安全確認です。

ロール階層を見る

Botロールが対象ロールより下にあると付与できません。Manage Roles、対象ロール、対象メンバー、Botロール位置を分けて確認します。

対象を固定する

どのメッセージのどのemojiでどのロールを付けるかを設定値として持ち、広いチャンネル全体を監視対象にしないようにします。成功/失敗は管理ログに残します。

確認ポイント

  • Manage Rolesを確認する
  • Botロール位置を見る
  • 対象message/emoji/roleを固定する
  • 失敗時に理由を記録する

参考(公式ドキュメント)

ページングUI

リアクションでページ送りするUIを現在の設計へ見直します。

状態と期限を持つ

リアクションによる前へ/次へは、誰が操作できるか、何ページ目か、timeout後どうするかを決めないと壊れやすくなります。message editの失敗も管理ログに残します。

Button/Selectへの移行を検討する

ページ送りや選択UIは、現在はButtonやSelectで実装した方が状態管理しやすい場面があります。過去ログのリアクションUIをそのまま増やさず、Interactionへの移行可否を確認します。

確認ポイント

  • 操作できるユーザーを限定する
  • timeout後の表示を決める
  • 編集失敗を記録する
  • Button/Selectで代替できるか見る

参考(公式ドキュメント)

添付ファイル・画像・Embed処理

ファイル添付とattachment://

ローカルファイルや生成画像をDiscordへ添付する時の確認です。

multipart送信を見る

ファイルを送る場合は、通常のcontentだけでなく、files、payload_json、attachmentsの扱いを確認します。ライブラリではFile/AttachmentBuilderなどの専用APIを使います。

Embed内画像を分ける

Embedにローカル画像を表示したい場合は、ファイルを添付し、Embed側ではattachment://filenameの形式を使う設計があります。ファイル名、拡張子、サイズ、Attach Files権限を確認します。

確認ポイント

  • Attach Files権限を見る
  • ファイル名を固定する
  • attachment://を使うか決める
  • サイズ制限を確認する

参考(公式ドキュメント)

Embed画像と外部URL

外部URL、添付URL、Embed画像表示を混同しない確認です。

URLの公開範囲を見る

Embed画像に外部URLを指定する場合、そのURLがDiscordから取得できる必要があります。ログインが必要なURL、期限付きURL、削除済み添付URLは表示できないことがあります。

通知と本文を分ける

Embedの中身、message content、allowed mentions、ファイル添付は別の要素です。画像だけ届かない、本文だけ届かない、Embedだけ表示されない状態を分けます。

確認ポイント

  • 外部URLが公開取得できるか
  • Embed Links権限を見る
  • 本文とEmbedを別々にログ化する

参考(公式ドキュメント)

画像生成・グラフ送信

matplotlibやcanvasで作った画像を送る時の確認です。

生成と送信を分ける

画像生成に失敗しているのか、保存先が違うのか、Discordへの添付で失敗しているのかを分けます。一時ファイル、Buffer/stream、ファイルパスのどれで送るかを決めます。

片付ける

一時ファイルには個人情報や集計結果が残る可能性があります。送信後に削除するか、メモリ上で扱えるならファイル保存を避けます。

確認ポイント

  • 生成後に存在確認する
  • ファイルサイズを見る
  • 送信後のcleanupを入れる
  • 画像内の秘密情報を確認する

参考(公式ドキュメント)

画像付きログの文章化

スクリーンショットや添付をwebsiteへ直接入れないための確認です。

ローカルで読む

画像や添付はローカルで内容を確認し、Token、メール、ユーザー名、サーバー名、外部URL、チャンネルIDが写っていないかを見ます。

公開本文へ戻す

画像そのもの、添付URL、ジャンプURLを載せず、読み取れた困りごとを一般的な確認手順に変換します。画像だけで判断できないものは保留し、記事を増やす根拠にしません。

確認ポイント

  • 画像ファイルをwebsiteに追加しない
  • 添付URLを公開しない
  • 個別発言を引用しない
  • 公式仕様で確認する

一次情報(公式ドキュメント)

  • Discord Developer Documentation: Message Resource
  • Discord Developer Documentation: Permissions
  • Discord Developer Documentation: Gateway Events
  • discord.py ドキュメント
  • discord.js ガイド
  • Discord Developer Documentation: Uploading Files
  • discord.js embeds guide