Bot/archive

/archive

テキストチャンネルの会話をPDFとして保存するコマンド

こんなことができます

  • テキストチャンネルやスレッドの会話を、Discord 風レイアウトの PDF として保存。/archive channel
  • カテゴリー内のテキストチャンネルを、配下スレッドも含めて一括 PDF 化。/archive category
  • マダミナリンクのアーカイブ投稿から、リンク先の各スレッドを通常メッセージ風 PDF に一括変換。/archive madamina
  • 出力先として非公開スレッドを作ってまとめたり、PDF / YouTube リンクを通常リンクのまま残したりするオプションあり。thread_titlekeep_links

/archive channel

テキストチャンネルまたはスレッドの会話をPDFとして保存します。

基本的な使い方

# 現在のチャンネルをPDF化
/archive channel

# 別のチャンネルやスレッドを指定してPDF化
/archive channel channel: #雑談

# リンクをそのまま残してPDF化
/archive channel channel: #雑談 keep_links: True

パラメータ

  • channel ― 対象のテキストチャンネルまたはスレッド。省略時は実行チャンネル。
  • keep_links(既定 False) ― True にすると、PDF / YouTube リンクを通常リンクとして残します(既定では添付プレビューに置き換えます)。

出力

  • 実行チャンネルにPDFファイルが投稿されます。
  • ファイル名はチャンネル名(スレッドの場合は 親チャンネル › スレッド名.pdf)になります。ファイル名に / : * ? " < > | が含まれる場合は _ に置き換えられます。
  • メッセージの内容・画像・タイムスタンプがDiscord風のレイアウトでPDF化されます。

/archive category

カテゴリ内の全テキストチャンネル(既定でスレッド含む)を一括でPDF化します。

基本的な使い方

/archive category category: カテゴリー名

# スレッドを含めず、テキストチャンネルだけPDF化
/archive category category: カテゴリー名 include_threads: False

パラメータ

  • category(必須) ― 対象カテゴリ。
  • target_thread_parent ― 出力先スレッドの親チャンネル(省略時は実行チャンネル)。
  • thread_title ― 指定すると、出力先として非公開スレッドを作成し、その中にPDFをまとめます。
  • include_threads(既定 True) ― 各テキストチャンネル配下のスレッドも対象に含めます。False にするとテキストチャンネル本体のみが対象になります。
  • keep_links(既定 False) ― True にすると、PDF / YouTube リンクを通常リンクとして残します。

出力

  • カテゴリ内の各テキストチャンネルと、その配下のスレッド(include_threadsTrue のとき)がそれぞれ個別のPDFとして投稿されます。
  • thread_title を指定した場合、非公開スレッドが作られ、その中にすべてのPDFがまとめて投稿されます。
  • 完了後、成功・失敗件数のサマリーが表示されます。
カテゴリ内のチャンネル数が多い場合、処理に時間がかかります。(数によっては数十分)
非公開スレッド(thread_title)の作成に失敗した場合、誤って実行チャンネルに大量のPDFが投稿されるのを防ぐため、フォールバックせずエラーで中断します。

/archive madamina

マダミナリンクのアーカイブ投稿から、リンク先の各スレッドを 通常メッセージ風の PDF に変換して保存します。

基本的な使い方

# 実行チャンネルに各スレッドのPDFを投稿
/archive madamina message_url: https://discord.com/channels/.../...

# 専用の非公開スレッドにまとめて投稿
/archive madamina message_url: ... thread_title: アーカイブ保存

パラメータ

  • message_url(必須) ― マダミナリンク Bot が投稿した index post(スレッド一覧 embed)のメッセージ URL。
  • target_thread_parent ― 出力先スレッドの親チャンネル(省略時は実行チャンネル)。
  • thread_title ― 指定すると、出力先として非公開スレッドを作成し、その中にPDFをまとめます。
  • include_index(既定 False) ― True にすると、index post 本文を出力先の冒頭にも転載します。
  • keep_links(既定 False) ― True にすると、PDF / YouTube リンクを通常リンクとして残します。

出力

  • index post から辿られる各スレッドが、それぞれ個別のPDFとして投稿されます。
  • マダミナリンク Bot の embed は、本来の投稿者のアバター・名前付きの通常メッセージとして展開されます。同じ投稿者の連投はグループ化されて表示されます。
  • アバターは、対象サーバーのメンバーであれば現在のアバター画像、そうでなければ HEAD リクエストで生存確認できた候補、最終的に Discord デフォルトアバター(0〜5)にフォールバックします。

共通の挙動

すべての /archive 系コマンドに共通する挙動です。

完了通知の表示

  • 「○○さんが /archive を利用しました」を含む完了通知は、実行者本人にのみ表示される ephemeral メッセージとして送信されます。他のメンバーには見えません。
  • 長時間処理で Discord interaction(15 分)が失効した場合は、実行チャンネルに通常のメッセージとして完了通知をフォールバック投稿します。

ファイル名のサニタイズ

  • 出力ファイル名に / : * ? " < > | が含まれる場合、安全のため _ に置き換えられます。

スレッドへの自動参加

  • /archive channel でスレッドを直接指定した場合、/archive categoryinclude_threadsTrue(既定)のときに収集される配下スレッド、および /archive madamina で参照される各スレッドについて、Bot が未参加なら自動で参加します。

制限事項

archiveコマンドはサーバー負荷が大きいため、以下の制限があります。

権限

  • 管理者権限が必要です。

利用可能時間

  • 4:00 〜 20:30(JST)に利用できます。20:30 〜 翌 4:00 はコマンドの受付・キュー消化ともにブロックされます。

クールダウン

  • 1 日あたりの回数制限はありません。
  • 各コマンドごとに、サーバー単位で 5 分 のクールダウンがあります(/archive channel / category / madamina はそれぞれ独立してカウント)。
  • 同一サーバーで同じコマンドを 5 分以内に連続実行した場合は、キュー投入前に「クールタイム中」として受付されません。

処理キューと連続実行制御

  • 受付された処理は順番待ちのキューに入り、順番が来ると自動的に処理が開始されます(通知あり)。
  • Bot 全体で 単一ワーカー が archive 系タスクを直列に処理します。同時並行で PDF が生成されることは構造的に発生しません。
  • 非 remote の archive タスク(channel / category / madamina)が連続するときは、ワーカーが各タスクの間に最低 60 秒 の間隔を取り、負荷を平準化します。

ファイルサイズ

  • 画像が多い場合、PDFサイズ軽減のため自動圧縮が行われることがあります。
  • 圧縮後もサイズ上限を超える場合は、エラーとなります。