Done by @Rexbrainz, @Thopterek, and @cuhlig.
We also made a bonus that uses the DCC protocol used by irssi, allowing bot to transfer chosen files and act as client.
Following the IRC protocol, we were able to create our IRC server, which handles the following:
Handles multiple connections at the same time, without blocking sockets
Handles various IRC commands per the subject and bonus
- PASS / USER / NICK: to register the user with all of the informations
- PRIVMSG: allowing for private message and group chats
- Operations related to channels and its operators:
- JOIN: allowing to create (first person) or join existing channel
- INVITE: inviting another user to channel
- TOPIC: changing the channel descritption
- KICK: ban a connected client from a channel
- MODE, with varius sub modes setting (prefix +) and removing them (prefix -):
- i: channels is set to invite only
- t: allowing non operators to change topic
- k: using the password to join the channel
- o: give operator privilage to another user (usage of MODE)
- l: limiting the number of clients on channel
- Bot that handles the file transfer and gets all needed information for DCC
- Setting up environment through docker with irssi for ease of use.
- make: to compile the server
- ./ircserv port-number-to-be-used-by-server server-password-required-to-connect
- make bot: to compile the bot
- ./ircbot, and then go through shown instructions to set it up:
- choosing the name for the bot and channel he will create
- file to transfer or txt file which content you want to receive in private message
- description that will help understand to other users what they receive
- ./ircbot, and then go through shown instructions to set it up:
- make irssi-docker: to start the docker with installed irssi
- make new-term: using running docker to create new terminals with irssi
- make clean-docker / make fcleanbot / make fclean: to cleanup after use
RFC 2813, talking about the IRC server protocol
RFC 2812, describing the IRC client protocol
More modern take on client protocol, with some proper updates
If you would like to make this project or similiar choose your reference client wisely.