User Tools

Site Tools


programming:irc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
programming:irc [2021/06/03 07:24]
nanodano
programming:irc [2022/03/13 16:49] (current)
nanodano
Line 3: Line 3:
 IRC stands for Internet Relay Chat. IRC stands for Internet Relay Chat.
  
-===== DevDungeon IRC Server ===== 
- 
-Connect to the DevDungeon IRC server at ''irc.devdungeon.com'' on port ''6667''. 
- 
-<code> 
-irc.devdungeon.com 
-</code> 
  
 ===== 2-minute Intro to IRC ===== ===== 2-minute Intro to IRC =====
Line 56: Line 49:
   * [[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''.   * [[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]].   * 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 =====
 +
 +<code javascript simple_irc_bot.js>
 +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.');
 +  }
 +
 +});
 +</code>
  
  
programming/irc.1622705091.txt.gz · Last modified: 2021/06/03 07:24 by nanodano