Skip to content

Commit 83a335f

Browse files
committed
refactor rtm module
1 parent f33ab69 commit 83a335f

File tree

1 file changed

+86
-52
lines changed

1 file changed

+86
-52
lines changed

lib/devton_slack/rtm.ex

Lines changed: 86 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -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
85119
end

0 commit comments

Comments
 (0)