Skip to content

Commit 945aca5

Browse files
committed
SlackID: convert to CommandPost and async/await
1 parent 967e25c commit 945aca5

File tree

1 file changed

+39
-47
lines changed

1 file changed

+39
-47
lines changed

lib/Synergy/Reactor/SlackID.pm

Lines changed: 39 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,59 @@ use warnings;
33
package Synergy::Reactor::SlackID;
44

55
use Moose;
6-
with 'Synergy::Role::Reactor::EasyListening';
6+
with 'Synergy::Role::Reactor',
7+
'Synergy::Role::Reactor::CommandPost';
78

89
use experimental qw(signatures);
910
use namespace::clean;
11+
12+
use Future::AsyncAwait;
1013
use List::Util qw(first);
14+
use Synergy::CommandPost;
1115

12-
sub listener_specs {
13-
return (
14-
{
15-
name => 'slackid',
16-
method => 'handle_event',
17-
targeted => 1,
18-
predicate => sub ($self, $event) {
19-
return unless $event->from_channel->can('slack');
20-
return $event->text =~ /\A\s*slackid [@#]?(\w+)\s*\z/i;
21-
},
22-
allow_empty_help => 1,
23-
},
24-
{
25-
name => 'reload-slack-users',
26-
method => 'handle_reload_slack',
27-
targeted => 1,
28-
predicate => sub ($self, $event) {
29-
return unless $event->from_channel->can('slack');
30-
return $event->text =~ /\Areload slack (users|channels)\z/in;
31-
},
32-
allow_empty_help => 1,
33-
},
34-
);
35-
}
36-
37-
sub handle_event ($self, $event) {
38-
$event->mark_handled;
16+
command slackid => {
17+
} => async sub ($self, $event, $rest) {
18+
unless ($event->from_channel->can('slack')) {
19+
return await $self->error_reply("Sorry, you can't use *slackid* outside Slack");
20+
}
3921

40-
if ($event->text =~ /slackid \@?(\w+)/) {
41-
my $who = $1;
42-
my $user = first { $_->{name} eq $who }
43-
values $event->from_channel->slack->users->%*;
22+
unless ($rest =~ /\A[@#]?(\S+)\s*\z/i) {
23+
return await $self->error_reply("Sorry, that doesn't look like a Slack identifier.");
24+
}
4425

45-
return $event->error_reply("Sorry, I don't know who $who is")
46-
unless $user;
26+
my $what = $1;
4727

48-
return $event->reply("The Slack id for $who is $user->{id}");
49-
}
28+
if ($what =~ s/^#//) {
29+
my $channel = $event->from_channel->slack->channel_named($what);
30+
31+
unless ($channel) {
32+
return await $event->error_reply("Sorry, I can't find #$what.");
33+
}
5034

51-
if ($event->text =~ /slackid #(\w+)/) {
52-
my $ch_name = $1;
53-
my $channel = $event->from_channel->slack->channel_named($ch_name);
35+
return await $event->reply("The Slack id for #$what is $channel->{id}");
36+
}
5437

55-
return $event->error_reply("Sorry, I can't find #$ch_name.")
56-
unless $channel;
38+
my $user = first { $_->{name} eq $what }
39+
values $event->from_channel->slack->users->%*;
5740

58-
return $event->reply("The Slack id for #$ch_name is $channel->{id}");
41+
unless ($user) {
42+
return await $event->error_reply("Sorry, I don't know who $what is.");
5943
}
6044

61-
return $event->error_reply(qq{Sorry, I don't know how to resolve that.});
62-
}
45+
return await $event->reply("The Slack id for $what is $user->{id}");
46+
};
6347

64-
sub handle_reload_slack ($self, $event) {
65-
my ($what) = $event->text =~ /^reload slack (users|channels)/i;
48+
responder reload_slack => {
49+
exclusive => 1,
50+
targeted => 1,
51+
matcher => sub ($text, @) {
52+
if ($text =~ /^reload slack (users|channels)\z/i) {
53+
return [ $1 ];
54+
}
6655

56+
return;
57+
},
58+
} => async sub ($self, $event, $what) {
6759
$event->mark_handled;
6860

6961
if ($what eq 'users') {
@@ -78,6 +70,6 @@ sub handle_reload_slack ($self, $event) {
7870
}
7971

8072
return $event->reply_error("Sorry, I didn't understand your reload command.");
81-
}
73+
};
8274

8375
1;

0 commit comments

Comments
 (0)