Final Fantasy XIV プレイヤー向けの Discord Bot です。
マーケットボード価格確認・キャラクター検索・AIフリートーク・X(Twitter)通知など、FC活動を便利にする機能を提供します。
- アイテム名(日本語・英語)でマーケットボードの最安値を確認
- Universalis からリアルタイムで価格を取得
- 部分一致検索・複数候補の表示に対応
- サーバー名・キャラクター名で Lodestone を検索
- キャラクターページへのリンクを表示
- 自分の FF14 キャラクターを Discord アカウントに紐付け
- 登録後は
!whoamiでいつでも確認可能
- Gemini 2.0 Flash を使った会話機能
- 3 種類のキャラクター(ヤンキー / 丁寧な FF14 プロ / ツンデレ JK)
| コマンド | キャラクター | 特徴 |
|---|---|---|
!ft |
ヤンキー | 威勢がよく荒っぽいが根は悪くない |
!ftn |
丁寧な FF14 プロ | 攻略情報も答えられる、Google 検索付き |
!ftjk |
ツンデレ JK | 口は悪いが根は優しい |
@FF_XIV_JPの最新ツイートを 30 分ごとに自動チェック- 新規ツイートを指定チャンネルへ自動通知
- Playwright による動的スクレイピング(リツイート除外)
- Universalis からアイテム一覧を取得し、ローカル DB を最新化(管理者のみ)
- Python 3.10+
- pip
git clone https://github.com/<your-username>/<your-repo>.git
cd <your-repo>
pip install -r requirements.txt
playwright install chromiumconfig.json をプロジェクトルートに作成してください。
{
"DISCORD_TOKEN": "your_discord_bot_token",
"CHANNEL_ID": 123456789012345678,
"AI_API_KEY": "your_gemini_api_key",
"AI_API_URL": "https://generativelanguage.googleapis.com",
"DATA_FILE_WORLD_JP": "worlds_jp.json",
"DATA_FILE_TWEETS": "sent_tweets.json"
}| キー | 説明 |
|---|---|
DISCORD_TOKEN |
Discord Developer Portal で取得したトークン |
CHANNEL_ID |
X 通知・Bot 起動通知を送るチャンネルの ID |
AI_API_KEY |
Google AI Studio で取得した Gemini API キー |
AI_API_URL |
Gemini API のエンドポイント |
DATA_FILE_WORLD_JP |
JP ワールド名リスト JSON のパス |
DATA_FILE_TWEETS |
送信済みツイート ID を保存する JSON のパス |
worlds_jp.json に日本サーバーのワールド名リストを用意してください。
["Aegis", "Atomos", "Carbuncle", "Garuda", "Gungnir", "Kujata", "Ramuh", "Tonberry", "Typhon", "Unicorn", "Alexander", "Bahamut", "Durandal", "Fenrir", "Ifrit", "Ridill", "Tiamat", "Ultima", "Valefor", "Yojimbo", "Zeromus", "Anima", "Asura", "Belias", "Chocobo", "Hades", "Ixion", "Masamune", "Pandaemonium", "Shinryu", "Titan"]python bot.py.
├── bot.py # メインエントリポイント
├── config.json # 設定ファイル(要作成)
├── worlds_jp.json # JP ワールド名リスト
├── tradable_items.json # アイテム DB(自動生成)
├── sent_tweets.json # 送信済みツイート ID(自動生成)
├── usernames.json # ユーザープロフィール(自動生成)
├── items_search.py # アイテム DB 初期構築スクリプト
└── cogs/
├── __init__.py
├── base_cog.py # 共通基底クラス(Lodestone 検索など)
├── item_price_cog.py # アイテム価格検索
├── item_update_cog.py # アイテム DB 更新
├── search_charac_cog.py# キャラクター検索
├── profile_cog.py # プロフィール登録・確認
├── freetalk_cog.py # AI フリートーク
├── tweet_cog.py # X 通知
├── help_cog.py # ヘルプコマンド
└── test_cog.py # テスト用コマンド
| コマンド | エイリアス | 説明 |
|---|---|---|
!item <名前> |
!i, !価格 |
アイテムの価格を検索 |
!charac <鯖> <名> <姓> |
!search, !検索, !キャラ |
キャラクターを検索 |
!iam <鯖> <名> <姓> |
!register, !登録 |
プロフィールを登録 |
!whoami |
!myprofile, !自分 |
自分のプロフィールを表示 |
!ft <メッセージ> |
!freetalk |
AI と会話(ヤンキー) |
!ftn <メッセージ> |
!freetalk_normal |
AI と会話(丁寧) |
!ftjk <メッセージ> |
!tsundere |
AI と会話(ツンデレ JK) |
!X [件数] |
— | 最新ツイートを表示 |
!ping |
!p |
Bot の応答速度を確認 |
!info |
!botinfo |
Bot の情報を表示 |
!help [コマンド] |
!h, !ヘルプ |
ヘルプを表示 |
管理者専用
| コマンド | 説明 |
|---|---|
!item_update |
アイテム DB を更新 |
!item_reload |
アイテム DB を再読み込み |
初回セットアップ時は items_search.py を実行して tradable_items.json を作成してください。
処理に時間がかかる場合があります。
python items_search.pyその後は Discord 上の !item_update コマンドで差分更新できます。
| ライブラリ | 用途 |
|---|---|
discord.py |
Discord Bot フレームワーク |
google-genai |
Gemini AI API |
playwright |
X (Twitter) スクレイピング |
requests |
HTTP リクエスト |
beautifulsoup4 |
HTML パース |
aiohttp |
非同期 HTTP |
- X のスクレイピングは利用規約の変更により動作しなくなる場合があります
- Gemini API・Discord Token は外部に公開しないでください
config.jsonは必ず.gitignoreに追加してください
MIT License - 詳細は LICENSE を参照してください。