Advertisement
KeplerBR

BOT Chat Forum-Invader - 9/12/12

Dec 9th, 2012
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.60 KB | None | 0 0
  1. #!usr/bin/env perl
  2.  
  3. ###############
  4. ### Modulos ###
  5. ###############
  6. use common::sense;
  7. use WWW::Mechanize; # Ja tem os cookies automaticos
  8. use WWW::Mechanize::DecodedContent; # Plugin que adiciona o decoded_content
  9. use JSON -support_by_pp;
  10. use URI::Escape;
  11.  
  12. #########################
  13. ### Variáveis globais ###
  14. #########################
  15. my ($login, $senha);
  16. my $url = WWW::Mechanize->new();
  17.  
  18. ###############
  19. ###  LogIn  ###
  20. ###############
  21.  
  22. &login;
  23.  
  24. sub login {
  25.     #cookieuser
  26.     if (-e 'login.txt') { # Caso tenha os dados de login salvos no computador, tentar acessar por eles
  27.         print "Realizando login com os dados armazenados no 'login.txt'\n";
  28.         my @linesFile;
  29.        
  30.         open FILE_LOGIN_LEITURA, "<" . 'login.txt' or die "Cannot open file: $!";
  31.         @linesFile = <FILE_LOGIN_LEITURA>;
  32.         close FILE_LOGIN_LEITURA;
  33.        
  34.         $login = @linesFile[0]; $senha = @linesFile[1];
  35.     } else {
  36.         print "Login: ";
  37.         chomp ($login = <>);
  38.         print "Senha: ";
  39.         chomp ($senha = <>);
  40.     }
  41.  
  42.     $url->get("http://www.forum-invaders.com.br/vb/login.php");
  43.      
  44.     $url->submit_form(
  45.         fields => {
  46.             vb_login_username => $login,
  47.             vb_login_password => $senha,
  48.         }
  49.     );
  50.      
  51.     # Conferindo o LogIn
  52.     if($url->decoded_content =~ /Bem-vindo/gi) {
  53.         print "Bem-vindo, $login\n";
  54.         &logado;
  55.     } else {
  56.         $url->decoded_content =~ /re">(.+?)<\/div>/s;
  57.         &loginError($1);
  58.     }
  59. }
  60.  
  61. sub logado {
  62.     # Lembrar de mim?
  63.     if (!-e 'login.txt') {
  64.         print "Deseja salvar seu login e senha? (s/n) \n";
  65.         chomp (my $resposta = <>);
  66.        
  67.         if ($resposta eq 's') {
  68.             open FILE_LOGIN_ESCRITA,">". 'login.txt' or die "Cannot create file login.txt: $!";
  69.             print FILE_LOGIN_ESCRITA "$login\n$senha\n";
  70.             close FILE_LOGIN_ESCRITA;
  71.         }
  72.     }
  73.  
  74.     # Realizar leitura do arquivo mensagens.txt
  75.     print "Preparando leitura da lista de Ação -> Reação... \n";
  76.     my (@mensagemAcao, @mensagemReacao, $acao, $reacao);
  77.     if (-e 'mensagens.txt') {
  78.         open FILE_MENSAGENS, "<" . 'mensagens.txt' or die "Cannot open file: $!";
  79.         while (<FILE_MENSAGENS>) {
  80.             ($acao, $reacao) = split(/\t+/, $_);
  81.             push (@mensagemAcao, $acao);
  82.             push (@mensagemReacao, $reacao);
  83.             print "$acao    $reacao";
  84.         }
  85.         close FILE_MENSAGENS;
  86.     } else {
  87.         print "Erro: Você não tem o arquivo 'mensagens.txt'! Crie e configure conforme o tópico informa!\n";
  88.     }
  89.  
  90.     # Exibir os avisos do chat
  91.     my $chatDecorde = $url->get("http://www.forum-invaders.com.br/vb/vbshout.php?type=activeusers&do=ajax&action=fetch&instanceid=2")->decoded_content;
  92.     $chatDecorde =~ /y":"(.+?)(",)/;
  93.     print "Avisos do chat: $1 \n\n";
  94.      
  95.     # Definindo as variáveis antes de iniciar o loop
  96.     open OUT,">". 'log.txt' or die "Cannot create file log.txt: $!";
  97.     my $content = $url->get("http://www.forum-invaders.com.br/vb/forum.php")->decoded_content;
  98.     $content =~ /SECURITYTOKEN = "(.*?)"/g;
  99.     my $token = $1;
  100.     my $work = 1;
  101.     my @old;
  102.     my $num = 0;
  103.  
  104.     # Loop para atualizar as mensagens e guardar-las em um arquivo
  105.     while ($work == 1){
  106.                     my $r = $url->get("http://www.forum-invaders.com.br/vb/vbshout.php?type=activeusers&do=ajax&action=fetch&instanceid=2");
  107.                     my $json = JSON->new->relaxed;
  108.                     my $s = $json->decode($r->decoded_content);
  109.                     my $msg = $s->{"shouts"}->{0}->{"message_raw"};
  110.                     my $user = $s->{"shouts"}->{0}->{"musername"};
  111.                     my $name;
  112.                     if ($user =~ />(.+)<\/span/gi) {$name = $1;}
  113.                     else {$name = $user}
  114.                     my $now = join(" => ", $name, $msg);
  115.                     # Essa rotina implementei para evitar ficar repetindo mensagens
  116.                     if ($num == 0){
  117.                                    print $num . "\n" . "#" x 80 . "\n" . $now . "\n" . "#" x 80 . "\n";
  118.                                    print OUT $num . "\n" . "#" x 80 . "\n" . $now . "\n" . "#" x 80 . "\n";
  119.                                    push (@old, $now);
  120.                                    $num++;
  121.                     }
  122.                     elsif($old[$num - 1] ne $now){
  123.                                    print $num . "\n" . "#" x 80 . "\n" . $now . "\n" . "#" x 80 . "\n";
  124.                                    print OUT $num . "\n" . "#" x 80 . "\n" . $now . "\n" . "#" x 80 . "\n";
  125.                                    push (@old, $now);
  126.                                    $num++;
  127.  
  128.                         # Rotina para responder uma mensagem se tiver alguma relação pré-definida
  129.                         for (my $i = 0; $i <= @mensagemAcao; $i++) {
  130.                             if ($msg =~ /$mensagemAcao[$i]/gi) {
  131.                                 my $msg = uri_escape(@mensagemReacao[$i]);
  132.                                 $url->post("http://www.forum-invaders.com.br/vb/vbshout.php",{
  133.                                 message => $msg, securitytoken => $token,
  134.                                 do => "ajax", action => "save", instanceid => "2"});
  135.                                 }
  136.                         }
  137.                     }
  138.     }
  139.     close OUT;
  140. }
  141.  
  142. sub loginError {
  143.     print "Erro ao realizar login!\n";
  144.     print "Mensagem de erro: @_\n";
  145.     print "Tentar realizar login novamente? (s/n)\n";
  146.     chomp (my $resposta = <>);
  147.        
  148.     if ($resposta eq 's') {
  149.         &login;
  150.     }
  151. }
  152.  
  153. __END__
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement