# Contribute to the ModernIRC project

## Testing

In order to test the project, we recommend you to run a local IRC server.
For example, you can go for
[Ergo Server](https://github.com/ergochat/ergo/blob/master/distrib/docker/README.md) with Docker.

Then you can clone this repository, and run the example.

```shell
git clone https://codeberg.org/ChakSoft/modernirc.git
cd modernirc/example
node example.js
```

The bot will try to connect on localhost:6667, don't hesitate to adjust
the settings according to your own.

The example bot will log in the console every message it receives, but also
enables the `hello` module that reacts to any join, and on mentionning its nickname.

> If you create a utility function, please add unit tests in the `tests` folder.

## Environment Setup

You must have a functional Node 22+ environment. Nothing more :)

## How to submit changes

In order to submit changes, you need to use your account on Codeberg,
then fork the repository.

Once you've submitted the pull request, we will take a look at the changes
you've made within a couple working days. It may take longer if the changes
are big or if there are bank holidays.

If the PR is refused, we'll try our best to explain why and what must
be changed to make it acceptable.

If the PR is accepted, we'll integrate it in our workflow to ensure everything
is OK and merge it in the main project.

Another point, we'll look very closely on PR which adds dependencies.
We're quite happy with a no-dependency project, and we want it to stay that way.
If the PR is really adding something interesting which cannot be easily solved without
a dependency, it may be accepted but no promises...

> Finally, please note that any PR made with the help of Generative AI will **ALWAYS**
> be refused. If you want to contribute, please respect people that actually knows
> how to do code properly and did some learning and research about it.

## How to report a bug

To report a bug, please ensure that you're connected with your Codeberg
account and go to https://codeberg.org/ChakSoft/modernirc/issues.

Create a new ticket and explain what happened and in which environment :

- OS on which your example can be reproduced
- Node version you're using
- Development environment (native, docker, vagrant, vm, etc.)
- IRC server you're connecting your example to

Then you have to describe with precision what happened. First, describe
what you did, and then what is the result you've expected, and finally
the result you've received.

We'll try our best to answer quickly.
Once the ticket is open, we'll change the labels on it to ensure it's
routed correctly. Each time a ticket status is changed, we'll try our
best to explain why.

## Commits

In your commits, please use the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)
guidelines, just to ensure the commits are readable and easily understandable.

The `npm run commit` script will guide you through the process of creating conventional commits.

```shell
# Do your changes
# Then add your changes
git add .
# Then commit, and rock & roll !
npm run commit
# Push on your branch and submit your pull request when you're ready
```

## Style guide / Coding convention

The whole project is formatted with ESLint. Before submitting the pull request,
please ensure you fix every lint issue.

## Thank You !

Thank you for making open-source better and for contributing !

And remember, **the important thing in creativity is the journey, not the
destination.**
