{"id":15047228,"url":"https://github.com/aabduvak/ft_irc","last_synced_at":"2025-12-30T10:42:58.402Z","repository":{"id":156889851,"uuid":"530612135","full_name":"aabduvak/ft_irc","owner":"aabduvak","description":"IRC (Internet Relay Chat) is a protocol for real-time text messaging between internet-connected computers created in 1988.","archived":false,"fork":false,"pushed_at":"2022-09-03T19:43:38.000Z","size":55,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-20T15:31:16.033Z","etag":null,"topics":["42","42istanbul","42school","cpp98","irc-server","oop","socket"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aabduvak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-30T10:47:22.000Z","updated_at":"2024-07-25T11:13:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"b6505ffd-ea68-4f52-9753-a617aa94f599","html_url":"https://github.com/aabduvak/ft_irc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aabduvak%2Fft_irc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aabduvak%2Fft_irc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aabduvak%2Fft_irc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aabduvak%2Fft_irc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aabduvak","download_url":"https://codeload.github.com/aabduvak/ft_irc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243473525,"owners_count":20296566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["42","42istanbul","42school","cpp98","irc-server","oop","socket"],"created_at":"2024-09-24T20:55:17.592Z","updated_at":"2025-12-30T10:42:53.360Z","avatar_url":"https://github.com/aabduvak.png","language":"C++","funding_links":["https://www.buymeacoffee.com/aabduvak"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e 📮 IRC SERVER \u003c/h1\u003e\n\n\u003ch2 align=\"center\"\u003eInternet Relay Chat\u003c/h2\u003e\n\u003cp align=center\u003e\n  \u003cimg alt=\"GitHub last commit\" src=\"https://img.shields.io/github/last-commit/aabduvak/ft_irc?color=red\"\u003e\n  \u003cimg alt=\"Repository size\" src=\"https://img.shields.io/github/repo-size/aabduvak/ft_irc?color=red\"\u003e\n  \u003cimg alt=\"GitHub top language\" src=\"https://img.shields.io/github/languages/top/aabduvak/ft_irc?color=red\"\u003e\n\u003c/p\u003e\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003csummary\u003eTable of Contents\u003c/summary\u003e\n\u003col\u003e\n\u003cli\u003e\n\t\u003ca href=\"#-about\"\u003eAbout The Project\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\t\u003ca href=\"#-our-irc-commands\"\u003eOur commands\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#%EF%B8%8F-start-irc-server\"\u003eUsage\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#-contributers\"\u003eContributors\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#-resources\"\u003eResources\u003c/a\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/details\u003e\n\n## 🤔 About\nThis project is about creating our own IRC server. We used an actual IRC client to connect to our server and test it.\n**IRC** (Internet Relay Chat) is a protocol for real-time text messaging between internet-connected computers created in **1988**. It is mainly used for group discussion in chat rooms called “**channels**” although it supports private messages between two users, data transfer, and various client-side commands.\n\n#### Skills\n\n- Network \u0026 system administration\n- Rigor\n- Object-oriented programming\n\n#### Our grade\n\u003cimg src=\"./images/grade.png\" width=\"150\" height=\"150\"/\u003e\n\n### Mandatory part\n  - We have to develop an IRC server in C++ 98.\n  - The server must be capable of handling multiple clients at the same time and never hang.\n  - Only 1 poll() (or equivalent) can be used for handling all these operations (read, write, but also listen, and so forth).\n  - An IRC client must be able to connect to your server without encountering any error.\n  - Communication between client and server has to be done via TCP/IP (v4).\n  - Using the IRC client with our server must be similar to using it with any official IRC server. However, we only have to implement the following features:\n    -  We must be able to authenticate, set a nickname, a username, join a channel, send and receive private messages using the IRC client.\n    -  All the messages sent from one client to a channel have to be forwarded to every other client that joined the channel.\n    -  We must have operators and regular users.\n    -  Then, we have to implement the commands that are specific to operators.\n\n## 🔑 Our IRC Commands\nThese are the available commands in our IRC Server:\n  - **PASS**: The **PASS** command is used to set a 'connection password'.\n  - **NICK**: NICK command is used to give user a nickname or change the existing one.\n  - **USER**: he USER command is used at the beginning of connection to specify the username, hostname and realname of a new user.\n  - **OPER**: A normal user uses the OPER command to obtain operator privileges.\n  - **MODE**: The user MODE's are typically changes which affect either how the client is seen by others or what 'extra' messages the client is sent.\n  - **QUIT**: A client session is terminated with a quit message.\n  - **JOIN**: The JOIN command is used by a user to request to start listening to the specific channel.\n  - **PART**: The PART command causes the user sending the message to be removed from the list of active members for all given channels listed in the parameter string.\n  - **TOPIC**: The TOPIC command is used to change or view the topic of a channel.\n  - **KICK**: The KICK command can be used to request the forced removal of a user from a channel.\n  - **PRIVMSG**: PRIVMSG is used to send private messages between users, as well as to send messages to channels.\n  - **NOTICE**: The NOTICE command is used similarly to PRIVMSG.\n\n## ⚙️ Start IRC Server\nTo compile the program, use:\n  - `make`\nTo start the Server, use:\n  - `./ircserv \u003cport\u003e \u003cpassword\u003e`\n    - **port**: The port number on which your IRC server will be listening to for incoming IRC connections.\n    - **password**: The connection password. It will be needed by any IRC client that tries to connect to your server.\nTo connect to the server, you can use:\n  - `nc \u003cIP ADDRESS\u003e \u003cPORT\u003e`\n    - **IP ADDRESS**: Host IP address.\n    - **PORT**: The PORT that the server listening on.\n  - You can also use an IRC Client e.g LimeChat, WeeChat...\n\n## 💪 Contributers\n\n[Abdulaziz Abduvakhobov](https://github.com/aabduvak)\u003cbr/\u003e\n\u0026emsp;42intra profile : [aabduvak](https://profile.intra.42.fr/users/aabduvak) \u003cbr/\u003e\n\u003cbr/\u003e\n[Arbi Elmas](https://github.com/milesDonQuijote)\n\u003cbr/\u003e\n\u0026emsp;42intra profile : [arelmas](https://profile.intra.42.fr/users/arelmas)\n\u003cbr/\u003e\n\u003cbr/\u003e\n[Ömer Faruk Öz](https://github.com/omer0909)\n\u003cbr/\u003e\n\u0026emsp;42intra profile : [ooz](https://profile.intra.42.fr/users/ooz)\n\n\n## 👨‍💻 Resources\n* [What is a Socket?](https://www.tutorialspoint.com/unix_sockets/what_is_socket.htm)\n* [Unix Socket - Network Addresses](https://www.tutorialspoint.com/unix_sockets/network_addresses.htm)\n* [Unix Socket - Core Functions](https://www.tutorialspoint.com/unix_sockets/socket_core_functions.htm)\n* [Beej's Guide to Network Programming](https://beej.us/guide/bgnet/html/)\n* [The UChicago χ-Projects](http://chi.cs.uchicago.edu/chirc/index.html)\n* [Internet Relay Chat Protocol](https://datatracker.ietf.org/doc/html/rfc1459)\n* [Internet Relay Chat: Architecture](https://datatracker.ietf.org/doc/html/rfc2810)\n* [Internet Relay Chat: Channel Management](https://datatracker.ietf.org/doc/html/rfc2811)\n* [Internet Relay Chat: Client Protocol](https://datatracker.ietf.org/doc/html/rfc2812)\n* [Internet Relay Chat: Server Protocol](https://datatracker.ietf.org/doc/html/rfc2813)\n\n---\n[![\"Buy Me A Coffee\"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/aabduvak)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faabduvak%2Fft_irc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faabduvak%2Fft_irc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faabduvak%2Fft_irc/lists"}