Guest User

Untitled

a guest
Jan 21st, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. ## [perl]
  2. #!/usr/bin/perl
  3.  
  4. use strict;
  5. use warnings;
  6.  
  7. package robot;
  8.  
  9. use IO::Socket;
  10.  
  11. sub new {
  12. my $self = shift;
  13. my %data = ();
  14.  
  15. return bless (\%data, $self);
  16. }
  17.  
  18. sub read_rc {
  19. my ($self, $path) = @_;
  20.  
  21. print "Reading $path...\n\n";
  22. open my $rc_file, '<', $path or die "Cannot open $path: $!\n";
  23. while (my $line = <$rc_file>) {
  24. if (my ($key, $value) = ($line =~ /\s*(\w+)\s*=\s*"([^"]*)"/)) {
  25. $self->{rc}->{$key} = $value;
  26. printf ("%-8s = %s\n", $key, $self->{rc}->{$key});
  27. }
  28. }
  29. close $rc_file;
  30. print "\n\n";
  31.  
  32. return $self->{rc};
  33. }
  34.  
  35. sub connect {
  36. my $self = shift;
  37.  
  38. $self->{socket} = IO::Socket::INET->new(
  39. PeerAddr => $self->{rc}->{host},
  40. PeerPort => $self->{rc}->{port},
  41. proto => getprotobyname('tcp')
  42. ) or die "Cannot connect to $self->{rc}->{host}:$self->{rc}->{port}: $!\n";
  43.  
  44. if ($self->{rc}->{password}) {
  45. $self->pass($self->{rc}->{nickname}, $self->{rc}->{password});
  46. }
  47.  
  48. $self->nick($self->{rc}->{nickname});
  49. $self->ident($self->{rc}->{uname}, $self->{rc}->{ident});
  50.  
  51. if ($self->{rc}->{channels}) {
  52. my @channels = split /\s*,\s*/, $self->{rc}->{channels};
  53. foreach my $channel (@channels) {
  54. $self->join($channel);
  55. }
  56. }
  57.  
  58. return $self->{socket};
  59. }
  60.  
  61. sub read {
  62. my $self = shift;
  63. my $socket = $self->{socket};
  64.  
  65. return <$socket>;
  66. }
  67.  
  68. sub send {
  69. my ($self, $message) = @_;
  70. my $socket = $self->{socket};
  71.  
  72. $message .= "\n";
  73.  
  74. if ($self->{rc}->{verbose}) {
  75. print ">> $message";
  76. }
  77.  
  78. print $socket $message;
  79. }
  80.  
  81. sub nick {
  82. my ($self, $nickname) = @_;
  83.  
  84. $self->send("NICK $nickname");
  85. }
  86.  
  87. sub pass {
  88. my ($self, $nickname, $password) = @_;
  89.  
  90. $self->send("PASS $nickname:$password");
  91. }
  92.  
  93. sub ident {
  94. my ($self, $uname, $ident) = @_;
  95.  
  96. $self->send("USER $uname * * :$ident");
  97. }
  98.  
  99. sub notice {
  100. my ($self, $nickname, $notice) = @_;
  101.  
  102. $self->send("NOTICE $nickname $notice");
  103. }
  104.  
  105. sub privmsg {
  106. my ($self, $recipient, $message) = @_;
  107.  
  108. $self->send("PRIVMSG $recipient $message");
  109. }
  110.  
  111. sub join {
  112. my ($self, $channel) = @_;
  113.  
  114. $self->send("JOIN $channel");
  115. }
  116.  
  117. sub who {
  118. my ($self, $target) = @_;
  119.  
  120. $self->send("WHO $target");
  121. }
  122.  
  123. sub pong {
  124. my ($self, $host) = @_;
  125.  
  126. $self->send("PONG $host");
  127. }
  128.  
  129. sub parse {
  130. my ($self, $data) = @_;
  131. my %message = ();
  132. my $pattern_message = qr/^:?\s*([^:]+)\s+:(.+)\s*$/;
  133. my $pattern_header = qr/^([^\s]+)\s+([^\s]+)\s+([^\s]+)$/;
  134.  
  135. if (my ($header, $body) = ($data =~ $pattern_message)) {
  136. print "[$header]\n$body\n\n"; # DEBUG
  137.  
  138. if (my ($from, $type, $target) = ($header =~ $pattern_header)) {
  139. $message{from} = $from;
  140. $message{type} = $type;
  141. $message{target} = $target;
  142. }
  143. else {
  144. $message{type} = $header;
  145. }
  146. $message{body} = $body;
  147. }
  148.  
  149. return %message;
  150. }
  151.  
  152. sub if_owner_command {
  153. my ($self, %message) = @_;
  154.  
  155. if (my ($command) = ($message{body} =~ /^@(.+)\s*$/)) {
  156. # if ($message{from} =~ /^$self->{rc}->{owner}/) {
  157. # return 1;
  158. # }
  159. }
  160. else {
  161. return 0;
  162. }
  163. }
  164.  
  165. sub if_user_command {
  166. my ($self, %message) = @_;
  167.  
  168. if (my ($command) = ($message{body} =~ /^\.(.+)\s*$/)) {
  169. return 1;
  170. }
  171. else {
  172. return 0;
  173. }
  174. }
  175.  
  176. package user_command;
  177.  
  178. sub new {
  179. my ($self, %message) = @_;
  180.  
  181. return bless (\%message, $self);
  182. }
  183.  
  184. 1;
Add Comment
Please, Sign In to add comment