Advertisement
Guest User

Untitled

a guest
May 4th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.26 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use AnyEvent::IRC::Client;
  6. use AnyEvent::Twitter::Stream;
  7. use Encode ();
  8.  
  9. my $irc_connects = {
  10.     freenode => {
  11.         channels => ['#perl-casual'],
  12.         server  => 'irc.freenode.net',
  13.         port    => 6667,
  14.         nick    => 'twitter_bot',
  15.     },
  16.     freenode2 => {
  17.         channels => ['#perl-casual'],
  18.         server  => 'irc.freenode.net',
  19.         port    => 6667,
  20.         nick    => 'twitter_bot_2',
  21.     }
  22. };
  23. my @servers = keys %{$irc_connects};
  24.  
  25.  
  26. my $trac_map = {
  27.     '#perl-casual' => [
  28.         {
  29.             server => 'freenode',
  30.             channel => '#perl-casual',
  31.         },
  32.         {
  33.             server => 'freenode2',
  34.             channel => '#perl-casual',
  35.         },
  36.     ],
  37.     '#perl-casual-jp' => [
  38.         {
  39.             server => 'freenode',
  40.             channel => '#perl-casual',
  41.         },
  42.         {
  43.             server => 'freenode2',
  44.             channel => '#perl-casual',
  45.         },
  46.     ],
  47. };
  48.  
  49. my $twitter_connect = {
  50.     username => 'nihen',
  51.     password => '',
  52.     track    => join ',', keys %{$trac_map},
  53. };
  54.  
  55.  
  56.  
  57.  
  58. my $cv = AnyEvent->condvar;
  59. while ( my ( $name, $irc_connect ) = each %{$irc_connects} ) {
  60.     my $ae = AnyEvent::IRC::Client->new;
  61.     $ae->reg_cb(
  62.         connect => sub {
  63.             my ( $pc, $err ) = @_;
  64.             if ( defined $err ) {
  65.                 warn $err;
  66.                 return;
  67.             }
  68.         },
  69.         registered => sub {
  70.             my ( $self ) = @_;
  71.             print "registerd!\n";
  72.             $ae->enable_ping(60);
  73.         },
  74.         disconnect => sub {
  75.             print "disconnected: $_[1]!\n";
  76.         }
  77.     );
  78.     $ae->connect($irc_connect->{server}, $irc_connect->{port}, {
  79.         nick => $irc_connect->{nick},
  80.         user => $irc_connect->{nick},
  81.         real => $irc_connect->{nick},
  82.         $irc_connect->{password} ? (
  83.             password => $irc_connect->{password}
  84.         ) : (),
  85.     });
  86.     foreach my $channel ( @{$irc_connect->{channels}} ) {
  87.         $ae->send_srv('JOIN', $channel);
  88.         $ae->send_chan($channel, 'NOTICE', $channel, 'hi');
  89.         print $channel, "\n";
  90.     }
  91.     $irc_connect->{AE} = $ae;
  92. }
  93.  
  94. my $streamer = AnyEvent::Twitter::Stream->new(
  95.     %{$twitter_connect},
  96.     method   => 'filter',
  97.     on_tweet => sub {
  98.         my $tweet = shift;
  99.         my %already = map { $_ => +{} } @servers;
  100.         while ( $tweet->{text} =~ /(#[\w\d_-]+)/go ) {
  101.             my $hashtag = $1;
  102.             next if !$trac_map->{$hashtag};
  103.             foreach my $map ( @{$trac_map->{$hashtag}} ) {
  104.                 if ( $already{$map->{server}}->{$map->{channel}} ) {
  105.                     next;
  106.                 }
  107.                 else {
  108.                     $already{$map->{server}}->{$map->{channel}} = 1;
  109.                 }
  110.  
  111.                 my $irc_connect = $irc_connects->{$map->{server}};
  112.                 $irc_connect->{AE}->send_chan( $map->{channel}, "NOTICE", $map->{channel},
  113.                     Encode::encode( 'utf-8', "$tweet->{user}{screen_name}: $tweet->{text}" ) );
  114.             }
  115.         }
  116.     },
  117.     on_error => sub {
  118.         my $error = shift;
  119.         warn "ERROR: $error";
  120.         $cv->send;
  121.     },
  122.     on_eof => sub {
  123.         $cv->send;
  124.     },
  125. );
  126.  
  127.  
  128. $cv->recv;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement