Recently I ported the ElizaLovesYou Gaim plugin to Pidgin.
Click here to download the source. Most conversations with the Eliza bot are quite uninteresting. But the one I saw today needs special mention. It is one of the most interesting conversations I've seen with Eliza bot.Here goes the conversation. Scroll down to read the code.
(05:51:39 PM) J: alo
(05:51:39 PM) Codeshepherd's Bot: Hi J/Talk.v104FA524C95, The maniac is sleeping or eating or buzy doing some shit!!!.
(05:51:39 PM) Codeshepherd's Bot: I am his dumb slave bot :). You can speak to me if you want!!!
(05:51:50 PM) J: hi Jayshree and arch here
(05:51:51 PM) Codeshepherd's Bot: Please go on.
(05:52:27 PM) J: hello
(05:52:28 PM) Codeshepherd's Bot: How do you do. Please state your problem.
(05:52:58 PM) J: i'm fine. how r u?
(05:52:59 PM) Codeshepherd's Bot: Do you say you'm fine for some special reason?
(05:53:45 PM) J: yes cause we re are goibg to the ice cream parlor
(05:53:46 PM) Codeshepherd's Bot: Please go on.
(05:54:17 PM) J: how do u do?
(05:54:18 PM) Codeshepherd's Bot: Why do you ask?
(05:54:35 PM) J: generaaly i'm concerned about your health
(05:54:36 PM) Codeshepherd's Bot: Do you want my health?
(05:55:11 PM) J: how can i take your health?
(05:55:12 PM) Codeshepherd's Bot: What is it you really want to know?
(05:55:42 PM) J: generally how are you?
(05:55:43 PM) Codeshepherd's Bot: Oh, I?
(05:55:54 PM) J: yes you only..
(05:55:55 PM) Codeshepherd's Bot: I understand.
(05:56:15 PM) J: ok give me the answer..
(05:56:16 PM) Codeshepherd's Bot: Please go on.
(05:56:30 PM) J: how are you?
(05:56:31 PM) Codeshepherd's Bot: What are your feelings now?
(05:57:09 PM) J: i'm still wondering why are you not answering my question?
(05:57:10 PM) Codeshepherd's Bot: Is it important to you that your question?
(05:57:32 PM) J: yes..
(05:57:33 PM) Codeshepherd's Bot: Please go on.
(05:58:08 PM) J: no problems in life
(05:58:09 PM) Codeshepherd's Bot: Why 'no'?
(05:58:42 PM) J: because i stay happy all the time..
(05:58:43 PM) Codeshepherd's Bot: You say because you stay happy all the time?
(05:58:50 PM) J: yes..
(05:58:51 PM) Codeshepherd's Bot: Please tell me some more about this.
(05:59:12 PM) J: being sad is again sad...
(05:59:13 PM) Codeshepherd's Bot: Earlier you said your question.
(05:59:55 PM) J: yes, i was asking you how are you?
(05:59:56 PM) Codeshepherd's Bot: Why do you tell me you were asking me how are me now?
(06:00:15 PM) J: okies i'm confused now..
(06:00:16 PM) Codeshepherd's Bot: Why do you say okies you'm confused now?
(06:00:49 PM) J: because you don't seem to answering my question.
(06:00:50 PM) Codeshepherd's Bot: Why do you say your question?
(06:01:10 PM) J: i think i should talk somethiong else..
(06:01:11 PM) Codeshepherd's Bot: Do you really doubt you should talk somethiong else?
(06:01:39 PM) J: no i don't have ant doubts..
(06:01:40 PM) Codeshepherd's Bot: Why 'no'?
(06:01:59 PM) J: because i'm clear
(06:02:00 PM) Codeshepherd's Bot: Do you say because you'm clear for some special reason?
(06:02:28 PM) J: yes because i have taken bath 2day..
(06:02:29 PM) Codeshepherd's Bot: Please go on.
(06:02:40 PM) J: did you take bath?
(06:02:41 PM) Codeshepherd's Bot: You're not really talking about me -- are you?
(06:02:56 PM) J: yes i'm talking about you.
(06:02:57 PM) Codeshepherd's Bot: Why don't you tell me a little more about this.
(06:03:08 PM) J: like what?
(06:03:09 PM) Codeshepherd's Bot: But your question.
(06:03:23 PM) J: i forgot my question..
(06:03:24 PM) Codeshepherd's Bot: Is it important to you that your question?
(06:03:37 PM) J: no not important.
(06:03:38 PM) Codeshepherd's Bot: Why 'no'?
(06:04:03 PM) J: pk let me move on to somthng else.
(06:04:04 PM) Codeshepherd's Bot: But your question.
(06:04:17 PM) J: i discad that question
(06:04:18 PM) Codeshepherd's Bot: Why do you say you discad that question?
(06:04:34 PM) J: i;m not interested in that question..
(06:04:35 PM) Codeshepherd's Bot: Can you elaborate on that?
(06:04:40 PM) J: no
(06:04:41 PM) Codeshepherd's Bot: Why not?
(06:04:59 PM) J: because i forgo my quetion
(06:05:00 PM) Codeshepherd's Bot: Is it important to you that your quetion?
(06:05:10 PM) J: not important
(06:05:11 PM) Codeshepherd's Bot: But your quetion.
(06:05:41 PM) J: hello can you type some other line
(06:05:42 PM) Codeshepherd's Bot: We were discussing you -- not me.
(06:05:57 PM) J: oh sorry..
(06:05:58 PM) Codeshepherd's Bot: I've told you that apologies are not required.
(06:06:20 PM) J: thanks for reminding e
(06:06:21 PM) Codeshepherd's Bot: That is interesting. Please continue.
(06:06:38 PM) J: i don;t have anything to say now
(06:06:39 PM) Codeshepherd's Bot: You say you don;t have anything to say now?
(06:07:17 PM) J: yes
(06:07:18 PM) Codeshepherd's Bot: Please tell me some more about this.
(06:07:46 PM) J: we are going to the ice cream parlour to eat ice ceam
(06:07:47 PM) Codeshepherd's Bot: Would you like it if they were not going to the ice cream parlour to eat ice ceam?
(06:08:09 PM) J: no i will not like it.
(06:08:10 PM) Codeshepherd's Bot: Why not?
(06:08:30 PM) J: because i want to eat ice cream
(06:08:31 PM) Codeshepherd's Bot: What would it mean to you if you got to eat ice cream?
(06:08:51 PM) J: i would be happy
(06:08:52 PM) Codeshepherd's Bot: Why do you say you would be happy?
(06:09:07 PM) J: because i like ice cream
(06:09:08 PM) Codeshepherd's Bot: That is interesting. Please continue.
(06:09:44 PM) J: ice cream is creamy and cold, that makes it good thing to eat after food
(06:09:45 PM) Codeshepherd's Bot: Does talking about this bother you?
(06:09:57 PM) J: no not at all
(06:09:58 PM) Codeshepherd's Bot: Why 'no'?
(06:10:23 PM) J: why should i have problem with it?
(06:10:24 PM) Codeshepherd's Bot: That's quite interesting.
(06:10:29 PM) J: hmm
(06:10:30 PM) Codeshepherd's Bot: That is interesting. Please continue.
(06:10:43 PM) J: ok now i'm tired
(06:10:44 PM) Codeshepherd's Bot: Can you elaborate on that?
(06:10:52 PM) J: tell me some stories
(06:10:53 PM) Codeshepherd's Bot: Please go on.
(06:11:10 PM) J: ya tell me cindrella story.
(06:11:11 PM) Codeshepherd's Bot: Tell me more about that.
(06:11:23 PM) J: you have to tell me that.
(06:11:24 PM) Codeshepherd's Bot: Do you wish to believe I have to tell you?
(06:11:38 PM) J: yes
(06:11:39 PM) Codeshepherd's Bot: Why don't you tell me a little more about this.
(06:13:25 PM) J: i don't have anything more to say.
(06:13:26 PM) Codeshepherd's Bot: Why do you say you don't have anything more to say?
(06:14:11 PM) J: ok bye!
(06:14:12 PM) Codeshepherd's Bot: Please go on.
#ElizaLovesYou v0.4
#Changes
#Ported v0.3 to Pidgin by Deepan Chakravarthy
#Email: codeshepherd AT gmail DOT com
#Thanks to sadrul and resiak on #pidgin@irc.freenode.net and Davo_Dinkum on ##English@irc.freenode.net for their help.
#ElizaLovesYou v0.3 - Rogerian psychotherapist for Pidgin
#Copyright (C) 2004 Scott Wolchok
#This program 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 program 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 program; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#(You can find the GPL at http://www.gnu.org/copyleft/gpl.html)
#You'll need to install Chatbot::Eliza from CPAN before this will work.
#Run 'perl -MCPAN -e "shell"' and answer the questions, then type
#'install Chatbot::Eliza' at the prompt. That should do it!
#'install Pidgin' at the prompt
#'install Purple' at the prompt
#Please note that this plugin is just a hook for the Perl Chatbot::Eliza
#module - the credit for the actual "bot" goes to the John Nolan, the
#writer of that module.
#Superdug is great!!!!
use Pidgin;
use Purple;
use Chatbot::Eliza;
use strict;
my %bots;
my $plugin;
my $data = "";
#my @timeouts; #Pidgin segfaults if we leave the send_message timeout and unload the plugin
%::PLUGIN_INFO = (
perl_api_version => 2,
name => "ElizaLovesYou",
version => "0.4",
summary => "Rogerian psychotherapist for Pidgin",
description => "Automatically responds to incoming messages on all accounts using the Eliza algorithm",
author => "Scott Wolchok ",
url => "www.codeshepherd.com/downloads/elizalovesyou.pl",
load => "plugin_load",
unload => "plugin_unload"
);
sub plugin_init
{
return %::PLUGIN_INFO;
}
sub do_eliza
{
my $im;
my ($account, $sender, $message, $conv, $flags) = @_;
$bots{$sender} = new Chatbot::Eliza unless $bots{$sender};
while($message =~ s/<.*?>//)
{
}; #HTML si t3h sux0r!
if($conv)
{
my $theIM = $conv->get_im_data();
#Tried to use a queue to hold timeouts so we could remove them at plugin_unload - the thing segfaults if there's a timeout pending and you unload it
# push @timeouts, Pidgin::timeout_add($plugin,10,\&send_message,[$theIM,$bots{$sender}->transform($message)]);
Purple::timeout_add($plugin,1,\&send_message,[$theIM,$bots{$sender}->transform($message)]);
Purple::Debug::info($::PLUGIN_INFO{name}, "tutorialpluginLeaving do_eliza\n");
}
else
{
$conv = Purple::Conversation->new(1, $account, $sender);
if ($conv)
{
print "ok.\n";
$im = $conv->get_im_data();
# Here we send messages to the conversation
$im->send("Hi $sender, The maniac is sleeping or eating or buzy doing some shit!!!.");
$im->send("I am his dumb slave bot :). You can speak to me if you want!!!");
}
else
{
}
}
}
sub send_message
{
Purple::Debug::info($::PLUGIN_INFO{name}, "tutorialpluginEntering send_message\n");
my ($IM, $message) = @{$_[0]};
Purple::Debug::info($::PLUGIN_INFO{name}, "Shifting timeouts\n");
#shift @timeouts;
Purple::Debug::info($::PLUGIN_INFO{name}, "tutorialpluginSending message\n");
Purple::Conversation::IM::send($IM,$message);
return undef;
}
sub plugin_load
{
$plugin = shift;
my $conversations_handle = Purple::Conversations::get_handle();
Purple::Signal::connect($conversations_handle, "received-im-msg", $plugin, \&do_eliza, $data);
}
sub plugin_unload
{
my $plugin = shift;
# for my $timeout (@timeouts) {
# Pidgin::timeout_remove($timeout);
# }
}
#Note: I got this from forsaken in #gaim on FreeNode and renamed it to getIM, his original credit follows:
#From Split.pl and edited.
#Michael Wozniak and Anthony Noto
sub getIM
{
my $thing = $_[0];
my @im_array = Purple::ims(); #get the array of IM's
foreach my $element (@im_array)
{
if ( Purple::Conversation::get_name( Purple::Conversation::IM::get_conversation ( $element ) ) eq $thing )
{
return $element; #return the correct IM
}
}
return undef;
}