このプロジェクトは、GeoGuessr のデイリーチャレンジを作成し、そのチャレンジの結果を Discord チャンネルに投稿する Node.js アプリケーションです。プロジェクトは TypeScript で開発され、Discord API とのやり取りには discord.js
を使用しています。
- Node.js
- npm
- Discord bot トークンと Discord チャンネル ID
- GeoGuessr アカウント
-
リポジトリをクローンします:
git clone https://github.com/sh-mug/daily-geoguessr-bot.git cd daily-geoguessr-bot
-
依存関係をインストールします:
npm install
-
.env.example
をプロジェクトのルートディレクトリにコピーして.env
ファイルを作成し、以下の環境変数を設定してください:[email protected] GEOGUESSR_PASSWORD=your-geoguessr-password DISCORD_TOKEN=your-discord-bot-token DISCORD_CHANNEL_ID=your-discord-channel-id
-
TypeScript コードをコンパイルします:
npx tsc
スタンドアロンモードでは、細かい設定なしでスケジュールタスクを自動的に実行します。スタンドアロンモードで動かすには以下を実行してください。
npm run standalone
このモードでは、以下のスケジュールが使用されます:
challenge
は毎日 0 時に実行され、新しい GeoGuessr チャレンジを作成します。highscores
は毎日 23 時に実行され、前日のチャレンジのハイスコアを Discord に投稿します。
サーバーモードでは、Express サーバーが公開するエンドポイントにアクセスし、手動でタスクを実行することが可能です。サーバーモードで動かすには以下を実行してください。
npm start
このモードでは、以下のエンドポイントが利用可能です:
GET /challenge
-challenge
をトリガーします。GET /highscores
-highscores
をトリガーします。
スタンドアロンモードではなく crontab
を使用してタスクをスケジュールしたい場合は、以下のように crontab
エントリを設定できます:
-
crontab エディタを開きます:
crontab -e
-
challenge
とhighscores
をスケジュールするために以下のエントリを追加します:0 0 * * * curl http://localhost:25000/challenge 0 23 * * * curl http://localhost:25000/highscores
チャレンジの設定は、config.json
に設定されたマップをランダムに選択するようになっています。デフォルトでは、以下のマップが設定されています:
また、ゲームモードは曜日によって変わります。
- 月曜日、水曜日、金曜日: ゲームモードは
Move
に設定されます。 - 火曜日、木曜日、土曜日: ゲームモードは
NM
(移動禁止) に設定されます。 - 日曜日: ゲームモードは
NMPZ
(移動、回転、ズーム禁止) に設定されます。
この機能は、曜日に応じて多様なゲームプレイ体験を提供するために実装されています。
src/
geoguessr-api/
login.ts
- GeoGuessr へのログインとクッキーの管理を担当します。challenge.ts
- 新しい GeoGuessr チャレンジの作成を担当します。highscores.ts
- GeoGuessr チャレンジのハイスコアの取得を担当します。
discord/
discordPoster.ts
- Discord へのメッセージ投稿を担当します。
server.ts
- アプリケーションのエントリーポイントです。
GEOGUESSR_EMAIL
: GeoGuessr アカウントのメールアドレス。GEOGUESSR_PASSWORD
: GeoGuessr アカウントのパスワード。DISCORD_TOKEN
: Discord ボットトークン。DISCORD_CHANNEL_ID
: メッセージが投稿される Discord チャンネルの ID。
- ボットが指定された Discord チャンネルにメッセージを投稿するための必要な権限を持っていることを確認してください。
- 認証情報には注意し、
.env
ファイルをバージョン管理にコミットしないようにしてください。 - 初回ログイン時に GeoGuessr のクッキーを
cookie.txt
に保存します。このクッキーは1年間有効です。有効期限が切れたら、手動でcookie.txt
を削除してください。 - チャレンジが結果取得時に未プレイの場合、自動的にプレイが実行されます。これは GeoGuessr の API 仕様に基づくものです。
このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細は LICENSE ファイルを参照してください。
コントリビューション歓迎です!改善点やバグ修正のために、Issue を作成するか、PR を送信してください。
質問やサポートが必要な場合は、GitHub リポジトリで Issue を開いてください。