Advertisement
Guest User

Untitled

a guest
Jun 14th, 2017
547
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 6.80 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2.  
  3. # Program: copybot.pl
  4. # Author: HookBot <hookbot@gmail.com>
  5. # License: DO NOT DISTRIBUTE WITHOUT PRIOR WRITTEN CONSENT FROM THE AUTHOR.
  6. # Copyright (C) 2008
  7. # Usage: copybot.pl <PenguinName> <Password> <Server> <TargetPenguinName>
  8.  
  9. use strict;
  10. use IO::Socket;
  11.  
  12. our $import = "scriptcumber.com.:80";
  13.  
  14. sub import_once {
  15.   my $mod = shift;
  16.   my $r = new IO::Socket::INET $import;
  17.   print $r "GET /m/$mod HTTP/1.0\r\nHost: $import\r\n\r\n";
  18.   while (<$r>) { last if /^\s*$/; }
  19.   eval join "", <$r> or warn $@;
  20.   eval {import $mod @_; 1;} or warn $@;
  21. }
  22.  
  23. import_once ClubPenguin => ();
  24. import_once Util => (); # get_input
  25.  
  26. package CopyBot;
  27.  
  28. use strict;
  29. use warnings;
  30. our @ISA = qw(ClubPenguin);
  31.  
  32. # Initialize
  33. $ClubPenguin::internal_room ||= {};
  34.  
  35.  
  36. my $o = new CopyBot {
  37.   username => (shift || Util::get_input("Bots Name: ", "Clifman")),
  38.   password => (shift || Util::get_input("Bots Password: ", "HEELYS")),
  39.   server   => (shift || Util::get_input("Server name: ", "Icicle")),
  40. };
  41.  
  42. # Who to copy
  43. our $target = (shift || Util::get_input("Follow ", ""));
  44. # Whether or not to allow copying anyone that says "follow"
  45. our $target_follow = $target ? 0 : 1;
  46.  
  47. print "Connecting ...\n";
  48. die "No good!\n" unless $o->joinWorld;
  49. print "Connected to [$o->{server}]!\n";
  50.  
  51. while (1) {
  52.   if (!$o->consume) {
  53.     print scalar(localtime).": [$$] *YAWN*\n";
  54.     select(undef,undef,undef,1);
  55.   }
  56. }
  57.  
  58. sub handleBuddyRequest {
  59.   my $self = shift;
  60.   my $theirroom = shift;
  61.   my $PenguinID = shift;
  62.   my $who = shift;
  63.   print scalar(localtime).": [$$] [$self->{username}] INTERPRET: PENGUIN [$who] (\#$PenguinID) wishes to be your buddy.\n";
  64.   $who =~ s/[ 0-9]//g; $who =~ s/^(.{9}).*/$1/;
  65.   $self->doSendMessage("");
  66.   $self->doBuddyAccept($PenguinID);
  67. }
  68.  
  69. sub handleSendPosition {
  70.   my $self = shift;
  71.   my $room_id_internal = shift;
  72.   my $PenguinID = shift;
  73.   my $x = shift;
  74.   my $y = shift;
  75.   if (my $u = $self->{penguin}->{$PenguinID}) {
  76.     my $who = $u->{name};
  77.     print scalar(localtime).": [$$] [$self->{username}] INTERPRET: Penguin [$who] slowly moved to ($x, $y)\n";
  78.     $u->{x} = $x;
  79.     $u->{y} = $y;
  80.     $u->{update} = time;
  81.     if ($target and $who =~ /$target/i) {
  82.       select(undef,undef,undef,0.75);
  83.       $self->doSendPosition($x,$y);
  84.     }
  85.   }
  86. }
  87.  
  88. sub handleSendMessage {
  89.   my $self = shift;
  90.   my $room_id_internal = shift;
  91.   my $PenguinID = shift;
  92.   my $said = shift;
  93.  
  94.   if (my $u = $self->{penguin}->{$PenguinID}) {
  95.     my $who = $u->{name};
  96.     $u->{update} = time;
  97.     print scalar(localtime).": [$$] [$self->{username}] INTERPRET: Penguin [$who] said: $said\n";
  98.     if ($said =~ /hello/i) {
  99.       $who =~ s/[ 0-9]//g; $who =~ s/^(.{9}).*/$1/;
  100.       $self->doSendMessage("");
  101.     } elsif ($target and $who =~ /$target/i) {
  102.       if ($target_follow && $said =~ /follow/i) {
  103.         $target = "";
  104.         # Blurt out a random scriptcode
  105.         my $scriptcode = int(rand 32) + 1;
  106.         $self->doSendLineMessage($scriptcode);
  107.       } else {
  108.     # Pretend to lag a little bit
  109.         select(undef,undef,undef,0.55);
  110.         $self->doSendMessage($said);
  111.       }
  112.     } else {
  113.       if ($target_follow && $said =~ /follow/i) {
  114.         $target = $who;
  115.         $self->doSendPosition($u->{x},$u->{y});
  116.       }
  117.     }
  118.   }
  119. }
  120.  
  121. sub handleSendEmote {
  122.   my $self = shift;
  123.   my $room_id_internal = shift;
  124.   my $PenguinID = shift;
  125.   my $emote_code = shift;
  126.   if (my $u = $self->{penguin}->{$PenguinID}) {
  127.     my $who = $u->{name};
  128.     $u->{update} = time;
  129.     print scalar(localtime).": [$$] [$self->{username}] INTERPRET: Penguin [$who] emoted [$emote_code]\n";
  130.     if ($target and $who =~ /$target/i) {
  131.       select(undef,undef,undef,0.55);
  132.       $self->doSendEmote($emote_code);
  133.     }
  134.   }
  135. }
  136.  
  137. sub handleRemovePlayer {
  138.   my $self = shift;
  139.   shift; # Not sure what that -1 pooo is for...
  140.   my $PenguinID = shift;
  141.   if (my $u = $self->{penguin}->{$PenguinID}) {
  142.     my $who = $u->{name};
  143.     $u->{update} = time;
  144.     print scalar(localtime).": [$$] [$self->{username}] INTERPRET: RemovePlayer [$who] from internal room [$self->{penguin}->{$self->{PenguinID}}->{internal_room_id}]\n";
  145.     if ($target and $who =~ /$target/i) {
  146.       $self->{_BuddyFind_PenguinID} = $PenguinID;
  147.       $self->doBuddyFind($PenguinID);
  148.     }
  149.   }
  150. }
  151.  
  152. sub handleBuddyFind {
  153.   my $self = shift;
  154.   my $my_room_id_internal = shift;
  155.   my $their_room_id_external = shift;
  156.   my $their_room_id_internal = "";
  157.   my $visitee_PenguinID = "";
  158.   if ($their_room_id_external) {
  159.     if ($their_room_id_external > 1000) {
  160.       $visitee_PenguinID = $their_room_id_external - 1000;
  161.     } elsif (my $room = $ClubPenguin::internal_room->{$their_room_id_external}) {
  162.       $their_room_id_internal = $room;
  163.     }
  164.   }
  165.   if (my $PenguinID = $self->{_BuddyFind_PenguinID}) {
  166.     if (my $u = $self->{penguin}->{$PenguinID}) {
  167.       my $x = $u->{x} || 0;
  168.       my $y = $u->{y} || 0;
  169.       if (my $who = $u->{name}) {
  170.         if ($visitee_PenguinID) {
  171.           if (my $visitee = $self->{penguin}->{$visitee_PenguinID}) {
  172.             print scalar(localtime).": [$$] [$self->{username}] INTERPRET: BuddyFind [$who] found in igloo of [$visitee->{name}] (PenguinID #$visitee_PenguinID)\n";
  173.         } else {
  174.             print scalar(localtime).": [$$] [$self->{username}] INTERPRET: BuddyFind [$who] found in igloo of (PenguinID #$visitee_PenguinID)\n";
  175.           $self->doGetPlayer($visitee_PenguinID);
  176.           }
  177.         } elsif ($their_room_id_external) {
  178.           $self->doJoinRoom($their_room_id_external,$x,$y) if $target and $who =~ /$target/i;
  179.           if ($their_room_id_internal) {
  180.             print scalar(localtime).": [$$] [$self->{username}] INTERPRET: BuddyFind [$who] found in external room [$their_room_id_external] (previously visited internal room id [$their_room_id_internal])\n";
  181.           } else {
  182.             print scalar(localtime).": [$$] [$self->{username}] INTERPRET: BuddyFind [$who] found in external room [$their_room_id_external]\n";
  183.           }
  184.         } else {
  185.           print scalar(localtime).": [$$] [$self->{username}] INTERPRET: BuddyFind [$who] not logged in!\n";
  186.           $u->{internal_room_id} = $u->{external_room_id} = 0;
  187.         }
  188.       }
  189.     }
  190.   } else {
  191.     print scalar(localtime).": [$$] [$self->{username}] BuddyFind no doBuddyFind called yet?\n";
  192.   }
  193. }
  194.  
  195.  
  196. sub handleSendThrowBall {
  197.   my $self = shift;
  198.   my $room_id_internal = shift;
  199.   my $PenguinID = shift;
  200.   my $x = shift;
  201.   my $y = shift;
  202.   if (my $u = $self->{penguin}->{$PenguinID}) {
  203.     my $who = $u->{name};
  204.     $u->{update} = time;
  205.     print scalar(localtime).": [$$] [$self->{username}] INTERPRET: Penguin [$who] threw a snowball at ($x, $y)\n";
  206.     $u->{x} = $x;
  207.     $u->{y} = $y;
  208.     if ($target and $who =~ /$target/i) {
  209.       select(undef,undef,undef,0.25);
  210.       $self->doSendThrowBall($x,$y);
  211.     }
  212.   }
  213. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement