sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

index.md (3881B)


      1 Bots
      2 ====
      3 Its very easy to write shell script based bots with ii. As a short example look
      4 at this:
      5 
      6 	tail -f \#<CHANNEL>/out |
      7 	    while read -r date time nick mesg; do
      8 		nick="${nick#<}"
      9 		nick="${nick%>}"
     10 		printf "%s: WHAT??\n" "$nick"
     11 	    done >#<CHANNEL>/in
     12 
     13 Its just spamming a channel but I guess your imagination is boundless. I also
     14 heard about people using it together with nagios to get the notifications into
     15 IRC. Remember to strip input for example with tr(1), tr -cd "0-9a-zA-Z" for
     16 example would only allow numbers and characters.
     17 
     18 If you want to see a live demonstration of a bot written for ii, join #grml on
     19 freenode, the grml-tips bot which searches for [grml](http://www.grml.org) tips
     20 and gives a link or error messages is written in 45 lines of /bin/sh. No, I
     21 will not publish the code since I really suck in shell programming :)
     22 
     23 Stat scripts
     24 ------------
     25 If you want to use for example [pisg](http://pisg.sf.net/) to generate channel
     26 stats this will also work if you choose the irssi log format.
     27 
     28 Automatic reconnects
     29 --------------------
     30 If you want some kind of automatic reconnects in ii you can make a something
     31 like this in a shell script:
     32 
     33 	while true; do
     34 	    ii -s irc.oftc.net -n iifoo -f "John Doe" &
     35 	    iipid="$!"
     36 	    sleep 5
     37 	    printf "/j %s\n" "#ii" > ~/irc/irc.oftc.net/in
     38 	    wait "$iipid"
     39 	done
     40 
     41 bots for irc it (ii)
     42 ====================
     43 
     44 iibot
     45 -----
     46 [iibot](https://github.com/c00kiemon5ter/iibot) by c00kiemon5ter is written in
     47 bash, but can easily be translated to plain sh (ask him).
     48 
     49 It uses a main script to connect to multiple servers and channels, and
     50 auto-reconnect and auto-join on network failure.
     51 
     52 It reads commands with a leading '!' and calls a secondary script to handle the
     53 command and the responce. That way commands can be added or removed
     54 dynamically. The secondary script knows the network, channel, nick and message
     55 that triggered the command, so it is easy to filter responses to commands to
     56 specified channels, users and such.
     57 
     58 if you need help, do not hesitate to ask c00kiemon5ter on freenode and oftc.
     59 
     60 nagios
     61 ------
     62 Simple Perl script "nagios\_post.pl" as interface between
     63 [Nagios](http://www.nagios.org/) and ii:
     64 
     65 	#!/usr/bin/perl -w
     66 
     67 	my $users = "your_nickname(s)";
     68 	my $pipe = "$ENV{HOME}/irc/your_irc_server/#your_channel/in";
     69 	my %color = (
     70 	   red    => "\0034",
     71 	   purple => "\0036",
     72 	   yellow => "\0038",
     73 	   clear  => "\00315",
     74 	   blue   => "\0032\002",
     75 	   green  => "\0033",
     76 	   normal => "\0031",
     77 	   );
     78 
     79 	open(PIPE, '>', $pipe) or die "Can't write to $pipe: $!";
     80 	while (<>) {
     81 	      s/Host [a-z0-9_.]+ is down/$color{red}$&$color{normal}/i;
     82 	      s/PROBLEM.*?CRITICAL/$color{red}$&$color{normal}/i;
     83 
     84 	      s/PROBLEM.*?WARNING/$color{yellow}$&$color{normal}/i;
     85 	      s/Host [a-z0-9_.]+ is up/$color{green}$&$color{normal}/i;
     86 
     87 	      s/RECOVERY.*?OK/$color{green}$&$color{normal}/i;
     88 
     89 	      print PIPE "$users: $_";
     90 	}
     91 	close(PIPE);
     92 
     93 The appropriate Nagios configuration looks like this:
     94 
     95 	# 'notify-by-irc' command definition
     96 	define command{
     97 	        command_name    notify-by-irc
     98 	        command_line    /usr/bin/printf "%b" "$TIME$ $NOTIFICATIONTYPE$ $HOSTNAME$/$SERVICEDESC$ $SERVICESTATE$ $SERVICEOUTPUT$\n" | /home/nagios/bin/nagios_post.pl
     99 	       }
    100 
    101 	# 'host-notify-by-irc' command-notification
    102 	define command{
    103 	        command_name    host-notify-by-irc
    104 	        command_line    /usr/bin/printf "%b" "$TIME$ Host $HOSTALIAS$ is $HOSTSTATE$ -- $HOSTOUTPUT$\n" | /home/nagios/bin/nagios_post.pl
    105 	       }
    106 
    107 Start ii appropriately and add notify-by-irc and host-notify-by-irc to the
    108 appropriate "service&#x5f;notification&#x5f;commands" and
    109 "host&#x5f;notification&#x5f;commands" -- and you have your own Nagios IRC bot.
    110 
    111 rsstail
    112 -------
    113 Just piping the output of [rsstail](http://www.vanheusden.com/rsstail/) into
    114 the fifo "in" should work. More detailed examples are welcome.