Navigation

 + + + 

SleepyBot - Examples


Example 1: HelloBot

$admin = 'MyNick';
$channel = '#MyRoom';
$servername = 'irc.anywhere.tld';

# The init function is the entry point of the script.
# It is called when the botscript has been parsed 
# without exception into a runnable block.
# Here you set up the bot as you would do in the 
# constructor of a PircBot. It should contain a 
# call to connectServer(server [, port[, password]])
# or a call to a function which contains a call to 
# that function. 

bot init {
  setName('HelloBot');
  setAutoNickChange(1);
  connectServer($servername);
}

bot onConnect {
  joinChannel($channel);
}

bot onJoin {
  local('$nick');
  $nick = getNick();
  if ( "$2" ne "$nick" ) {
    sendMessage($1, 'Hello ' . $2 );
  }
}

bot onUserList {
  local('@users $user');
  @users = $2;
  foreach $user (@users) {
    if ( userGetNick( $user ) ne getNick() ) {
      sendMessage($1, 'Hello ' . userGetNick( $user ) );
    }
  }
}

bot onPrivateMessage {
  if ( ($1 eq $admin) && ($4 eq '!shutdown') ) {
    partChannel($channel, 'bye @all' );
    [System exit: 0];
  }
}

hello.bot


Example 2: A simple file-serving bot

# file: servefiles.config
# java properties
bot.name=FileServingBot
bot.login=examplebot
bot.version=ExampleBot 2
bot.verbose=1
# change server !1!
bot.server=irc.domain.tld
# change channel !1!
bot.channel=\#testchan
# change nick !1!
bot.admin=MyNick
# change dir !1!
bot.sharedir=C\:\\\\textfiles\\\\
# this one offers textfiles
file.extension=.txt

# file: servefiles.bot
# execute 'java -jar sleepybot[-all].jar servefiles.bot servefiles.config'
bot init {  
  $paketdelay = 5L;
  $args = size(@arguments);

  if ( $args > 1 ) {
    println("loading properties: " . @arguments[1] );
    %config = loadProperties( @arguments[1] );
  }
  
  if ( %config ) {
    @files = readFilelist(%config['bot.sharedir']);
    if ( size(@files) == 0 ) {
      println("no files to share");
      [java.lang.System exit: 1];
    }
    else {
      sorta(@files);
      foreach $file (@files) {
        println("$file");
      }
    }
    
    setName(%config['bot.name']);
    setLogin(%config['bot.login']);
    setVersion(%config['bot.version']);
    setVerbose(%config['bot.verbose']);
    connectServer(%config['bot.server'], 6667);
  }
  else {
    println("no properties");
    [java.lang.System exit: 1];
  }
}

bot onConnect {
  joinChannel(%config['bot.channel']);
}

bot onJoin {
  if ( $2 eq %config['bot.name'] ) {
    sendMessage($1, "Ready to serve files :-)" );
    sendMessage($1, "Open a dcc chat to me!" );
  }
}

bot onDisconnect {
  [java.lang.System exit: 0];
}

bot onFileTransferFinished {
  println( "onFileTransferFinished: (" . javaFileGetName(dftGetFile($1)) . 
      ") " . dftGetProgressPercentage($1) . " " . dftGetProgress($1) );
}


bot onIncomingChatRequest
{ # (DccChat chat)
  chatAccept($1);
  chatSendLine( $1, "Hi " . chatGetNick($1) );
  chatSendLine( $1, size(@files) . " files available" );
  chatSendLine( $1, "type !help for a list of commands" );
  chatReadLine( $1 );
}

bot onChatReadLine {
  local('@words');
  @words = split( ' ', $2 );
  if ( @words[0] eq '!help' ) {
    chatSendLine( $1, "COMMANDS ARE:" );
    chatSendLine( $1, "!count \t shows the number of files available" );
    chatSendLine( $1, "!list <num>\t lists 10 files from <num> " . 
                          "up (list starts at 0)" );
    chatSendLine( $1, "!get <num> \t sends the file <num> to you" );
    chatSendLine( $1, "" );
    chatReadLine( $1 );
  }
  else if ( @words[0] eq '!count' ) {
    chatSendLine( $1, size(@files) . " files available" );
    chatReadLine( $1 );
  }
  else if ( @words[0] eq '!list' ) {
    if ( -isnumber @words[1] ) {
      local('$tmp $start $end $i $jFfile @path');
      $tmp = iff ( @words[1] >= 0, @words[1], 0 );
      $start = iff( $tmp < size(@files), $tmp, (size(@files) - 10) );
      $end = iff(($start + 9) < size(@files),($start + 9),(size(@files)-1));
      chatSendLine( $1, "files " . $start . " - " . $end . ":" );
      for ( $i = $start; $i <= $end; $i++ ) {
        $jFile = newJavaFile(@files[$i]);
        chatSendLine( $1, "file " . $i . ": " . javaFileGetName( $jFile ) . 
              " (" . javaFileLength($jFile) . " bytes)" );
      }
    }
    else {
      chatSendLine( $1, "wrong parameter: " . @words[1] );
      chatSendLine( $1, "usage: !list <num>" );
    }
    chatReadLine( $1 );
  }
  else if ( @words[0] eq '!get' ) {
    local('$jFile $tmp $num $dccFile');
    $tmp = iff ( (-isnumber @words[1]), @words[1], -1 );
    $num = iff ( ( ($tmp >= 0 ) && ($tmp < size(@files) ) ), $tmp, -1 );
    if ( $num >= 0 ) {
      println("num: $num");
      # $jFile = newJavaFile(replace(@files[$num],' ', '_'));
      $jFile = newJavaFile(@files[$num]);
      chatSendLine( $1, "sending file: "  . javaFileGetName( $jFile ) . 
            " (" . javaFileLength($jFile) . " bytes)" );
      println("sending " . @files[$num] . " to " . chatGetNick($1) );
      # chatReadLine( $1 );
      $dccFile = dccSendFile( $jFile, chatGetNick($1), 120000L );
      dftSetPacketDelay($dccFile,$paketdelay);
      
      if ( -isdft $dccFile ) {
      	println("dccFileTransfer: " . $dccFile );
      	$timer = addTimer(&progress, 1, 0, $dccFile );
      	# addTimer passes always the timer instance as parameter $1
      	# so $dccFile will be $2 in &progress (see below)
      }
      else {
      	println("no dccFileTransfer: " . $dccFile );
      }
      chatReadLine( $1 );
    }
    else {
      chatSendLine( $1, "wrong parameter: " . @words[1] );
      chatSendLine( $1, "usage: !get <num> where <num> in range 0 - " . 
                             (size(@files) - 1) );
      chatReadLine( $1 );
    }
  }
  else if ( (@words[0] eq '!shutdown') && (chatGetNick($1) eq %config['bot.admin']) ) {
	shutdown();
  }
  else {
    chatSendLine( $1, "unknown command: " . $2 );
    chatReadLine( $1 );
  }
}

bot onFileTransferFinished {
  println( "filetranfer finished: (" . javaFileGetName(dftGetFile($1)) . ") " . 
            dftGetProgressPercentage($1) . " " . dftGetProgress($1) );
}

sub progress {
  if ( -isdft $2 ) {
    println( "progress: (" . javaFileGetName(dftGetFile($2)) . ") " . 
    dftGetProgressPercentage($2) . " " . dftGetProgress($2) );
  }
  else {
    println( "no dft: " . $2 );
  }
  if ( dftGetProgress($2) == dftGetSize($2) ) {
    if ( -istimer $1 ) {
      stopTimer( $1 );
    }
    else {
      println( "no timer: " . $1 );
    }
  }
}

sub readFilelist {
  local('@data $len $i');
  $jDir = newJavaFile($1);
  $jMP3Filter = newFileFilter( { # this is a closure
      if (endsWithIgnoreCase(javaFileGetName($1),%config['file.extension']) > 0 ) {
          return 1;
      } } # closure ends here.
      ,%config['file.extension']);
  @data = javaFileList($jDir,$jMP3Filter);
  $len = size(@data);
  for ( $i = 0; $i < $len; $i++ ) {
    @data[$i] = $1 . @data[$i];
  }
  return @data;
}

bot onPrivateMessage {
    if ( ($1 eq %config['bot.admin']) && ($4 eq '!shutdown') ) {
      shutdown();
    }
}

sub shutdown {
  println( %config['bot.channel'] . " -> Shuting down ..." )
  sendMessage( %config['bot.channel'] , "Shuting down ..." );
  quitServer('bye bye');
}

servefiles.config servefiles.bot                                                                                                                                                                                                                            

ululatus.org     Valid XHTML 1.0!      Valid CSS!      Last modified 16 Oct 2008 13:03