原神プレイヤー向けのDiscord Botです。 以下の3つの機能を1つのBotにまとめています。
コマンド: /score
聖遺物のスクリーンショットを最大5枚送ると、OCRで自動読み取りしてスコアを計算します。
パラメータ
| パラメータ | 説明 |
|---|---|
image1〜image5 |
聖遺物の画像(1枚必須・最大5枚) |
mode |
評価モード(省略時は会心重視) |
評価モード
| モード | 計算式 |
|---|---|
| 会心重視(デフォルト) | 会心率 × 2 + 会心ダメージ |
| 攻撃重視 | 会心スコア + 攻撃力% × 1.5 |
| 元素熟知重視 | 会心スコア + 元素熟知 ÷ 4 |
| 元素チャージ重視 | 会心スコア + チャージ効率 × 1.2 |
| 防御重視 | 会心スコア + 防御力% × 1.5 |
読み取る項目
- 会心率 / 会心ダメージ / 攻撃力% / 防御力% / 元素チャージ効率 / 元素熟知
総合ランク(複数枚の合計スコアで判定)
| ランク | スコア |
|---|---|
| SS | 220以上 |
| S | 200以上 |
| A | 180以上 |
| B | 150以上 |
| C | 150未満 |
結果は部位(花 → 羽 → 時計 → 杯 → 冠)順にソートされ、サムネイルコラージュ画像付きのEmbedで返信されます。
原神wiki(wikiwiki)の「開催中イベント(期間限定)」を3時間ごとに自動監視します。
自動通知の種類
| タイミング | 内容 |
|---|---|
| 新規イベント検出時 | 🎉 イベント名・開催期間をEmbedで通知 |
| 終了3日前 | ⏰ イベント名・終了日時をEmbedで通知(1回のみ) |
| 終了後 | 自動でDBから削除(再通知なし) |
- 取得済みのイベントは
data/events.jsonに保存 - すでに終了したイベントはスクレイピング時点で除外
月次リマインダー(毎日21時に自動送信)
| 送信日 | 内容 |
|---|---|
| 毎月1日 | チケット交換可能 |
| 毎月14日 | 螺旋の切替が近いです |
| 毎月30日 | シアターの切替が近いです |
@everyone 監視
指定チャンネルで @everyone が送信されると自動返信します。
| 条件 | 返信内容 |
|---|---|
| 月曜日 | 週ボスあり。 |
| 開催中イベントがある場合 | イベント名と終了日を全件返信 |
GameWithの原神ページを3時間ごとに監視し、新しいギフトコードを発見したら自動でDiscordに通知します。
- 検出方法: リンク・タグ・正規表現の3段階で抽出
- 重複通知防止: 一度通知したコードは
data/known_codes.jsonに記録し、再通知しない - 通知内容: コード・HoyoVerse公式受け取りリンクを
@here付きで投稿
| コマンド | 説明 |
|---|---|
/score |
聖遺物スコア計算 |
/ping |
動作確認(Pong!と返信) |
- Python 3.10 以上
- Tesseract OCR(日本語パック含む)
- インストール先は
C:\Program Files\Tesseract-OCR\のままにする - インストール時に「Japanese」を追加選択する
- インストール先は
- Discord Bot トークン(Discord Developer Portal で取得)
# リポジトリを取得
git clone https://github.com/NieRTama/GenshinBot.git
cd GenshinBot
# パッケージをインストール
pip install -r requirements.txt.env.example をコピーして .env を作成し、3つの値を入力します。
DISCORD_TOKEN=BotのトークンをここにペーストBotのトークン
# @everyone監視・月次リマインダー・イベント通知を送るチャンネルのID
NOTIFY_CHANNEL_ID=チャンネルIDを数字で
# ギフトコード通知を送るチャンネルのID(NOTIFY_CHANNEL_IDと同じでも可)
GIFTCODE_CHANNEL_ID=チャンネルIDを数字で
チャンネルIDの取得方法 Discordの 設定 → 詳細設定 → 開発者モード をONにしてから、チャンネルを右クリック →「IDをコピー」
- Bot権限:
Send Messages/Embed Links/Attach Files/Read Message History - Privileged Intents: 不要(すべてデフォルトIntentのみで動作)
python bot.pyCtrl+C で停止できます。
GenshinBot/
├── bot.py # 起動エントリーポイント
├── .env # 環境変数(Gitで管理しない)
├── .env.example # 設定ファイルのテンプレート
├── requirements.txt # 依存パッケージ
├── cogs/
│ ├── artifact.py # /score・/ping(聖遺物スコア計算)
│ ├── notify.py # イベント自動通知・月次リマインダー・@everyone監視
│ └── giftcode.py # ギフトコード自動検出
├── utils/
│ ├── artifact_parser.py # OCRテキストから統計値を抽出
│ └── score_calculator.py # モード別スコア計算
└── data/ # 実行時に自動生成
├── events.json # 検出済みイベント(終了後自動削除)
└── known_codes.json # 検出済みギフトコード一覧
- 聖遺物スコア計算は日本語クライアントのスクリーンショットのみ対応
- イベント情報はwikiwikiの更新タイミングに依存する
- ギフトコード検出はGameWithの掲載タイミングに依存する
data/events.jsonを削除すると、現在開催中のイベントがすべて再通知されるdata/known_codes.jsonを削除すると、既存のコードがすべて再通知される