# Start contributing to [Project Moeka](https://github.com/cuwayo/moeka)
Hello! Thank you for your interest in contributing to this project. This guide will help you get started.
## Prerequisites
- [Git](https://git-scm.com/downloads)
- [Node.js 23+](https://nodejs.org/en/download/)
- [Bun 1.4+](https://bun.sh/docs/installation)
Windows setup
0. Open PowerShell
1. Install [`scoop`](https://scoop.sh/)
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
```
2. Install `git` and Node.js through `scoop`
```powershell
scoop install git nodejs
```
> https://stackoverflow.com/a/64121601
3. Install `bun` through the official script
```powershell
powershell -c "irm bun.sh/install.ps1 | iex"
```
macOS setup
0. Open Terminal (or iTerm2, Ghostty, Kitty, etc.)
1. Install `git`, `node` through `brew`
```shell
brew install git node
```
2. Install `bun` through `brew`
```shell
brew install oven-sh/bun/bun
```
Linux setup
0. Open terminal
1. Follow [nodesource/distributions: NodeSource Node.js Binary Distributions](https://github.com/nodesource/distributions?tab=readme-ov-file#table-of-contents) to install `node`
2. Follow [Git](https://git-scm.com/downloads/linux) to install `git`
3. Install `bun` through the official script
```shell
curl -fsSL https://bun.sh/install | bash
```
## If you have already contributed to this project before
> [!WARNING]
>
> If you haven't cloned this repository, skip this section.
Make sure your local repository is up to date with the upstream repository:
```shell
git fetch --all
git checkout main
git pull upstream main --rebase
```
If you have a working branch, to make your branch up to date with the upstream repository:
```shell
git checkout
git rebase main
```
## Fork this project
Click on the **Fork** button on the top right corner of the [moeru-ai/airi](https://github.com/moeru-ai/airi) page.
## Clone
```shell
git clone https://github.com//moeka.git
cd moeka
```
## Create your working branch
```shell
git checkout -b
```
## Install dependencies
```shell
bun install
```
> [!NOTE]
>
> We would recommend to install [@antfu/ni](https://github.com/antfu-collective/ni) to make your script simpler.
>
> ```shell
> npm i -g @antfu/ni
> ```
>
> Once installed, you can
>
> - use `ni` for `bun install`, `npm install` and `yarn install`.
> - use `nr` for `bun run`, `npm run` and `yarn run`.
>
> You don't need to care about the package manager, `ni` will help you choose the right one.
## Choose the application you want to develop on
### Stage Web
```shell
bun run dev
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr dev
> ```
### UI Storyboard
Browse the live UI component storyboard at [airi.moeru.ai/ui](https://airi.moeru.ai/ui/).
### Documentation site
```shell
bun run dev:docs
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr dev:docs
> ```
### Telegram bot integration
A Postgres database is required.
```shell
cd integrations/telegram-bot
docker compose up -d
```
Configure `.env`
```shell
cp .env .env.local
```
Edit the credentials in `.env.local`.
Migrate the database
```shell
bun run --filter @proj-airi/telegram-bot db:generate
bun run --filter @proj-airi/telegram-bot db:push
```
Run the bot
```shell
bun run --filter @proj-airi/telegram-bot start
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr -F @proj-airi/telegram-bot dev
> ```
### Discord bot integration
```shell
cd integrations/discord-bot
```
Configure `.env`
```shell
cp .env .env.local
```
Edit the credentials in `.env.local`.
Run the bot
```shell
bun run --filter @proj-airi/discord-bot start
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr -F @proj-airi/discord-bot dev
> ```
### Minecraft agent
```shell
cd integrations/minecraft
```
Start a Minecraft client, export your world with desired port, and fill-in the port number in `.env.local`.
Configure `.env`
```shell
cp .env .env.local
```
Edit the credentials in `.env.local`.
Run the bot
```shell
bun run --filter @proj-airi/minecraft-bot start
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr -F @proj-airi/minecraft-bot dev
> ```
## Commit
### Before commit
Please make sure lint (static checkers) and TypeScript compilers are satisfied:
```shell
bun run lint && bun run typecheck
```
If you are committing images, consider using AVIF format instead of PNG, JPG etc. You can convert existing images to AVIF by running:
```shell
bun run to-avif ...
```
> [!NOTE]
>
> If you have [@antfu/ni](https://github.com/antfu-collective/ni) installed, you can use `nr` to run the commands:
>
> ```shell
> nr lint && nr typecheck
> ```
### Commit
```shell
git add .
git commit -m ""
```
### Push to your fork repository
```shell
git push origin -u
```
You should be able to browse the branch on your fork repository.
> [!NOTE]
>
> If this is your first time contributing to this project, you need to add the upstream repository too:
>
> ```shell
> git remote add upstream https://github.com/moeru-ai/airi.git
> ```
## Creating Pull Request
Navigate to [moeru-ai/airi](https://github.com/moeru-ai/airi) page, click on the **Pull requests** tab, and click on the **New pull request** button, click on the **Compare across forks** link, and select your fork repository.
Review the changes, and click on the **Create pull request** button.
## Whooo-ya! You made it!
Congratulations! You made your first contribution to this project. You can now wait for the maintainers to review your pull request.