====== IRC ===== IRC stands for Internet Relay Chat. ===== 2-minute Intro to IRC =====
===== Using IRC with netcat =====
===== Basics ===== Once you are connected to an IRC server like ''irc.devdungeon.com'' you can start running commands. Commands start with a ''/''. Here are the essential commands you need to know. * ''/list'' - List chat rooms and participant count * ''/who #general'' - See who is in the channel named #general * ''/join #general'' - Join channel named #general * ''/part #general'' - Leave channel named #general * ''/msg nanodano hey'' - Send private message to NanoDano * ''/quit'' - Disconnect from server Other commands: * ''/away Be back in a few'' - Set an away message * ''/back'' - Turn off away status * ''/me is not surprised'' - Emote something; e.g. "NanoDano is not surprised" * ''/motd'' - See the server's message of the day ===== Clients ===== There are many clients out there, but here are a few: * [[http://xchat.org/|XChat]] (GUI) - For Windows, download and install from the website. For Debian, install with ''apt install xchat''. * [[https://pidgin.im/|Pidgin]] (GUI) - For Windows, download and install from the website. For Debian, install with ''apt install pidgin''. Pidgin is nice because it supports other protocols too so you can have your XMPP account and IRC setup together. * [[other:irssi_terminal_chat|irssi]] (Terminal) - For Windows, use Debian WSL. In Debian, install with ''apt install irssi''. In Mac, ''brew install irssi''. Use the normal IRC slash commands like ''/list'' and ''/join #general''. Use alt keys plus window number to switch between chat windows. E.g. ''ALT-1'' and ''ALT-2''. * netcat - You can use netcat as a client if you understand the IRC protocol. Check out my video tutorial [[https://youtu.be/FDrR98ww6bE|IRC with netcat]]. ===== Node.js Bot ===== var net = require('net'); // https://nodejs.org/dist/latest/docs/api/net.html var BOT_NAME = 'mybot2'; var BOT_CHANNEL = '#bots'; var client = new net.Socket(); client.connect(6667, 'irc.devdungeon.com', function() { client.write('USER ' + BOT_NAME + ' 0 * :' + BOT_NAME + '\n'); client.write('NICK ' + BOT_NAME + '\n'); // Must wait a second to register setTimeout(function(){ client.write('JOIN ' + BOT_CHANNEL + '\n'); client.write('PRIVMSG ' + BOT_CHANNEL + ' Hello my Node.js bot is online!\n'); }, 3000); }); client.on('data', function(data) { console.log('MESSAGE_FROM_SERVER: ' + data); var text = data.toString(); var splitText = text.split(' '); // If data starts with PING, respond with PONG :whatever if (text.startsWith('PING')) { client.write('PONG ' + text.substring(5)); // Remove `PING ` and pong back what it sent me console.log('Recieved PING. PONGED.'); } else if (splitText[1] == 'PRIVMSG') { // PM or chat room // If data comes from a channel (#general): // :nanodano!johnd@107.181.165.217 PRIVMSG #general :Hello bot // If data comes from privmsg (dano): // :nanodano!johnd@107.181.165.217 PRIVMSG danobot :hey console.log('Destination:' + splitText[2]) // Was it a direct message or to the channel? if (splitText[2] == BOT_CHANNEL) { console.log('message was from ' + BOT_CHANNEL) } if (splitText[2] == BOT_NAME) { console.log('message was directly to me (' + BOT_NAME + ')') } // Was the message a command? if (splitText[3].substring(1).startsWith('!')) { console.log('Command detected with ! prefix') // Cut off first character, and check command. Run appropriate function. !bitcoin. !ping !8-ball var command = splitText[3].substring(2).trim().toLowerCase(); console.log('Command: `' + command + '`'); if (command == 'ping') { console.log('Ping command detected! Ponging.'); client.write('PRIVMSG ' + BOT_CHANNEL + ' Pong\n'); } } console.log('PrivMsg: ' + splitText[3].substring(1)); // Cut off : in front } else { console.log('Discarded unexpected/unimportant message.'); } }); ===== Inspircd ====== Inspircd is software for running your own IRC server. * Source (C++) [[https://github.com/inspircd/inspircd]] * Installation instructions [[https://docs.inspircd.org/3/installation/]] Quick setup notes: # Get latest .deb from https://github.com/inspircd/inspircd/releases cd ~ wget https://github.com/inspircd/inspircd/releases/download/v3.10.0/inspircd_3.10.0.deb10u1_amd64.deb apt install ./inspircd_3.10.0.deb10u1_amd64.deb cp /usr/share/doc/inspircd/inspircd.conf.example.gz ~ gunzip inspircd.conf.example.gz mv inspircd.conf.example /etc/inspircd/inspircd.conf echo "Welcome!" > /etc/inspircd/motd.txt vim /etc/inspircd/inspircd.conf # Edit bind ip # Edit server name # Edit motd text file path to ''motd.txt'' systemctl start inspircd # Then connect on port 6667 [[https://www.anope.org/about.php|Anope]] is the partner service that should be installed for NickServ and ChanServ for people to register nicknames and channels.