@@ -3,67 +3,59 @@ use warnings;
33package Synergy::Reactor::SlackID ;
44
55use Moose;
6- with ' Synergy::Role::Reactor::EasyListening' ;
6+ with ' Synergy::Role::Reactor' ,
7+ ' Synergy::Role::Reactor::CommandPost' ;
78
89use experimental qw( signatures) ;
910use namespace::clean;
11+
12+ use Future::AsyncAwait;
1013use 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 =~ / \A reload 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
83751;
0 commit comments