これはDiscordでのチャット投稿をトリガーに、AIが文脈を補完して公式告知風のHTML記事を生成し、専用のWebサイトおよび外部サイト(RSS)へ自動配信するシステムです。
概要
開発の背景: 運営の負担を減らしつつ、Discord内の速報性を公式サイトの「公式感」や「物語性」に昇華させることを目的としています。
コア機能: Discordメッセージのリアルタイム監視と過去ログ取得。
- AIを活用した、物語性のある告知記事(HTML)への自動変換。
- Node.js/Expressによる専用ニュースサイトの構築と、フィルタリング機能。
- RSSフィード生成および、外部WordPress等への動的埋め込み機能。
システムアーキテクチャ
本システムは、情報の「抽出・変換」を担うPythonボットと、「蓄積・表示」を担うNode.jsサーバーの2層構造で構成されています。
使用技術スタック
| カテゴリ | 技術 / ライブラリ |
| 言語 | Python 3.10, Node.js (JavaScript) |
| Discord Bot | discord.py (aiohttp, asyncio) |
| AI / NLP | OpenAI API (GPT-5-nano) / Ollama Gemma12b |
| Backend | Express.js |
| Frontend | EJS (Embedded JavaScript templates), CSS3 |
| Data Storage | JSON-based Local Storage (Vertical File System) |
技術的特徴と工夫点
① AIによる「物語性」の付与
単なる要約ではなく、シニアライターの役割をプロンプトで定義し、Discordの断片的な情報を「ゆとりのある配置」と「丁寧な言葉遣い」の公式記事へと膨らませています。
- 自動クリーンアップ: AIが生成したコードブロック(“`html等)を自動除去し、即座にWeb表示可能な純粋なHTMLを抽出するロジックを実装しています。
② 柔軟なコンテンツ管理
- チャンネル固有の処理: 特定のチャンネルIDからの投稿に対しては、投稿者名を自動的に固定するなど、ブランド管理機能を備えています。
- 重複防止:
processed_messages.jsonを用いたメッセージID管理により、再起動時の重複投稿を防止しています。
③ ユーザー体験を重視したWebフロントエンド
- 動的フィルタリング: 投稿者別、年月別での絞り込み検索機能を搭載。
- RSS統合: 外部サイト(WordPress等)のRSSと、本システムのRSSをクライアントサイドで統合して表示する組み込み用JSを提供し、プラットフォームを跨いだ情報集約を実現しています。
4. 各コンポーネントの役割
🤖 Bot側 (bot.py)
- Discordの
on_readyで過去10件の未処理メッセージを走査。 - 画像アタッチメントのURLを抽出し、AIへのコンテキストとして提供。
- API Secretを用いた認証付きPOSTリクエストによるWebサーバーへのデータ転送。
🌐 Server側 (server.js, views/*.ejs)
- チャンネルごとに独立したJSONファイルでデータを管理し、高速な読み込みを実現。
formatDate関数による、テンプレートを跨いだ統一的な日付表示。- RSS 2.0 規格に準拠したフィード出力機能。
📰 Embed側 (rss_embed.html)
Promise.allSettledを利用し、複数のRSSソース(Discord発告知 & WordPress告知)を非同期に取得。- 取得したデータを日付順にマージして再ソートし、シームレスなニュースフィードとしてレンダリング。
5. 今後の展望
- 画像の自動最適化: DiscordのURLだけでなく、サーバー側で画像をキャッシュ・リサイズする機能。
- 多言語展開: AIを活用した、記事の多言語同時生成。


