Skip to content
Snippets Groups Projects
Select Git revision
  • dd_msg_area_chooser_coloring_fix_and_separator_char_fix
  • dailybuild_linux-x64
  • dailybuild_win32
  • master default protected
  • sqlite
  • rip_abstraction
  • dailybuild_macos-armv8
  • dd_file_lister_filanem_in_desc_color
  • mode7
  • dd_msg_reader_are_you_there_warning_improvement
  • c23-playing
  • syncterm-1.3
  • syncterm-1.2
  • test-build
  • hide_remote_connection_with_telgate
  • 638-can-t-control-c-during-a-file-search
  • add_body_to_pager_email
  • mingw32-build
  • cryptlib-3.4.7
  • ree/mastermind
  • sbbs320d
  • syncterm-1.6
  • syncterm-1.5
  • syncterm-1.4
  • sbbs320b
  • syncterm-1.3
  • syncterm-1.2
  • syncterm-1.2rc6
  • syncterm-1.2rc5
  • push
  • syncterm-1.2rc4
  • syncterm-1.2rc2
  • syncterm-1.2rc1
  • sbbs319b
  • sbbs318b
  • goodbuild_linux-x64_Sep-01-2020
  • goodbuild_win32_Sep-01-2020
  • goodbuild_linux-x64_Aug-31-2020
  • goodbuild_win32_Aug-31-2020
  • goodbuild_win32_Aug-30-2020
40 results

ircmsg.js

Blame
    • Rob Swindell's avatar
      a54bb6af
      Remove old CVS tags, increment revision/version numbers where used · a54bb6af
      Rob Swindell authored
      The details (dates, author, revision numbers) are often stale and
      misleading, so start removing them. Where the Revision tag was used
      for a version/revision, just bump it by one and use a string constant
      instead (Git doesn't provide any similar facility for auto-incrementing
      revision numbers).
      
      More remains. Perhaps a commit hook to alert me when committing that I should
      clean up as I go rather than try to do this in bulk. <shrug>
      a54bb6af
      History
      Remove old CVS tags, increment revision/version numbers where used
      Rob Swindell authored
      The details (dates, author, revision numbers) are often stale and
      misleading, so start removing them. Where the Revision tag was used
      for a version/revision, just bump it by one and use a string constant
      instead (Git doesn't provide any similar facility for auto-incrementing
      revision numbers).
      
      More remains. Perhaps a commit hook to alert me when committing that I should
      clean up as I go rather than try to do this in bulk. <shrug>
    ircmsg.js 3.04 KiB
    /* ircmsg.js */
    
    /* Send a message (from stdin or the command-line) to an IRC channel */
    
    load("irclib.js");	// Thanks Cyan!
    
    const REVISION = '1.35';
    
    var server="irc.synchro.net";
    var channel="#channel";
    var port=6667;
    var nick="nick";
    var msg;
    var join=false;
    var exclude=new Array();
    var quiet=false;
    
    function mylog(msg)
    {
        if(!quiet)
            log(LOG_INFO,"ircmsg: " + msg);
    }
    
    for(i=0;i<argc;i++) {
    	switch(argv[i]) {
    		case "-s":
    			server=argv[++i];
    			break;
    		case "-j":
    			join=true;
    			break;
    		case "-c":
    			channel=argv[++i];
    			break;
    		case "-p":
    			port=argv[++i];
    			break;
    		case "-n":
    			nick=argv[++i];
    			break;
            case "-q":
                quiet=true;
                break;
    		case "-m":
    			msg=argv[++i];
    			if(msg==undefined || msg.search(/^[\r\n]*$/)!=-1) {
    				alert("-m specified with blank message... aborting");
    				exit();
    			}
    			break;
    		case "-x":
    			exclude.push(RegExp(argv[++i],"i"));
    			break;
    	}
    }
    
    mylog("Using nick: " + nick);
    mylog("Connecting to: " +server+ " port " + port);
    my_server = IRC_client_connect(server,nick,undefined,undefined,port);
    if(!my_server) {
    	alert("!Couldn't connect to " + server);
    	exit();
    }
    
    var done=0;
    while(!done && !js.terminated) {
    	while(!done && (response=my_server.recvline())) {
    		var resp=response.split(/\s+/);
    		if(resp[1]=='433') {
    			mylog(response);
    			/* Nick in use... */
    			nick+='_';
    			mylog("Using nick: " + nick);
    			my_server.send("NICK " + nick + "\r\n");
    		}
    		if(resp[1]=='422' || resp[1]=='376')
    			done=1;
    		//mylog(response);
    	}
    	if(!my_server.is_connected) {
    		alert("Disconnected");
    		exit();
    	}
    }
    
    if(join) {
    	mylog("Joining: " + channel);
    	my_server.send("JOIN " + channel + "\r\n");
    	while(my_server.poll(5) && (response=my_server.recvline()))
    		mylog(response);
    }
    
    var delay=0;
    var send_count = 0;
    if(msg) {
    	send(msg, delay);
    	send_count++;
    }
    else while((msg=readln())!=undefined) {	/* read from stdin */
    	if (send(msg, delay)) {
    		send_count++;
    		if (send_count > 4)
    			delay = 2050;
    	}
    }
    
    while(my_server.poll(0) && (response=my_server.recvline()))
    	mylog(response);
    
    var token = format("%x", random(0x7fffffff));
    if(my_server.sendline("PING :"+ token)) {
    	mylog("PING sent");
    	while(my_server.poll(10 * send_count)) {
    		var response = my_server.recvline();
    		mylog(response);
    		if(response == (":" + server + " PONG " + server + " :" + token))
    			break;
    	}
    }
    
    IRC_quit(my_server);
    mylog("Exiting");
    exit(0);
    
    function send(msg, delay)
    {
    	if(msg==undefined || msg.search(/^[\r\n]*$/)!=-1) {
    		mylog("Not sending blank message");
    		return false;
    	}
    	for(i in exclude)
    		if(msg.search(exclude[i])>=0)
    			return false;
    	if (delay)
    		mswait(delay);	// Cyan: IRCd throttles clients that send text to the server too quickly
    	mylog("Sending: " + msg);
    	if(!my_server.send("PRIVMSG "+channel+" :"+expand_tabs(msg)+"\r\n")) {
    		alert("send failure");
    		return false;
    	}
    	return true;
    }
    
    function expand_tabs(msg)
    {
    	if(msg!=undefined) {
    		var s=msg;
    		do {
    			msg=s;
    			s=msg.replace(/\t/,
    				function(str,offset,s) {
    					return('        '.substr(0,8 - offset % 8));
    			});
    		} while(s!=msg);
    	}
    	return(msg);
    }