Perl Omegle/IRC Bridge Bot
Tue. June 22, 2010Categories: Perl
Tags: IRC Bot, Omegle
#!/usr/bin/perl # Written by Andrew Brown # Free to be redistributed, edited, and reused in any way # http://www.drusepth.net use strict; use JSON; use IO::Socket; use LWP::UserAgent; use HTTP::Request::Common qw(POST); $| = 1; # Autoflush off # Omegle madness my $omegle_id; my $omegle_connected = -1; my $omegle_haspartner = 0; my $omegle_events; # IRC madness my $irc_sock; my $irc_id = 1; my %irc_settings = ( 'network' => 'irc.tddirc.net', 'port' => 6667, 'nickname' => 'OmegleStranger', 'channel' => '#geeknook' ); # Auxillary madness my $ua = LWP::UserAgent->new; # FIGHT! $irc_sock = new IO::Socket::INET "$irc_settings{'network'}:$irc_settings{'port'}" or die "Cannot connect to $irc_settings{'network'} on port $irc_settings{'port'}: $!n"; irc_send("USER", "$irc_settings{'nickname'} "x3 . ":$irc_settings{'nickname'}"); irc_send("NICK", $irc_settings{'nickname'}); while (my $text = <$irc_sock>) { chomp $text; #print $text; my ($host, $username, $said) = (irc_get_host($text), irc_get_username($text), irc_get_said($text)); my @incoming = split(/ /, $text); if ($incoming[1] and ($incoming[1] eq "376" or $incoming[1] eq "422")) { irc_send("JOIN", $irc_settings{'channel'}); } if ($incoming[1] eq "433") { $irc_id++; irc_send("USER", "$irc_settings{'nickname'} "x3 . ":$irc_settings{'nickname'}"); irc_send("NICK", $irc_settings{'nickname'}); } if ($incoming[1] eq "366") { sleep 5; omegle_start(); } if ($omegle_connected == 0) { sleep 10; omegle_start(); } if ($incoming[0] eq "PING") { irc_send("PONG", $incoming[1]); } $omegle_events = omegle_poll_event_list(); omegle_handle_events(); if ($incoming[1] eq "PRIVMSG" and $incoming[3] eq "!next") { print "Getting a new Stranger.n"; omegle_start(); } if ($incoming[1] eq "PRIVMSG" and $incoming[2] eq $irc_settings{'channel'}) { print " [$said]n"; omegle_send(irc_get_username() . " says: " . irc_get_said()); } } sub irc_send { my $p = join (' ', @_); print $irc_sock $p . "rn"; } sub irc_get_username { return substr($_[0], 1, index($_[0], "!") - 1); } sub irc_get_host { return substr($_[0], index($_[0], "!") + 1, index($_[0], " ") - index($_[0], "!") - 1); } sub irc_get_said { my $offset = length(irc_get_username($_[0])) + length(irc_get_host($_[0])) + length("PRIVMSG") + length($irc_settings{'channel'}) + 6; if (length($_[0]) >= $offset) { my $said = substr($_[0], $offset); $said = substr($said, 0, length($said) - 1); return $said; } else { return ""; } } sub omegle_start { my $request; my $id; $request = POST "http://omegle.com/start"; $id = $ua->request($request)->decoded_content; $id = substr($id, 1, 6); $omegle_id = $id; print "Chatting on Omegle with ID $omegle_id.n"; $omegle_connected = 1; } sub omegle_stop { my $request; my $id; $request = POST "http://omegle.com/disconnect"; $omegle_connected = 0; } sub omegle_poll_event_list { my $request; my $event_list_string; my $event_list; $request = POST "http://omegle.com/events", [ id => $omegle_id ]; $event_list_string = $ua->request($request)->decoded_content; print $event_list_string . "n"; if ($event_list_string ne "null") { $event_list = from_json($event_list_string); #$event_list = $event_list_string; } else { $event_list = []; } return $event_list; } sub omegle_toggle_typing { my $request; $request = POST "http://omegle.com/typing", [ id => $omegle_id ]; $ua->request($request)->decoded_content; } sub omegle_send { my $request; my $message; ($message) = @_; $request = POST "http://omegle.com/send", [ msg => $message, id => $omegle_id ]; $ua->request($request)->decoded_content; } sub omegle_disconnect { my $request; $request = POST "http://omegle.com/disconnect", [ id => $omegle_id ]; $ua->request($request)->decoded_content; $omegle_id = ""; } sub omegle_handle_events { foreach my $event (@{$omegle_events}) { my $event_type = @{$event}[0]; print "Event type: $event_typen"; if ($event_type eq "waiting") { print "Waiting for a stranger...n"; } if ($event_type eq "connected") { $omegle_haspartner = 1; print "Found a stranger!n"; irc_send("PRIVMSG", $irc_settings{'channel'}, ":Found a new stranger!"); #irc_send("PRIVMSG", "drusepth", ":Found a new stranger!"); omegle_send("Hello stranger! Instead of just one stranger, you've been connected to an IRC " . "chat room of tons of strangers! They see everything you say and you see everything " . "they say. Have fun!"); } if ($event_type eq "gotMessage" ) { my $temp_message; $temp_message = @{$event}[1]; if ($temp_message eq "Please reload the page for technical reasons.") { omegle_stop(); omegle_start(); } print " $temp_messagen"; #irc_send("PRIVMSG", $irc_settings{'channel'}, ": $temp_message"); irc_send("PRIVMSG", $irc_settings{'channel'}, ":$temp_message"); } if ($event_type eq "strangerDisconnected") { $omegle_connected = 0; $omegle_haspartner = 0; $omegle_id = ""; print "Stranger has disconnected!n"; #irc_send("PRIVMSG", $irc_settings{'channel'}, ":This stranger has disconnected. :("); #irc_send("PRIVMSG", "drusepth", ":Stranger disconnected!"); } } }
>