🥺

クソしょうもないDiscord botをグローバルbotにしてみた話【初学者】

2024/10/10に公開

しばらく前に書いたこちら↓のbotをグローバルbotにしてみました。
https://zenn.dev/miyabitti256/articles/0c82573e0df645

グローバルにするにあたっての変更点

といってもほぼ変えていないのですが、データの保持方法をjsonファイルではなくsqlitesupabase(postgre)に変更しました。
DB操作には、prismaを使用しています。
テーブル設計については、githubのschema.prismaファイルをみてください!(ダメなところがあったら教えてほしいです)

ほぼ一から書き直して、リファクタリングしました。ちゃんとファイル事に処理を分けられたと思います。
また、リンターとフォーマッターにbiomeを採用してみました。正直eslintとprettierとの差は感じられませんでしたが、一つのライブラリで両方できるのは良いかなと思います。

身内鯖で稼働しているbotの、ボイスチャンネルから抜けると「おい」とメッセージを送信するなどの処理を消去しました。(あたりまえ)

使い方

招待URL

https://discord.com/oauth2/authorize?client_id=1293583305794392084&permissions=2415930432&integration_type=0&scope=bot

コマンド

/setschedule

時報を追加します

オプション

  • time: (必須)追加する時報の時刻 HH:MMの形式で指定します 例: 12:00 22:22
  • message: (任意)追加する時報のメッセージ 設定しなかった場合デフォルトのメッセージが送信されます

/scheduleinfo

時報の情報を表示します
/editscheduleや/deletescheduleで使用するidはこのコマンドで確認できます

/editschedule

時報を編集します

オプション

  • id: (必須)編集する時報のID
  • time: (任意)編集する時報の時刻
  • message: (任意)送信するメッセージを変更します
  • channel: (任意)送信するチャンネルIDを変更します
  • isactive: (任意)時報のアクティブ状態を変更します (true, false)

idは/scheduleinfoで確認できます

/deleteschedule

時報を削除します

オプション

  • id: (必須)削除する時報のID

idは/scheduleinfoで確認できます

/omikuji

おみくじを引きます

オプション なし

確率は以下の通りです

  • ぬべ吉: 1% (20000円)
  • 大吉: 8% (1000円)
  • 吉: 12% (500円)
  • 中吉: 16% (300円)
  • 小吉: 22% (200円)
  • 末吉: 22% (100円)
  • 凶: 12% (-50円)
  • 大凶: 5% (-100円)
  • ヌベキチ└(՞ةڼ◔)」: 2% (-300円)

また、ぬべ吉、ヌベキチ└(՞ةڼ◔)」が出た場合はロールが付与されます。※ロールはbotがサーバーに参加した時に作成されます

/coinflip

お金をコイントスで賭けます

オプション

  • bet: (必須)賭けるお金

勝利すると賭け金の2倍のお金がもらえます

1円から賭けられます

最大賭け金は10000円です

おわりに

初めはbunにあるsqliteのapiを使ってみようと思いsqliteにしたのですが、prismaの方が使いやすいなと思い結局primsaになりました。
あと、vps等にデプロイしてみたいけどcronを多用する関係上、メモリがどの程度必要なのかわからないので教えて下さい…

11/19日追記
こちらの記事を参考に試しにFly.ioにデプロイしてみました
https://zenn.dev/botofune/articles/a2ee605f701970

メモリはcronjobが12個セットされている状態で200~300MBなので512MBで足りているようです
しばらく様子を見て、無料で運用ができそうならこの記事に追記するか、新しく記事を投稿しようと思います!

こちらのbotもgithubに貼っています。使い方も同じものがreadmeにあります。
https://github.com/miyabitti256/Jihou-Bot-TS-Replace
よかったら導入して遊んでみてください。

Discussion