#!/usr/bin/perl use strict; use Net::IRC; use Time::HiRes qw( usleep ); my $nick = shift; my $server = shift; my $port = shift; my $name = shift; my $chan = shift; my $sleep_space = 1000; my $sleep_char = 1000; my %morse = ( 'A', '.-', 'B', '-...', 'C', '-.-.', 'D', '-..', 'E', '.', 'F', '..-.', 'G', '--.', 'H', '....', 'I', '..', 'J', '.---', 'K', '-.-', 'L', '.-..', 'M', '--', 'N', '-.', 'O', '---', 'P', '.--.', 'Q', '--.-', 'R', '.-.', 'S', '...', 'T', '-', 'U', '..-', 'V', '...-', 'W', '.--', 'X', '-..-', 'Y', '-.--', 'Z', '--..', '0', '-----', '1', '.----', '2', '..---', '3', '...--', '4', '....-', '5', '.....', '6', '-....', '7', '--...', '8', '---..', '9', '----.', '.', '.-.-.-', ',', '--..--', ':', '---...', ';', '-.-.-.', '?', '..--..', '\'', '.----.', '-', '-....-', '/', '-..-.', '(', '-.--.', ')', '-.--.-', '"', '.-..-.', ' ', '/' ); my $irc = new Net::IRC; my $conn = $irc->newconn( Nick => $nick, Server => $server, Port => $port); $irc->start; sub on_connect { my $self = shift; print "Joining $chan..."; $self->join($chan); $self->privmsg($chan, "I am a morse code thingie."); } sub on_public { my ($self, $event) = @_; my @to = $event->to; my ($nick, $mynick) = ($event->nick, $self->nick); my ($arg) = ($event->args); # Note that $event->to() returns a list (or arrayref, in scalar # context) of the message's recipients, since there can easily be # more than one. print "<$nick> $arg\n"; } sub play_morse { my $code = shift; my @chars = split //, $code; foreach my $char (@chars) { `play dit.wav` if ($char eq '.'); `play dah.wav` if ($char eq '-'); usleep($sleep_space) if ($char eq '/'); usleep($sleep_char); } } sub play_ascii { my $sentence = shift; uc $sentence; my $morse_str = ''; my @chars = split //, $sentence; foreach my $char (@chars) { $morse_str .= "$morse{$char} "; } play_morse($morse_str); } print "Installing handler routines..."; $conn->add_handler('public', \&on_public); $conn->add_global_handler(376, \&on_connect); print " done.\n"; print "starting...\n"; $irc->start; while (1) { # Take care of pending events $irc->do_one_loop(); # Now we input stuff and print it }