81 lines
1.5 KiB
Perl
81 lines
1.5 KiB
Perl
package L3TDE::Bot::IRC;
|
|
|
|
use v5.34.1;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Moo;
|
|
|
|
use Future::AsyncAwait;
|
|
use IO::Socket::SSL;
|
|
use Crypt::URandom qw/urandom/;
|
|
|
|
with 'L3TDE::Bot::Role';
|
|
|
|
has [qw/password username hostname port/] => (
|
|
is => 'rw',
|
|
required => 1,
|
|
);
|
|
|
|
has socket => (
|
|
is => 'rw',
|
|
);
|
|
|
|
# Not lazy because we may do it more than once.
|
|
async sub _generate_socket {
|
|
my $self = shift;
|
|
my $username = $self->username;
|
|
my $hostname = $self->hostname;
|
|
my $password = $self->password;
|
|
my $port = $self->port;
|
|
my $random_nick = unpack('H*', urandom(10));
|
|
my $return = IO::Socket::SSL->new(
|
|
PeerHost => $hostname,
|
|
PeerPort => $port,
|
|
Proto => 'tcp',
|
|
Timeout => 5
|
|
) or die $!;
|
|
$self->socket($return);
|
|
$self->_send_message("USER $username 0 * :L3TDE Bot\r\n");
|
|
$self->_send_message("NICK ${username}_${random_nick}\r\n");
|
|
}
|
|
|
|
sub _send_message {
|
|
my $self = shift;
|
|
my $message = shift;
|
|
my $socket = $self->socket;
|
|
print $socket "$message\r\n";
|
|
}
|
|
|
|
async sub start {
|
|
my $self = shift;
|
|
while (1) {
|
|
eval {
|
|
await $self->_generate_socket;
|
|
#while(defined(my $line = $self->_read)) {
|
|
# # print $line;
|
|
# $self->username('aaaaaaah');
|
|
#}
|
|
};
|
|
if ($@) {
|
|
warn($@);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
sub _read {
|
|
my $self = shift;
|
|
$/ = "\r\n";
|
|
my $socket = $self->socket;
|
|
my $line = <$socket>;
|
|
$/ = "\n";
|
|
return <$socket>;
|
|
}
|
|
|
|
async sub msg {
|
|
...
|
|
}
|
|
1;
|