Railwayで少し動かした感想は、単体のサーバーを監視し続ける今回の規模程度のbotであれば無料枠の範囲内に十分おさまりそう、といったところ。
discord.pyのバージョンを1系からver2.0.1(2022/11/3時点の最新)まで対応しつつ、 サーバーをherokuからRailwayに移行した。というほぼ備忘録の記事です。
v1.7→v2.0.1の移行
大体ドキュメントを見ながらやればわかる気がします。日本語も対応してくださってるようなので。 https://discordpy.readthedocs.io/ja/latest/intro.html
Pythonのバージョンを上げる
discord.py は Python 3.8 以降で動作します。
ローカルで環境構築して試してからアップロードしたいので、 とりあえずPythonのバージョンを3.9に上げました。 別の作業のために3.9にしましたが、3.10でも3.11でもいいと思います。 この辺はPyCharmの操作でやったので割愛。
requimentsの更新
もろもろアップデートした後で、使わないライブラリの削除と
依存関係の更新があるため一回仮想環境作り直しました。
aiohttp==3.8.3 aiosignal==1.2.0 async-timeout==4.0.2 attrs==22.1.0 charset-normalizer==2.1.1 discord.py==2.0.1 frozenlist==1.3.1 idna==3.4 multidict==6.0.2 yarl==1.8.1
これなに?→ サーバーによってはデプロイした時にrequrementsに書いたライブラリをまとめてインストールしてくれます。
コードの更新
ドキュメントを見ながら書き直した。
内容としては
- インテントが必須になった。
- スラッシュコマンドで実装した。
くらい?
今回更新するのは、下記の簡単な機能を持ったbot
- コマンドを使用した人から
notify
ロールを付与するor剥奪する。 - 指定したサーバーのボイスチャットに誰かが参加すると、
テキストチャンネルで事前に作成しておいた
notify
ロールにメンション付きのメッセージを送信する。
全体のコードはGithubにあります。
GitHub - 9610r/discordpy-bot
おそらくRailwayなら自分のサーバーにそのままデプロイすると使えます。おそらく。
Heroku→Railwayへ移行
動かしていたアプリの内容をローカル環境にクローン、
適当にHerokuにアプリを全部消してから、アカウントもクローズした。
なぜかbotが生き残り続けていたので、Discord Developer Portalからbotのトークンを更新して再取得。(セキュリティ的にもこのタイミングで更新したのは良かったかもしれない)
Railway にアクセスしてGitHubアカウントでログイン。
GitHubで新しくリポジトリを作成して、プロジェクトフォルダをデプロイ。 この際のリポジトリはプライベートでも良い。
あとはRailwayからDashboard→Deploy from GitHub repoの順で選択して先ほど選択した RailwayのVariablesから環境変数を設定。
DeploymentsタブからRestartする。
以上。 質問等はTwitterでその日の機嫌がよければ答えます。