The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Mojo::SlackRTM - non-blocking SlackRTM client using Mojo::IOLoop

SYNOPSIS

  use Mojo::SlackRTM;

  # get from https://api.slack.com/web#authentication
  my $token = "xoxb-12345678901-AbCdEfGhIjKlMnoPqRsTuVWx";

  my $slack = Mojo::SlackRTM->new(token => $token);
  $slack->on(message => sub {
    my ($slack, $event) = @_;
    my $channel_id = $event->{channel};
    my $user_id    = $event->{user};
    my $user_name  = $slack->find_user_name($user_id);
    my $text       = $event->{text};
    $slack->send_message($channel_id => "hello $user_name!");
  });
  $slack->start;

DESCRIPTION

Mojo::SlackRTM is a non-blocking SlackRTM client using Mojo::IOLoop.

This class inherits all events, methods, attributes from Mojo::EventEmitter.

EVENTS

There are a lot of events, eg, hello, message, user_typing, channel_marked, ....

See https://api.slack.com/rtm for details.

  $slack->on(reaction_added => sub {
    my ($slack, $event) = @_;
    my $reaction  = $event->{reaction};
    my $user_id   = $event->{user};
    my $user_name = $slack->find_user_name($user_id);
    $slack->log->info("$user_name reacted with $reaction");
  });

METHODS

call_api

  $slack->call_api($method);
  $slack->call_api($method, $param);
  $slack->call_api($method, $cb);
  $slack->call_api($method, $param, $cb);

Call slack web api. See https://api.slack.com/methods for details.

  $slack->call_api("channels.list", {exclude_archived => 1}, sub {
    my ($slack, $tx) = @_;
    if ($tx->success and $tx->res->json("/ok")) {
      my $channels = $tx->res->json("/channels");
      $slack->log->info($_->{name}) for @$channels;
      return;
    }
    my $error = $tx->success ? $tx->res->json("/error") : $tx->error->{message};
    $slack->log->error($error);
  });

connect

  $slack->connect;

find_channel_id

  my $id = $slack->find_channel_id($name);

find_channel_name

  my $name = $slack->find_channel_name($id);

find_user_id

  my $id = $slack->find_user_id($name);

find_user_name

  my $name = $slack->find_user_name($id);

finish

  $slack->finish;

next_id

  my $id = $slack->next_id;

ping

  $slack->ping;

reconnect

  $slack->reconnect;

send_message

  $slack->send_message($channel => $text);

Send $text to slack $channel via the websocket transaction.

start

  $slack->start;

This is a convenient method. In fact it is equivalent to:

  $slack->connect;
  $slack->ioloop->start unless $slack->ioloop->is_running;

ATTRIBUTES

auto_reconnect

Automatically reconnect to slack

ioloop

Mojo::IOLoop singleton

log

Mojo::Log instance

metadata

The response of rtm.start. See https://api.slack.com/methods/rtm.start for details.

token

slack access token

ua

Mojo::UserAgent instance

ws

Websocket transaction

DEBUGGING

Set MOJO_SLACKRTM_DEBUG=1.

SEE ALSO

AnyEvent::SlackRTM

AnySan::Provider::Slack

http://perladvent.org/2015/2015-12-23.html

AUTHOR

Shoichi Kaji <skaji@cpan.org>

COPYRIGHT AND LICENSE

Copyright 2016 Shoichi Kaji <skaji@cpan.org>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.