如何让我的Perl Jabber机器人成为事件驱动程序?

如何让我的Perl Jabber机器人成为事件驱动程序?,第1张

概述我正在尝试制作一个Jabber机器人,我在等待消息时无法保持运行状态.如何让我的脚本继续运行?我试过调用一个子程序,它有一个while循环,我理论上已经设置检查任何消息并作出相应的反应,但我的脚本不是这样的. 这是我的来源:http://pastebin.com/03Habbvh # set jabber bot callbacks$jabberBot->SetMessageCallBacks 我正在尝试制作一个Jabber机器人,我在等待消息时无法保持运行状态.如何让我的脚本继续运行?我试过调用一个子程序,它有一个while循环,我理论上已经设置检查任何消息并作出相应的反应,但我的脚本不是这样的.

这是我的来源:http://pastebin.com/03Habbvh

# set jabber bot callbacks$jabberBot->SetMessageCallBacks(chat=>\&chat);$jabberBot->SetPresenceCallBacks(available=>\&welcome,unavailable=>\&killBot);$jabberBot->SetCallBacks(receive=>\&prnt,iq=>\&gotIQ);$jabberBot->PresenceSend(type=>"available");$jabberBot->Process(1);sub welcome{    print "Welcome!\n";    $jabberBot->MessageSend(to=>$jbrBoss->GetJID(),subject=>"",body=>"Hello There!",type=>"chat",priority=>10);    &keepItGoing;}sub prnt{    print $_[1]."\n";}#$jabberBot->MessageSend(to=>$jbrBoss->GetJID(),body=>"Hello There! Global...",priority=>10);#$jabberBot->Process(5);#&keepItGoing;sub chat{    my ($sessionID,$msg) = @_;    $dump->pl2xml($msg);    if($msg->GetType() ne 'get' && $msg->GetType() ne 'set' && $msg->GetType() ne '')    {        my $jbrCmd = &trimspaces($msg->Getbody());        my $dbQry = $dbh->prepare("SELECT command,ackNowledgement FROM commands WHERE message = '".lc($jbrCmd)."'");        $dbQry->execute();        if($dbQry->rows() > 0 && $jbrCmd !~ /^insert/si)        {            my $ref = $dbQry->fetchrow_hashref();            $dbQry->finish();            $jabberBot->MessageSend(to=>$msg->GetFrom(),body=>$ref->{'ackNowledgement'},priority=>10);            eval $ref->{'command'};            &keepItGoing;        }        else        {            $jabberBot->MessageSend(to=>$msg->GetFrom(),body=>"I dIDn't understand you!",priority=>10);            $dbQry->finish();            &keepItGoing;        }    }}sub gotIQ{    print "iq\n";}sub trimspaces{    my $string = $_[0];    $string =~ s/^\s+//; #remove leading spaces    $string =~ s/\s+$//; #remove trailing spaces    return $string;}sub keepItGoing{    print "keepItGoing!\n";    my $proc = $jabberBot->Process(1);    while(defined($proc) && $proc != 1)    {        $proc = $jabberBot->Process(1);    }}sub killBot{    print "killing\n";    $jabberBot->MessageSend(to=>$_[0]->GetFrom(),body=>"Logging Out!",priority=>10);    $jabberBot->Process(1);    $jabberBot->disconnect();    exit;}
解决方法 POE有一些非常好的事件框架.我不知道Jabber(POE :: Component :: Jabber)有多好,但它可能值得一看. 总结

以上是内存溢出为你收集整理的如何让我的Perl Jabber机器人成为事件驱动程序?全部内容,希望文章能够帮你解决如何让我的Perl Jabber机器人成为事件驱动程序?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1213598.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存