🚀
ShuttleでDiscord Bot Serenity+PostgreSQL
TL;DR
- 主機能の詳しい解説はしないです 参考↓
- 拡張機能としてユーザーごとに返答するURLを変える機能
- そのためにDBでモードを保存できるようにした
ShuttleでDBを使う方法
大体は↑に従ってください。
- Cargo.tomlに依存を追加
- データベーススキーマを作る
- データベース操作関数を作る
- main関数の引数を追加
という感じです。
挿入について
INSERTやUPDATEのようなライト(Write)処理は、トランザクションブロックを作りましょう。
トランザクションブロックを作ると、なんらかDB操作で失敗した場合、BEGINした直前までDBの状態をロールバックしてくれます。
デプロイ時の設定について
なにもしなくていいです。
ない場合と同じようにcargo shuttle deploy
で問題ないです。
動いている所
Repo
苦戦した所
- sqlxのクエリの使い方思い出すのに苦戦した。(作ってる途中でマクロに気づいたが、面倒になってしなかった)
- トランザクション作るの忘れてログと2日たたかってた
- トランザクションの場合渡すのはDerefするといい感じ(ふわふわ理解)
- ログだいじ
- これはリサーチ不足だったのですが、ShuttleはSerenityのバージョンをデフォルトで現在
0.11.*
をサポートしているので、0.12
にSerenityのバージョンをあげると破壊的変更に巻き込まれて時間が溶けます
参考にした記事
sqlx+PostgresSQLの挿入でのトランザクションはここを参考にした
微妙なところ
簡単なコマンドパースしか考えてないから脳死で正規表現組んでるのclapとかを使うべきなのかなとか
SerenityにはGroupという概念があり関数名そのままプレフィックス+コマンド名でコマンド登録できたりするんだけどShuttleのサンプル的にそのGroupを使っていない(なぜかは知らん)
変更ログ(2024年1月11日時点)
変更ログを追加
参考記事とか微妙な所を追加
Discussion