過去に、Discordの簡易的なBotを作りましたので、成果物として残しています。
Botの内容は、登録したDiscordサーバーに次のAtCoderのコンテスト情報と登録したユーザーのAC数を定期的に報告するというものです。
誰でも使えるように改善したコードにしたつもりですが、至らぬ点があるかもしれません。
- 機能1:AtCoderのホームページからコンテスト情報を得て次のABCとAHCまでの時間を報告してくれます。
- 機能2:kenkooooさんの提供するAtCoderAPIから指定したユーザーのAC数をカウントし今日のAC数と累計AC数を報告してくれます。詳細は→https://github.com/kenkoooo/AtCoderProblems/blob/5737038b54891f61956031809d2e5ee2c1409a19/doc/api.md
- windows10
- Python 3.9.8
- requests 2.28.2
- beautifulsoup4 4.11.2
- discord.py 2.1.1
仕組み上、DiscordBotのTokenや発言させたいチャンネルIDを自分でコードに入力する必要があります。
また、フォルダの参照場所を絶対参照で指定している為、パスを自分の環境に応じたパスに指定する必要があります。
以上のことから、Pythonのコードを編集できる環境が必要です。
ここから先はその方法と詳細を説明しています。
まず、get_info.py,pro_info.py,discordbot.pyをエディタか何かで開き、編集できる状態にしてください。
次に、bot_file内に空のinfo_saveファイルを作成してください。
- get_info.pyではAtCoderのホームページからコンテスト情報が入ったhtmlを取得し、指定した場所にhtmlを保存するという動作をしています。
- パス変数を自分の環境に合わせ変更してください。
- pro_info.pyではAtCoderAPIから対象ユーザーの現在時刻から過去1日分のAC数を取得しています。 その為、起動しない日があるとその日のAC数はカウントされません。
- また、初回起動時は問題提出数が500を超えたユーザーの正確な初回ACカウントができません。 ユーザーネームは途中で追加しても問題ないですが、こちらも問題提出数が500を超えていると初回ACカウントが上手くできません。
- パス変数を自分の環境に合わせ変更してください。
- 自分のDiscordBotのアクセストークンとチャンネルIDに変更してください。
- パス変数を自分の環境に合わせ変更してください。
- htmlや加工したデータを保存するフォルダです。
初期設定が完了したら
get_info.py→pro_info.py→bot_start.bat
の順に手動で起動してください。
わざわざget_info等を手動で起動させる理由はスクレイピングが暴走しサイトに負担をかけないようにする為です。
また、手動更新の為、コンテスト情報が更新される度にget_infoは手動で起動する必要があります。
- 24時間起動してないとダメで、コンテスト情報が更新される度get_infoを起動する必要があるところ。
- 初回起動時に累計提出数が500を超えていると正常に累計AC数がカウントされないこと。
- 相対パスで参照できないところ。