前置説明
せっかくブログを立ち上げたので、ここにこれまで書いた雑多な簡単なコードを置いてみようと思います。どれも簡単なものなので、Githubでそれぞれにリポジトリを作るつもりはありません。 今回はまず「哔哩哔哩漫画のサインインと特典券交換」を更新します。今後時間があればまた別のものも書くかもしれません。
動機
哔哩哔哩漫画は毎日サインインすると一定のポイントがもらえ、そのポイントを漫画購入に使える特典券と交換できます。 ただし、最もお得な100ポイント分の特典券は毎日0時に一定数しか発行されません。
そこで私はNoneBot2とbilibili-apiをベースに、SocialSisterYi/bilibili-API-collectを参考にして2つのプラグインを作成しました。それぞれ、毎日のサインインによるポイント獲得と、毎日0時の特典券の先着交換に使っています。現在のところ非常に安定して動作しています。
NoneBot2は比較的簡単に使えるので、私もその上でいくつかプラグインを開発しました。時間があればそれらも共有したいと思います。
実装した効果は以下の通りです:

成功率が高すぎてプッシュ通知はまったく必要ないようです
念のためプッシュ通知はしておきます
コード
get_sessdata.py
ログイン情報の取得と更新に使用します
ここでcookie_pathは以下の5つのキーを含むjsonファイルです:
- sessdata
- buvid3
- bili_jct
- actimevalue
- dedeuserid
ブラウザのInPrivateモードでログインした後、Cookieから取得できます。詳細はbilibili-apiドキュメントを参照してください。
checkin.py
シンプルなNoneBot2プラグインです。QQボットに/漫画签到を送信することで手動実行できるほか、毎日指定した時刻に自動実行され、結果をフィードバックします。
ここでは汎用的な形には開発しておらず、すべてのQQボットの友達が使えるようにはしていません。そのため、QQボットの管理者にのみ送信するようにしています。
もちろん、使いたい場合は直接cronで定期実行するように変更し、別の方法でメッセージをプッシュするか、あるいはプッシュしないことも検討してください。
exchange.py
毎日0時に交換を行うためのNoneBot2プラグインです。実際には23時59分に実行を開始して前処理を行い、その後システム時刻を監視し、0時ちょうどに交換を実行します。そのため、システム時刻が正確であることを確認し、定期的に時刻同期を行ってください:
NoneBot2のロジックは上記のサインインプラグインと似ています。exchange_func関数を参照して交換ロジックを確認してください。コードは以下の通りです: