Author: muffin
Date: 2005-11-24 18:47:40 -0500 (Thu, 24 Nov 2005)
New Revision: 942
Added:
trunk/perl/client/example/
trunk/perl/client/example/clitest.pl
trunk/perl/client/example/megahalhaver.pl
Removed:
trunk/perl/client/clitest.pl
Modified:
trunk/perl/client/lib/Haver/Client.pm
Log:
Create perl/client/example for client examples.
Add a 'HAVER' event to Client.pm so the client can know about the server's host
and version.
Make the 'READY' event include the user's logged in name as an argument, just
in case.
Add megahalhaver.pl to examples. It's Am1 for Haver! Quote list not included.
Deleted: trunk/perl/client/clitest.pl
===================================================================
--- trunk/perl/client/clitest.pl 2005-11-24 19:59:49 UTC (rev 941)
+++ trunk/perl/client/clitest.pl 2005-11-24 23:47:40 UTC (rev 942)
@@ -1,53 +0,0 @@
-#!/usr/bin/perl
-#BEGIN { eval { require Event; } }
-
-use POE;
-use Haver::Client;
-
-POE::Session->create(
- inline_states => {
- _start => sub {
- print "id=" . $_[SESSION]->ID, "\n";
- Haver::Client->create(alias => 'haver');
- $poe_kernel->post('haver', 'register', 'all');
- $poe_kernel->post('haver', 'connect',
- name => 'testbot',
- host => 'hardison.net',
- port => 7575,
- );
- },
- haver_READY => sub {
- print "ready\n";
- $poe_kernel->post('haver', 'join', 'lobby');
- },
- haver_JOIN => sub {
- my ($chan, $who) = @_[ARG1,ARG2];
- $poe_kernel->post('haver', 'public', $chan, 'say', "Hi, $who");
- },
- haver_PART => sub {
- my ($chan, $who) = @_[ARG1,ARG2];
- $poe_kernel->post('haver', 'public', $chan, 'say', "Bye, $who");
- },
- haver_IJOINED => sub {
- my $chan = $_[ARG1];
- $poe_kernel->post('haver', 'public', $chan, 'say', 'Hi, all!');
- },
- haver_IPARTED => sub {
- # $poe_kernel->post('haver', 'disconnect');
- $poe_kernel->post('haver', 'destroy');
- },
- haver_PUBLIC => sub {
- my ($chan, $who, $type, @args) = @_[ARG1..$#_];
- return unless $type eq 'say';
- return if $who eq 'testbot';
- $poe_kernel->post('haver', 'public', $chan, 'say', "$who:
$args[0]");
- if (@args[0] eq 'go away') {
- $poe_kernel->post('haver', 'part', $chan);
- }
- },
- haver_PRIVATE => sub {
- my ($who, $t, @args) = @_[ARG1..$#_];
- $poe_kernel->post('haver', 'private', $who, $t, @args);
- },
- });
-$poe_kernel->run();
Copied: trunk/perl/client/example/clitest.pl (from rev 941,
trunk/perl/client/clitest.pl)
Added: trunk/perl/client/example/megahalhaver.pl
===================================================================
--- trunk/perl/client/example/megahalhaver.pl 2005-11-24 19:59:49 UTC (rev
941)
+++ trunk/perl/client/example/megahalhaver.pl 2005-11-24 23:47:40 UTC (rev
942)
@@ -0,0 +1,96 @@
+#!/usr/bin/perl
+
+# vim: set ft=perl ts=4 sw=4:
+# megahalhaver.pl - A Haver MegaHAL bot using Haver::Client.
+#
+# Copyright (C) 2005 Eric Goodwin.
+#
+# This module is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This module is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this module; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+use warnings;
+use strict;
+
+use POE;
+use Haver::Client;
+use AI::MegaHAL;
+
+my $server = "hardison.net";
+my $port = "7575";
+my $nick = "MegaHAL";
+my @chans = ('lobby');
+my $daemon = 1;
+my $owner = "Owner";
+
+print "Haver Megahal Bot loading...\n";
+
+daemonize() if ($daemon);
+
+my $megahal = AI::MegaHAL->new('Path' => './', 'Banner' => 1, 'Prompt' => 0,
'Wrap' => 0, 'AutoSave' => 0);
+
+POE::Session->create(
+ inline_states => {
+ _start => sub {
+ Haver::Client->create(alias => 'haver');
+ $poe_kernel->post('haver', 'register', 'all');
+ $poe_kernel->post('haver', 'connect',
+ name => $nick,
+ host => $server,
+ port => $port,
+ );
+ },
+ haver_READY => sub {
+ my $loggedinnick = $_[ARG1];
+ my $chan;
+ foreach $chan (@chans) {
+ $poe_kernel->post('haver', 'join', $chan);
+ }
+ },
+ haver_IJOINED => sub {
+ my $chan = $_[ARG1];
+ },
+ haver_IPARTED => sub {
+ my $chan = $_[ARG1];
+ $poe_kernel->post('haver', 'join', $chan);
+ },
+ haver_PUBLIC => sub {
+ my ($chan, $who, $type, @args) = @_[ARG1..$#_];
+ return if $who eq $nick;
+ if (lc($args[0]) =~ /go away/i && lc($who) eq lc($owner)) {
+ $poe_kernel->post('haver', 'public', $chan, 'say', "Bye!");
+ $poe_kernel->post('haver', 'part', $chan);
+ return;
+ }
+ if (lc($args[0]) =~ /$nick/i) {
+ my $reply = lc($args[0]);
+ my $lcnick = lc($nick);
+ $reply =~ s/$lcnick//i;
+ my $response = $megahal->do_reply($reply);
+ $poe_kernel->post('haver', 'public', $chan, 'say', $response);
+ }
+ },
+ });
+$poe_kernel->run();
+
+sub daemonize {
+ close(STDERR);
+ close(STDIN);
+ close(STDOUT);
+ my $pid = fork;
+ exit if $pid;
+ die("Daemonization failed!") unless defined $pid;
+ POSIX::setsid() or die "SERVER: Can't start a new session: $!";
+ $SIG{PIPE} = 'IGNORE';
+ $SIG{HUP} = 'IGNORE';
+}
Modified: trunk/perl/client/lib/Haver/Client.pm
===================================================================
--- trunk/perl/client/lib/Haver/Client.pm 2005-11-24 19:59:49 UTC (rev
941)
+++ trunk/perl/client/lib/Haver/Client.pm 2005-11-24 23:47:40 UTC (rev
942)
@@ -338,12 +338,13 @@
$heap->{host} = $host;
$kernel->yield('send_raw', 'IDENT', $heap->{name});
$heap->{state} = S_LOGIN;
+ dispatch('haver', $host, $version);
}
sub msg_HELLO {
- my $heap = $_[HEAP];
+ my ($heap, $user) = @_[HEAP,ARG1];
$heap->{state} = S_ONLINE;
- dispatch('ready');
+ dispatch('ready', $user);
}
sub msg_JOIN {