{"id":22503261,"url":"https://github.com/barimehdi77/ft_irc","last_synced_at":"2025-06-14T06:02:31.947Z","repository":{"id":42021825,"uuid":"475446048","full_name":"barimehdi77/ft_irc","owner":"barimehdi77","description":"Our own IRC server in C++, fully compatible with an official client.","archived":false,"fork":false,"pushed_at":"2022-05-30T19:55:57.000Z","size":274,"stargazers_count":18,"open_issues_count":1,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T07:32:31.629Z","etag":null,"topics":["1337","1337school","42","42projects","42school","ft-irc","irc","irc-bot","irc-client","irc-protocol","irc-server"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/barimehdi77.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-29T13:04:06.000Z","updated_at":"2025-04-08T11:59:05.000Z","dependencies_parsed_at":"2022-08-12T02:31:47.412Z","dependency_job_id":null,"html_url":"https://github.com/barimehdi77/ft_irc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/barimehdi77/ft_irc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barimehdi77%2Fft_irc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barimehdi77%2Fft_irc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barimehdi77%2Fft_irc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barimehdi77%2Fft_irc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barimehdi77","download_url":"https://codeload.github.com/barimehdi77/ft_irc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barimehdi77%2Fft_irc/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259768514,"owners_count":22908228,"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":["1337","1337school","42","42projects","42school","ft-irc","irc","irc-bot","irc-client","irc-protocol","irc-server"],"created_at":"2024-12-06T23:30:27.029Z","updated_at":"2025-06-14T06:02:31.926Z","avatar_url":"https://github.com/barimehdi77.png","language":"C++","funding_links":["https://www.buymeacoffee.com/barimehdi77","https://ko-fi.com/K3K45UOA7","https://paypal.me/barimehdi77"],"categories":[],"sub_categories":[],"readme":"# 🤔 Description\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## 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## Bonus part \nHere are the extra features we added to our IRC server so it looks even more like and actual IRC server:\n  - Handle file transfer.\n  - A meme bot named **DEEZNUTS**.\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  - **SENDFILE**: The SENDFILE command is used to send a file to another user.\n  - **GETFILE**: The GETFILE command is used to receive a file from another user.\n  - **DEEZNUTS**: The DEEZNUTS command is a bot that helps you with various types of information about the server.\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[BARI Mehdi](https://github.com/barimehdi77)\u003cbr/\u003e\n\u0026emsp;42intra profile : [mbari](https://profile.intra.42.fr/users/mbari) \u003cbr/\u003e\n\u003cbr/\u003e\n[SFAIHI Abderrahmane](https://github.com/AbderrSfa)\n\u003cbr/\u003e\n\u0026emsp;42intra profile : [asfaihi](https://profile.intra.42.fr/users/asfaihi)\n\u003cbr/\u003e\n\u003cbr/\u003e\n[EL KEMMAL Abdelhamid](https://github.com/abdel-ke)\n\u003cbr/\u003e\n\u0026emsp;42intra profile : [abdel-ke](https://profile.intra.42.fr/users/abdel-ke)\n\n\n# 👨‍💻 Ressources\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/barimehdi77)\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/K3K45UOA7)\n[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://paypal.me/barimehdi77)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarimehdi77%2Fft_irc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarimehdi77%2Fft_irc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarimehdi77%2Fft_irc/lists"}