AnyEvent-Discord-Client
view release on metacpan or search on metacpan
lib/AnyEvent/Discord/Client.pm view on Meta::CPAN
678910111213141516171819202122232425$VERSION
=
eval
$VERSION
;
use
LWP::UserAgent;
use
JSON;
use
URI;
use
HTTP::Request;
use
HTTP::Headers;
use
AnyEvent::HTTP;
my
$debug
= 0;
sub
new {
my
(
$class
,
%args
) =
@_
;
my
$self
= {
token
=>
delete
(
$args
{token}),
prefix
=>
delete
(
$args
{prefix}) //
"!"
,
commands
=>
delete
(
$args
{commands}) // {},
lib/AnyEvent/Discord/Client.pm view on Meta::CPAN
166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199});
$self
->{conn}->on(
each_message
=>
sub
{
my
(
$connection
,
$message
) =
@_
;
my
$msg
= decode_json(
$message
->{body});
die
"invalid message"
unless
ref
$msg
eq
'HASH'
&&
defined
$msg
->{op};
$self
->{last_seq} = 0+
$msg
->{s}
if
defined
$msg
->{s};
if
(
$msg
->{op} == 0) {
#dispatch
"\e[1;30mdispatch event $msg->{t}:"
.Dumper(
$msg
->{d}).
"\e[0m\n"
if
$debug
;
$event_handler
{
$msg
->{t}}(
$self
,
$msg
->{d})
if
$event_handler
{
$msg
->{t}};
}
elsif
(
$msg
->{op} == 10) {
#hello
$self
->{heartbeat_timer} = AnyEvent->timer(
after
=>
$msg
->{d}{heartbeat_interval}/1e3,
interval
=>
$msg
->{d}{heartbeat_interval}/1e3,
cb
=>
sub
{
$self
->websocket_send(1,
$self
->{last_seq});
},
);
}
elsif
(
$msg
->{op} == 11) {
#heartbeat ack
# ignore for now; eventually, notice missing ack and reconnect
}
else
{
"\e[1;30mnon-event message op=$msg->{op}:"
.Dumper(
$msg
).
"\e[0m\n"
if
$debug
;
}
});
$self
->{conn}->on(
parse_error
=>
sub
{
my
(
$connection
,
$error
) =
@_
;
"parse_error: $error\n"
;
exit
;
});
$self
->{conn}->on(
finish
=>
sub
{
( run in 0.227 second using v1.01-cache-2.11-cpan-d6f9594c0a5 )