Skip to content

Myxogastria0808/DebtBot

Repository files navigation

DebtBot

bot

  • 使用言語: TypeScript
  • discord.js v14 で作成

backend

  • 使用言語: TypeScript
  • WebAPI: Hono
  • ORM: Prisma
  • RDBMS: MySQL

website

  • Astro で作成

Caution

プログラムの中に、console.log()するべきでない内容をconsole.log()している可能性があります。実際にこのプログラムを使用する際は、console.log()を全て消してください。

概略図

flowchart LR;
    discordBot[Discord Bot] --cloudflare tunnel--- webApi["Web API (Hono)"]
    webApi["Web API (Hono)"] --ORM: Prisma--- db["Database (RDBMS: MySQL)"]
    subgraph bot
    discordBot
    end
    subgraph backend
    webApi
    db
    end
Loading

使用を推奨しているパッケージマネージャー

  • yarn

Setup

windows ユーザー

Caution

以下のコマンドたちを実際に実行して試していないので、ご注意ください。

make-env.cmd
cd bot
yarn
cd ..
cd backend
yarn
#データベースに関する情報を適宜書き換える
yarn migrate

Linux ユーザー

Caution

以下のコマンドたちを実際に実行して試していないので、ご注意ください。

sh make-env.sh
cd bot
yarn
cd ..
cd backend
yarn
#データベースに関する情報を適宜書き換える
yarn migrate

.envファイルの生成

Batchfile

make-env.cmd

Shell

Caution

Linux 環境で実行した際の動作の確認をしていないため正しく動作しない可能性があります。

bash make-env.sh

bot に置く.envファイルの中身

Note

空の文字列(または数字)に適切な情報を入力してください。

Caution

  .envファイルに書く内容は、外部に漏れてはいけない内容なので、必ず.gitignoreファイルに.envを書いてください。

TOKEN = ""
APPLICATIONID = ""
GUILDID = ""
REGISTERURL = ""
DELETEURL = ""
WEBAPIURL = ""

backend に置く.envファイルの中身

Note

空の文字列(または数字)に適切な情報を入力してください。

Note

IPADDRESS と PORT は、適宜変えてください。

Caution

 .envファイルに書く内容は、外部に漏れてはいけない内容を含むので、必ず.gitignoreファイルに.envを書いてください。

IPADDRESS = "127.0.0.1"
PORT = "3000"
DOMAIN = ""
CLIENTID = ""
CLIENTSECRET = ""
GUILDID = ""

#以下はPrismaによって自動生成されるので、省略
# This was inserted by ~

ルートのディレクトリ に置く.envファイルの中身

Note

空の文字列(または数字)に適切な情報を入力してください。

Caution

 .envファイルに書く内容は、外部に漏れてはいけない内容を含むので、必ず.gitignoreファイルに.envを書いてください。

DATABASE_URL=
MYSQL_ROOT_PASSWORD=
MYSQL_DATABASE=
TZ=
CLOUDFLARE_TUNNEL_TOKEN=

DebtBot のテーブル設計

erDiagram
    User ||--|{ Debt : lend
    User ||--|{ Debt : borrow
    User {
        String discordId PK, UK "@id @unique"
        String discordName
        DateTime createdAt "@default(now())"
        DateTime updatedAt "@updatedAt"
        Debt debtLend "@relation('Lend')"
        Debt debtBorrow "@relation('Borrow')"
    }
    Debt {
        Int id PK, UK "@id @default(autoincrement())"
        Int money
        Boolean isPayOff
        DateTime createdAt "@default(now())"
        DateTime updatedAt "@updatedAt"
        String lendId FK "@relation(name: 'Lend', fields: [lendId], references: [discordId])"
        String borrowId FK "@relation(name: 'Borrow', fields: [borrowId], references: [discordId])"
    }
Loading

WebAPI のオリジン

https://127.0.0.1:3000

Prisma Studio のオリジン

https://127.0.0.2:5555

Web API のエンドポイント

/user/register

  • ユーザーの登録を行うエンドポイント

/user/delete

  • 登録されているユーザーの登録を削除するエンドポイント

/debt/create

  • 借金情報を追加するエンドポイント

/debt/pay-off

  • isPayOfffalseからtrueに変えるエンドポイント

/debt/amount

  • 誰にどれくらい借金をしているかについての情報を返すエンドポイント

docker

開発時

docker compose -f dev.docker-compose.yaml up -d
docker compose -f dev.docker-compose.yaml exec -it debtbot-backend npx prisma migrate dev --name init

リリース時

docker compose -f prod.docker-compose.yaml up -d
docker compose -f prod.docker-compose.yaml exec -it debtbot-backend npx prisma migrate dev --name init

参考文献

https://qiita.com/Mijinko/items/df3d2e1f90dbed5a4019

https://uxmilk.jp/23592

https://qiita.com/masayoshi4649/items/46fdb744cb8255f5eb98

https://nova.drifting-clouds.com/blog/mermaid-drawing-with-mdx

https://github.com/sjwall/mdx-mermaid

https://fossengineer.com/selfhosting-cloudflared-tunnel-docker/

https://zenn.dev/hrko/scraps/29df6c7ac02f03

https://fontplus.jp/usage/services/change-on-screen

https://qiita.com/leafeon00000/items/e190cf92af3a487cc749

https://qiita.com/TaikiTkwkbysh/items/1a7d328922e9486a71a6

https://qiita.com/matsuoshi/items/0767198c17d4d0f3c22d