├── .dockerignore ├── .env.example ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml └── workflows │ ├── build-push.yml │ ├── pr-build.yml │ └── prettier.yml ├── .gitignore ├── .vscode └── settings.json ├── CODE_OF_CONDUCT.md ├── Dockerfile ├── LICENSE ├── README.md ├── SECURITY.md ├── biome.json ├── docker-compose.yaml ├── package.json ├── pnpm-lock.yaml ├── src ├── buttons │ ├── cooldowns │ │ ├── commandBy.ts │ │ ├── commandCooldown.ts │ │ ├── commandType.ts │ │ ├── cooldownButtons.ts │ │ └── cooldownCommands.ts │ ├── customQuestions │ │ ├── wycustom_accept.ts │ │ ├── wycustom_add.ts │ │ ├── wycustom_decline.ts │ │ └── wycustom_remove.ts │ ├── dailyTasks │ │ ├── autoPin.ts │ │ ├── dailyChannel.ts │ │ ├── dailyDeleteRole.ts │ │ ├── dailyInterval.ts │ │ ├── dailyMsg.ts │ │ ├── dailyQuestionType.ts │ │ ├── dailyRole.ts │ │ ├── dailyThread.ts │ │ ├── dailyTimezone.ts │ │ ├── dailyType.ts │ │ └── daySelection.ts │ ├── gamesActivities │ │ ├── dare.ts │ │ ├── higher.ts │ │ ├── higherlower.ts │ │ ├── lower.ts │ │ ├── neverhaveiever.ts │ │ ├── random.ts │ │ ├── topic.ts │ │ ├── truth.ts │ │ ├── wouldyourather.ts │ │ └── wwyd.ts │ ├── index.ts │ ├── miscellaneous │ │ ├── privacy.ts │ │ ├── result.ts │ │ ├── viewCommands.ts │ │ └── viewHelp.ts │ ├── pagination │ │ ├── paginateFirst.ts │ │ ├── paginateLast.ts │ │ ├── paginateNext.ts │ │ ├── paginatePrev.ts │ │ └── paginateUser.ts │ ├── premium │ │ ├── webhookAvatar.ts │ │ └── webhookName.ts │ ├── questionTypes │ │ ├── customTypes.ts │ │ └── setPerChannel.ts │ ├── replayFunctions │ │ ├── replayBy.ts │ │ ├── replayChannels.ts │ │ ├── replayCooldown.ts │ │ ├── replayDelete.ts │ │ ├── replayDeleteChannels.ts │ │ └── replayType.ts │ ├── selectionMenus │ │ ├── selectMenuChannel.ts │ │ ├── selectMenuCustomTypes.ts │ │ ├── selectMenuDays.ts │ │ ├── selectMenuPerChannel.ts │ │ ├── selectMenuQuestionType.ts │ │ ├── selectMenuReplay.ts │ │ ├── selectMenuRole.ts │ │ ├── selectMenuType.ts │ │ ├── selectMenuWelcome.ts │ │ ├── selectMenuWelcomeEmbed.ts │ │ └── selectMenuWelcomeType.ts │ ├── utilityInformation │ │ ├── classicMode.ts │ │ └── voting.ts │ └── welcomeMessages │ │ ├── welcome.ts │ │ ├── welcomeChannel.ts │ │ ├── welcomeEmbed │ │ ├── welcomeEmbed.ts │ │ ├── welcomeEmbedAuthorName.ts │ │ ├── welcomeEmbedAuthorURL.ts │ │ ├── welcomeEmbedColor.ts │ │ ├── welcomeEmbedContent.ts │ │ ├── welcomeEmbedDescription.ts │ │ ├── welcomeEmbedFooterText.ts │ │ ├── welcomeEmbedFooterURL.ts │ │ ├── welcomeEmbedImage.ts │ │ ├── welcomeEmbedThumbnail.ts │ │ ├── welcomeEmbedTimestamp.ts │ │ ├── welcomeEmbedTitle.ts │ │ └── welcomeEmbedToggle.ts │ │ ├── welcomeEmbedEdit.ts │ │ ├── welcomeMessage.ts │ │ ├── welcomePing.ts │ │ ├── welcomeTest.ts │ │ └── welcomeType.ts ├── cluster.ts ├── commands │ ├── game │ │ ├── dare.ts │ │ ├── higherlower.ts │ │ ├── leaderboard.ts │ │ ├── neverhaveiever.ts │ │ ├── random.ts │ │ ├── topic.ts │ │ ├── truth.ts │ │ ├── whatwouldyoudo.ts │ │ └── wouldyourather.ts │ ├── index.ts │ ├── settings │ │ ├── custom.ts │ │ ├── language.ts │ │ ├── privacy.ts │ │ ├── settings-subcommands │ │ │ ├── cooldowns.ts │ │ │ ├── qotd.ts │ │ │ ├── questionType.ts │ │ │ ├── utility.ts │ │ │ └── welcomes.ts │ │ ├── settings.ts │ │ └── type.ts │ └── utility │ │ ├── guide.ts │ │ ├── help.ts │ │ ├── info.ts │ │ ├── ping.ts │ │ ├── placeholders.ts │ │ ├── support.ts │ │ ├── sync.ts │ │ └── vote.ts ├── config.ts ├── data │ ├── Fonts │ │ ├── OpenSans-Bold.ttf │ │ ├── Poppins-Black.ttf │ │ ├── Poppins-Bold.ttf │ │ ├── Poppins-Medium.ttf │ │ └── Poppins-SemiBold.ttf │ ├── Images │ │ ├── WouldYouRather.psd │ │ ├── rather-de.png │ │ ├── rather-en.png │ │ ├── rather-es.png │ │ └── template.png │ ├── dare-de_DE.json │ ├── dare-en_EN.json │ ├── dare-es_ES.json │ ├── dare-fr_FR.json │ ├── dare-it_IT.json │ ├── hl-en_EN.json │ ├── nhie-de_DE.json │ ├── nhie-en_EN.json │ ├── nhie-es_ES.json │ ├── nhie-fr_FR.json │ ├── nhie-it_IT.json │ ├── rather-de_DE.json │ ├── rather-en_EN.json │ ├── rather-es_ES.json │ ├── rather-fr_FR.json │ ├── rather-it_IT.json │ ├── truth-de_DE.json │ ├── truth-en_EN.json │ ├── truth-es_ES.json │ ├── truth-fr_FR.json │ ├── truth-it_IT.json │ ├── wwyd-de_DE.json │ ├── wwyd-en_EN.json │ ├── wwyd-es_ES.json │ ├── wwyd-fr_FR.json │ └── wwyd-it_IT.json ├── events │ ├── entitlementCreate.ts │ ├── entitlementDelete.ts │ ├── entitlementUpdate.ts │ ├── guildCreate.ts │ ├── guildDelete.ts │ ├── guildMemberAdd.ts │ ├── interactionCreate.ts │ ├── messageCreate.ts │ ├── ready.ts │ ├── shardDeath.ts │ ├── shardReady.ts │ ├── shardReconnecting.ts │ └── shardResume.ts ├── global.d.ts ├── index.ts ├── interfaces │ ├── command.ts │ ├── event.ts │ ├── index.ts │ └── interaction.ts ├── languages │ ├── de_DE.json │ ├── en_EN.json │ ├── es_ES.json │ ├── fr_FR.json │ └── it_IT.json └── util │ ├── Classes │ ├── generateHOR.ts │ └── generateLOSE.ts │ ├── Defaults │ └── Embeds │ │ └── Games │ │ ├── DefaultGameEmbed.ts │ │ └── HigherLowerEmbed.ts │ ├── Error │ └── QueueError.ts │ ├── Functions │ ├── fileToCollection.ts │ ├── jsonImport.ts │ └── number.ts │ ├── Models │ ├── ShardClusterStore.ts │ ├── guildModel.ts │ ├── higherlowerModel.ts │ ├── questionModel.ts │ ├── usedModel.ts │ ├── userModel.ts │ ├── voteModel.ts │ ├── webhookCache.ts │ └── zod │ │ └── welcomeEmbed.ts │ ├── cooldownHandler.ts │ ├── dailyMessage.ts │ ├── databaseHandler.ts │ ├── expressServer.ts │ ├── generateEither.ts │ ├── generateText.ts │ ├── keepAlive.ts │ ├── modalHandler.ts │ ├── pagination.ts │ ├── premiumHandler.ts │ ├── shuffle.ts │ ├── stripeHandler.ts │ ├── translationHandler.ts │ ├── votingHandler.ts │ ├── webhookHandler.ts │ └── wouldYou.ts └── tsconfig.json /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | .dockerignore 3 | node_modules 4 | npm-debug.log 5 | README.md 6 | .git 7 | .env 8 | dist 9 | docker-compose.yaml -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # Bot Config 2 | 3 | TEST_GUILD_ID= 4 | STATUS=DEVELOPMENT 5 | BOTSTATUS=Would You? 6 | PRODUCTION=true 7 | 8 | # Tokens 9 | 10 | TOKEN= 11 | ENCRYPTION_KEY= 12 | TOPGG_TOKEN= 13 | TOPGG_WEBHOOK= 14 | 15 | # Error Reporting 16 | 17 | SENTRY_DSN= 18 | 19 | # Database 20 | 21 | MONGO_URI= 22 | 23 | # Webhooks 24 | 25 | LOG_PRIVATE= 26 | LOG_GUILDS= 27 | 28 | # Redis 29 | 30 | REDIS_URL= 31 | REDIS_TOKEN= 32 | 33 | # Cloudflare 34 | 35 | CLOUDFLARE_ACCOUNT_ID="" 36 | CLOUDFLARE_ACCESS_KEY_ID="" 37 | CLOUDFLARE_SECRET_ACCESS_KEY="" 38 | 39 | # RabbitMQ 40 | RABBITMQ_DEFAULT_USER= 41 | RABBITMQ_DEFAULT_PASS= 42 | AMQP_HOST= -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [mezotv] 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Issue Description 2 | 3 | ## Bug Report: 4 | 5 | # Description: 6 | 7 | Report a problem or error in the software. 8 | 9 | # Expected Behavior: 10 | 11 | Describe what should happen. 12 | 13 | # Actual Behavior: 14 | 15 | Explain what is happening instead. 16 | 17 | # Steps to Reproduce: 18 | 19 | Provide steps to reproduce the issue. 20 | 21 | # Screenshots: 22 | 23 | Attach screenshots if applicable. 24 | 25 | # Related Issues/PRs: 26 | 27 | List any related issues or pull requests. 28 | 29 | ## Feature Request: 30 | 31 | # Description: 32 | 33 | Propose a new feature or enhancement to the software. 34 | 35 | # Expected Behavior: 36 | 37 | Describe how the new feature should work. 38 | 39 | # Rationale: 40 | 41 | Explain why this feature would be beneficial. 42 | 43 | # Related Issues/PRs: 44 | 45 | Link to related issues or pull requests. 46 | 47 | ## Documentation Issue: 48 | 49 | # Description: 50 | 51 | Report an issue with the documentation. 52 | 53 | # Type: 54 | 55 | Specify if it's a documentation error, missing documentation, or unclear documentation. 56 | 57 | # Page/Section: 58 | 59 | Mention the affected documentation page or section. 60 | 61 | # Suggested Improvement: 62 | 63 | Provide suggestions for improvement. 64 | 65 | ## Question / Support Request: 66 | 67 | # Description: 68 | 69 | Ask a question or request help with using the software. 70 | 71 | # Context: 72 | 73 | Provide context or details about the problem you're facing. 74 | 75 | # Expected Answer: 76 | 77 | Describe what you're expecting in response. 78 | 79 | # Additional Information: 80 | 81 | Include any relevant information. 82 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | **Link to the issue (if applicable)**: 4 | Provide a link to the related issue (e.g., #[issue_number]). 5 | 6 | **Description**: 7 | Explain the purpose and context of this PR. 8 | 9 | ## Changes Made 10 | 11 | List the changes you made in this PR. 12 | 13 | ## Testing 14 | 15 | Describe the testing process you followed to ensure that the changes in this PR are effective and do not introduce new issues. Include information about the test cases you ran or any manual testing steps. 16 | 17 | ## Screenshots (if applicable) 18 | 19 | Add screenshots or GIFs to showcase the changes visually. 20 | 21 | ## Additional Notes 22 | 23 | Include any additional information or context that reviewers should be aware of. 24 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | -------------------------------------------------------------------------------- /.github/workflows/build-push.yml: -------------------------------------------------------------------------------- 1 | name: "Build and push to docker hub" 2 | on: 3 | push: 4 | tags: 5 | - "v*" 6 | workflow_dispatch: 7 | permissions: 8 | contents: "read" 9 | jobs: 10 | docker: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: Set up QEMU 15 | uses: docker/setup-qemu-action@v3 16 | - name: Set up Docker Buildx 17 | uses: docker/setup-buildx-action@v3 18 | - name: Login to Docker Hub 19 | uses: docker/login-action@v3 20 | with: 21 | username: ${{ secrets.DOCKERHUB_USERNAME }} 22 | password: ${{ secrets.DOCKERHUB_TOKEN }} 23 | - name: Setup pnpm 24 | uses: pnpm/action-setup@v2.0.1 25 | with: 26 | version: 8.13.1 27 | - name: Set pnpm store path 28 | run: echo "PNPM_STORE_PATH=$(pnpm store path)" >> $GITHUB_ENV 29 | - name: Debug Directory Contents 30 | run: ls -R 31 | - name: Install modules 32 | run: pnpm install 33 | - name: Build and push 34 | uses: docker/build-push-action@v5 35 | with: 36 | platforms: linux/arm64,linux/amd64 37 | push: true 38 | tags: ${{ secrets.DOCKERHUB_USERNAME }}/client:latest 39 | -------------------------------------------------------------------------------- /.github/workflows/pr-build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | pull_request: 5 | branches: [main] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | - uses: pnpm/action-setup@v2 13 | with: 14 | version: latest 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: "18.x" 18 | cache: "pnpm" 19 | - name: Install dependencies 20 | run: pnpm install --no-frozen-lockfile 21 | - name: Run build 22 | run: pnpm run build 23 | -------------------------------------------------------------------------------- /.github/workflows/prettier.yml: -------------------------------------------------------------------------------- 1 | 2 | name: Prettier 3 | on: 4 | workflow_dispatch: 5 | #Runs at 01:01 UTC 6 | schedule: 7 | - cron: "1 1 * * *" 8 | 9 | concurrency: 10 | group: "main-branch" 11 | 12 | jobs: 13 | format: 14 | if: github.repository == 'Would-You-Bot/client' 15 | runs-on: ubuntu-latest 16 | name: Format Files 17 | steps: 18 | - uses: actions/checkout@v4 19 | - uses: pnpm/action-setup@v2 20 | with: 21 | version: latest 22 | 23 | - uses: actions/setup-node@v3 24 | with: 25 | node-version: "18.x" 26 | cache: "pnpm" 27 | 28 | - run: pnpm i --no-frozen-lockfile 29 | 30 | - name: Prettier 31 | run: pnpm run format 32 | env: 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | 35 | - uses: stefanzweifel/git-auto-commit-action@v4 36 | id: format-files 37 | with: 38 | commit_message: "chore(style): format files" 39 | skip_checkout: true 40 | branch: "formatting-${{ github.sha }}" 41 | create_branch: true 42 | 43 | # create PR using GitHub CLI if files were formatted 44 | - name: create PR with formatted files 45 | if: steps.format-files.outputs.changes_detected == 'true' 46 | id: create-pr 47 | run: git checkout formatting-${{ github.sha }} && gh pr create --base main --head formatting-${{ github.sha }} --title 'Merge formatting into main' --body 'Created by Github action' 48 | env: 49 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 50 | 51 | # merge PR using GitHub CLI 52 | - name: merge PR with adjusted formatting 53 | if: steps.format-files.outputs.changes_detected == 'true' 54 | id: merge-pr 55 | run: gh pr merge --admin --merge --subject 'Merge formatting' --delete-branch 56 | env: 57 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | yarn.lock 9 | .idea 10 | 11 | # Diagnostic reports (https://nodejs.org/api/report.html) 12 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 13 | 14 | # Runtime data 15 | pids 16 | *.pid 17 | *.seed 18 | *.pid.lock 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage 25 | *.lcov 26 | 27 | # nyc test coverage 28 | .nyc_output 29 | 30 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 31 | .grunt 32 | 33 | # Bower dependency directory (https://bower.io/) 34 | bower_components 35 | 36 | # node-waf configuration 37 | .lock-wscript 38 | 39 | # Compiled binary addons (https://nodejs.org/api/addons.html) 40 | build/Release 41 | 42 | # Dependency directories 43 | node_modules/ 44 | jspm_packages/ 45 | 46 | # TypeScript v1 declaration files 47 | typings/ 48 | 49 | # TypeScript cache 50 | *.tsbuildinfo 51 | 52 | # Optional npm cache directory 53 | .npm 54 | 55 | # Optional eslint cache 56 | .eslintcache 57 | 58 | # Microbundle cache 59 | .rpt2_cache/ 60 | .rts2_cache_cjs/ 61 | .rts2_cache_es/ 62 | .rts2_cache_umd/ 63 | 64 | # Optional REPL history 65 | .node_repl_history 66 | 67 | # Output of 'npm pack' 68 | *.tgz 69 | 70 | # Yarn Integrity file 71 | .yarn-integrity 72 | 73 | # dotenv environment variables file 74 | .env 75 | .env.test 76 | 77 | # parcel-bundler cache (https://parceljs.org/) 78 | .cache 79 | 80 | # Next.js build output 81 | .next 82 | 83 | # Nuxt.js build / generate output 84 | .nuxt 85 | dist 86 | 87 | # Gatsby files 88 | .cache/ 89 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 90 | # https://nextjs.org/blog/next-9-1#public-directory-support 91 | # public 92 | 93 | # vuepress build output 94 | .vuepress/dist 95 | 96 | # Serverless directories 97 | .serverless/ 98 | 99 | # FuseBox cache 100 | .fusebox/ 101 | 102 | # DynamoDB Local files 103 | .dynamodb/ 104 | 105 | # TernJS port file 106 | .tern-port 107 | 108 | # System files 109 | .DS_Store 110 | # Sentry Config File 111 | .sentryclirc 112 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "esbenp.prettier-vscode", 3 | "editor.formatOnSave": true 4 | } 5 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18-slim AS base 2 | ENV PNPM_HOME="/pnpm" 3 | ENV PATH="$PNPM_HOME:$PATH" 4 | #Hook into pnpm without installing pnpm. (magic) (https://nodejs.org/docs/latest-v18.x/api/corepack.html) 5 | # RUN corepack enable 6 | #Current fix for the corepack download issue 7 | RUN npm install -g pnpm 8 | WORKDIR /usr/src/app 9 | COPY package*.json pnpm-lock*.yaml ./ 10 | 11 | 12 | #Create node_modules files without dev dependencies. 13 | FROM base AS prod_dependencies 14 | RUN pnpm install --prod --frozen-lockfile 15 | 16 | #Create dist. 17 | FROM base AS builder 18 | COPY . . 19 | RUN pnpm install --frozen-lockfile 20 | RUN pnpm run build 21 | 22 | #Final image 23 | FROM base 24 | ENV NODE_ENV=production 25 | 26 | WORKDIR /usr/src/app 27 | COPY --from=prod_dependencies /usr/src/app/node_modules ./node_modules 28 | COPY --from=builder /usr/src/app/dist ./dist 29 | CMD [ "pnpm", "run", "start" ] 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | ALL RIGHTS RESERVED 2 | 3 | Copyright (c) 2022-PRESENT WouldYouBot (by Rivo) 4 | 5 | WouldYouBot (by Rivo) - Open-Source License Agreement 6 | 7 | IMPORTANT: READ CAREFULLY BEFORE ACCESSING THE CODE. BY ACCESSING THE CODE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE AGREEMENT. IF YOU DO NOT AGREE TO THESE TERMS, YOU ARE NOT PERMITTED TO ACCESS THE CODE. 8 | 9 | 1. LICENSE GRANT 10 | This is a source-available software project, and no license is granted to anyone accessing, using, or copying the code, except as explicitly stated in this agreement. No license, whether express or implied, is granted to the general public to redistribute this source code without express prior authorisation. 11 | 12 | 2. RESTRICTIONS 13 | You are authorized to access & modify this source code provided you are doing so with the express intent to update WouldYouBot. Unauthorized access to the code is strictly prohibited, and any such access constitutes a violation of applicable laws. You are not authorized to use this source code to run your own projects. 14 | 15 | 3. NO LICENSE GRANTED 16 | No license is granted to any individual, entity, or organization to use or distribute the code unless it abides by the restrictions previously outlined. The code is the exclusive property of Rivo, and all rights not expressly granted herein are reserved. 17 | 18 | 4. GOVERNING LAW 19 | This license agreement shall be governed by and construed in accordance with the laws of the , without regard to its conflicts of law principles. 20 | 21 | BY ACCESSING THIS, YOU ACKNOWLEDGE THAT YOU HAVE READ AND UNDERSTOOD THIS AGREEMENT AND AGREE TO BE BOUND BY ITS TERMS. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | ![Would You Banner](https://i.imgur.com/HSsvZMe.png) 4 | 5 | [Website](https://wouldyoubot.com) • [Support](https://wouldyoubot.gg/discord) • [Invite](https://wouldyoubot.gg/invite) • [Vote](https://top.gg/bot/981649513427111957/vote) • [ToS](https://wouldyoubot.gg/terms) • [Privacy](https://wouldyoubot.gg/privacy) 6 | 7 | --- 8 | 9 | Would You is a popular Discord bot that allows you to play the classic game of Would You Rather with your friends! 10 | 11 | --- 12 | 13 |
14 | 15 | # Getting Started 16 | 17 | ## Starting the Development Environment 18 | 19 | The development environment does not currently use Docker, so you will need to install the dependencies manually. 20 | 21 | 1. Install [Node.js](https://nodejs.org/en/) (version 17.9.x or higher) and pnpm. 22 | 2. Install all dependencies by running `pnpm install` in the root directory. 23 | 3. Create a `.env` file in the root directory, copy the contents of `.env.example` into `.env`, and then fill in the values with your values. 24 | 4. Run `pnpm run test` to start the development environment. This will run all of the applications in development mode. 25 | 26 | ### Formatting 27 | 28 | Before committing, make sure to run `pnpm format` to format the code. This will also be run automatically when you commit, but it is better to run it manually to make sure you don't commit code that isn't formatted correctly. 29 | 30 | Additionally, it is recommended to install the [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) extension for VS Code. This will automatically format the code when you save (or based on the event you choose). 31 | 32 | ### Committing 33 | 34 | Follow the Angular commit message format. See [here](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines) for more information. 35 | 36 | ### NPM Scripts 37 | 38 | You can run the below scripts with `pnpm