MantaTail is a sandbox IRC server developed to test IRC clients and functionality.
It is still in development and is therefore missing some central features.
- Capability Negotiation (limited)
- Message of the day
- Join channel
- Part from channel
- Send message to channel
- Send private message to other user
- Set / Remove channel operator
- Set channel topic
- Kick user from channel
- Ban user from channel
- Change nick
- Set away status
- Quit from server
You can connect to Mantatail via an IRC client of you choice (I recommend Mantaray) or via a network utility such as Netcat.
To start Mantatail, cd to the mantatail folder and run python3 server.py
.
Thereafter, you can connect to the server by connecting to localhost 6667
.
If you are interested in contributing to Mantatail, thank you! You are most welcome to do so.
To start, please follow these steps:
- Fork the repository and
git clone
it to your local machine - Create a virtual environment and activate it
- Mac/Linux:
python3 -m venv env
->source env/bin/activate
- Windows:
py -m venv env
->env\Scripts\activate
- Mac/Linux:
- Download the necessary dependencies for development
- Mac/Linux/Windows
pip install -r requirements-dev.txt
- Mac/Linux/Windows
- Happy coding!
Mantatail relies on Pytest for testing. In order to run the test suite, use python3 -m pytest
The fuzzer spams the server with random commands to reveal eventual errors.
To run the fuzzer, make sure server.py
is not running, cd to tests/fuzzer
and run python3 fuzzer.py
.
If you are developing a new feature, you can substitute the list words
with a list containing limited amount of relevant data.
For example, if you are working with the feature of banning a user, a reasonable data set could be:
words = ["MODE", "mode", "Mode", "#chan", "#%invalidchan "+", "-", "b", "B", "^", ":", "Param1", ":Param2"]
Some handy resources for developing IRC-related programs:
Any pull request will automatically be checked for proper format by black
, pyflakes
, mypy
(--strict mode), as well as by pytest
To make sure the PR will pass these checks, please use the following commands before pushing:
black *.py tests/*.py
mypy --strict *.py
python3 -m pytest
python3 -m pyflakes *.py tests/