AnyEvent-Discord-Client
view release on metacpan or search on metacpan
lib/AnyEvent/Discord/Client.pm view on Meta::CPAN
}
}
sub websocket_send {
my ($self, $op, $d) = @_;
die "no connection!" unless $self->{conn};
$self->{conn}->send(encode_json({op=>$op, d=>$d}));
}
sub say {
my ($self, $channel_id, $message) = @_;
$self->api(POST => "/channels/$channel_id/messages", {content => $message});
}
sub typing {
my ($self, $channel) = @_;
return AnyEvent->timer(
after => 0,
interval => 5,
cb => sub {
$self->api(POST => "/channels/$channel->{id}/typing", '');
},
);
}
sub api {
my ($self, $method, $path, $data, $cb) = @_;
http_request(
uc($method) => $self->{api_root} . $path,
timeout => 5,
recurse => 0,
headers => {
referer => undef,
authorization => "Bot $self->{token}",
"user-agent" => $self->{api_useragent},
(
!defined $data ? ()
: ref $data ? ("content-type" => "application/json")
: ("content-type" => "application/x-www-form-urlencoded")
),
},
(
!defined $data ? ()
: ref $data ? (body => encode_json($data))
: (body => $data)
),
sub {
my ($body, $hdr) = @_;
return unless $cb;
$cb->(!defined $body ? undef : defined $hdr->{"content-type"} && $hdr->{"content-type"} eq 'application/json' ? decode_json($body) : 1, $hdr);
},
);
}
1;
__END__
=head1 NAME
AnyEvent::Discord::Client - A Discord client library for the AnyEvent framework.
=head1 SYNOPSIS
use AnyEvent::Discord::Client;
my $token = 'NjI5NTQ4Mjg3NTMxMjg2......';
my $bot = new AnyEvent::Discord::Client(
token => $token,
commands => {
'commands' => sub {
my ($bot, $args, $msg, $channel, $guild) = @_;
$bot->say($channel->{id}, join(" ", map {"`$_`"} sort grep {!$commands_hidden{$_}} keys %{$bot->commands}));
},
},
);
$bot->add_commands(
'hello' => sub {
my ($bot, $args, $msg, $channel, $guild) = @_;
$bot->say($channel->{id}, "hi, $msg->{author}{username}!");
},
);
$bot->connect();
AnyEvent->condvar->recv;
After adding this bot to a channel in a Discord Guild, type '!hello' in chat to run the example command.
=head1 DESCRIPTION
This module provides the functionality required to create a simple Discord
client or bot using the REST and WebSocket interfaces to Discord.
=head1 CONSTRUCTION
=over
=item C<< AnyEvent::Discord::Client->new(I<%opts>) >>
AnyEvent::Discord::Client->new(token => $token)
Creates a new C<AnyEvent::Discord::Client> with the given configuration.
Takes the following parameters:
=over
=item C<token>
A Discord Bot token as given by the "Bot" section of a L<Discord Developer Portal application|https://discordapp.com/developers/applications/>. Required.
=item C<api_root>
The Discord API root to use. Default C<https://discordapp.com/api>.
=item C<prefix>
The command prefix to use when looking for registered commands in chat. Default C<!>.
( run in 1.801 second using v1.01-cache-2.11-cpan-ceb78f64989 )