@@ -15,61 +15,15 @@ defmodule DevtonSlack.Rtm do
1515 { :ok , state }
1616 end
1717
18- def handle_event ( message = % { type: "message" } , slack , state )
19- when String . contains? ( message . text , "Do Not Disturb" ) , do:
20- { :ok , state }
2118 def handle_event ( message = % { type: "message" } , slack , state ) do
2219 try do
23- command = Cli . handle_command ( message . text )
24- Logger . info ( "Message: '#{ message . text } ', Command: '#{ inspect ( command ) } ', channel '#{ message . channel } '" )
25- case command do
26- { :subscribe , % { tag: tag , time: time , day: day } } ->
27- result = Devton.Subscriptions . create_subscription (
28- % {
29- "tags" => tag ,
30- "time" => time ,
31- "day" => day ,
32- "user_name" => slack . users [ message . user ] . name ,
33- "user_id" => message . user ,
34- "user_tz" => slack . users [ message . user ] . tz ,
35- "workspace_id" => slack . team . id ,
36- "workspace_name" => slack . team . name ,
37- }
38- )
39- case result do
40- { :error , :invalid_day } ->
41- send_message ( Message . invalid_day , message . channel , slack )
42- { :error , :invalid_time } ->
43- send_message ( Message . invalid_time , message . channel , slack )
44- { :error , _ } ->
45- send_message ( Message . invalid_command , message . channel , slack )
46- x ->
47- indicate_typing ( message . channel , slack )
48- end
49- { :unsubscribe , % { id: id } } ->
50- indicate_typing ( message . channel , slack )
51- Devton.Subscriptions . deactivate_subscription ( % { "uuid" => id } )
52- { :tags , % { top: top } } ->
53- indicate_typing ( message . channel , slack )
54- tags = Devton.Library . get_top_tags ( String . to_integer ( top ) )
55- send_message ( Message . tags ( tags ) , message . channel , slack )
56- { :help } ->
57- indicate_typing ( message . channel , slack )
58- send_message ( Message . help , message . channel , slack )
59- { :status } ->
60- indicate_typing ( message . channel , slack )
61- subscriptions = Devton.Subscriptions . get_subscriptions (
62- % {
63- "user_id" => message . user ,
64- "workspace_id" => slack . team . id ,
65- }
66- )
67- send_message ( Message . status ( subscriptions ) , message . channel , slack )
68- { :invalid_command } ->
69- indicate_typing ( message . channel , slack )
70- send_message ( Message . invalid_command , message . channel , slack )
20+ case can_process_command ( message . text ) do
21+ false ->
22+ { :ok , state }
23+ true ->
24+ execute_command ( message , slack )
25+ { :ok , state }
7126 end
72- { :ok , state }
7327 rescue
7428 _ -> { :ok , state }
7529 end
@@ -82,4 +36,84 @@ defmodule DevtonSlack.Rtm do
8236 { :ok , state }
8337 end
8438 def handle_info ( _ , _ , state ) , do: { :ok , state }
39+
40+ defp execute_command ( message , slack ) do
41+ command = Cli . handle_command ( message . text )
42+ Logger . info ( "Message: '#{ message . text } ', Command: '#{ inspect ( command ) } ', channel '#{ message . channel } '" )
43+ case command do
44+ { :subscribe , % { tag: tag , time: time , day: day } } ->
45+ run_command ( :subscribe , tag , time , day , message , slack )
46+ { :unsubscribe , % { id: id } } ->
47+ run_command ( :unsubscribe , id , message , slack )
48+ { :tags , % { top: top } } ->
49+ run_command ( :tags , top , message , slack )
50+ { :help } ->
51+ run_command ( :help , message , slack )
52+ { :status } ->
53+ run_command ( :status , message , slack )
54+ { :invalid_command } ->
55+ run_command ( :invalid_command , message , slack )
56+ end
57+ end
58+
59+ defp run_command ( :subscribe , tag , time , day , message , slack ) do
60+ result = Devton.Subscriptions . create_subscription (
61+ % {
62+ "tags" => tag ,
63+ "time" => time ,
64+ "day" => day ,
65+ "user_name" => slack . users [ message . user ] . name ,
66+ "user_id" => message . user ,
67+ "user_tz" => slack . users [ message . user ] . tz ,
68+ "workspace_id" => slack . team . id ,
69+ "workspace_name" => slack . team . name ,
70+ }
71+ )
72+ case result do
73+ { :error , :invalid_day } ->
74+ send_message ( Message . invalid_day , message . channel , slack )
75+ { :error , :invalid_time } ->
76+ send_message ( Message . invalid_time , message . channel , slack )
77+ { :error , _ } ->
78+ send_message ( Message . invalid_command , message . channel , slack )
79+ x ->
80+ indicate_typing ( message . channel , slack )
81+ end
82+ end
83+
84+ defp run_command ( :unsubscribe , id , message , slack ) do
85+ indicate_typing ( message . channel , slack )
86+ Devton.Subscriptions . deactivate_subscription ( % { "uuid" => id } )
87+ end
88+
89+ defp run_command ( :tags , top , message , slack ) do
90+ indicate_typing ( message . channel , slack )
91+ tags = Devton.Library . get_top_tags ( String . to_integer ( top ) )
92+ send_message ( Message . tags ( tags ) , message . channel , slack )
93+ end
94+
95+ defp run_command ( :help , message , slack ) do
96+ indicate_typing ( message . channel , slack )
97+ send_message ( Message . help , message . channel , slack )
98+ end
99+
100+ defp run_command ( :status , message , slack ) do
101+ indicate_typing ( message . channel , slack )
102+ subscriptions = Devton.Subscriptions . get_subscriptions (
103+ % {
104+ "user_id" => message . user ,
105+ "workspace_id" => slack . team . id ,
106+ }
107+ )
108+ send_message ( Message . status ( subscriptions ) , message . channel , slack )
109+ end
110+
111+ defp run_command ( :invalid_command , message , slack ) do
112+ indicate_typing ( message . channel , slack )
113+ send_message ( Message . invalid_command , message . channel , slack )
114+ end
115+
116+ defp can_process_command ( text ) do
117+ ! String . contains? ( text , "Do Not Disturb" )
118+ end
85119end
0 commit comments