The IRC spec is in RFC 1459. The IRC protocol is suprisingly elegant and simple. For basic operation, there is no need for a dedicated client (although a client makes chatting more enjoyable).
In general, an IRC message looks like:
1
<command> [arg] [arg] ... :[arg with spaces]
or
1
[:prefix] <command> [arg] [arg] ... :[arg with spaces]
This format is the same for both client -> server, and server's replies. The prefix is usually the an identity of the message's originator.
Basic Operations
To connect:
Connect to the server using TLS: openssl s_client -connect <server>:<port>
Set the nick: nick <your_nick>
Set username: user <your_nick> . .
To chat:
Join channel with join <channel_name>
Chat in channel with privmsg <channel_name> :<msg>
Chat with other user with privmsg <user> :<msg>
List channel users with lusers <channel>
To authenticate your nick with NickServ, you need to issue the following command to the userNickServ:
identify <your nick's password>
To do this, issue the following:
privmsg nickserv :identify <nick's password>
Note that channel_name starts with #, while user name doesn't.