Merge pull request #677 from stvnrlly/slack-icon

allow custom icon for slack webhooks

Andrew Cantino 10 anni fa
parent
commit
2e9d1c0de9
2 ha cambiato i file con 21 aggiunte e 2 eliminazioni
  1. 10 2
      app/models/agents/slack_agent.rb
  2. 11 0
      spec/models/agents/slack_agent_spec.rb

+ 10 - 2
app/models/agents/slack_agent.rb

@@ -20,7 +20,10 @@ module Agents
20 20
       Once the webhook has been setup it can be used to post to other channels or ping team members.
21 21
       To send a private message to team-mate, assign his username as `@username` to the channel option.
22 22
       To communicate with a different webhook on slack, assign your custom webhook name to the webhook option.
23
-      Messages can also be formatted using [Liquid](https://github.com/cantino/huginn/wiki/Formatting-Events-using-Liquid)
23
+      Messages can also be formatted using [Liquid](https://github.com/cantino/huginn/wiki/Formatting-Events-using-Liquid).
24
+
25
+      Finally, you can set a custom icon for this webhook in `icon`, either as [emoji](http://unicodey.com/emoji-data/table.htm) or an URL to an image.
26
+      Leaving this field blank will use the default icon for a webhook.
24 27
     MD
25 28
 
26 29
     def default_options
@@ -29,6 +32,7 @@ module Agents
29 32
         'channel' => '#general',
30 33
         'username' => DEFAULT_USERNAME,
31 34
         'message' => "Hey there, It's Huginn",
35
+        'icon' => '',
32 36
       }
33 37
     end
34 38
 
@@ -67,7 +71,11 @@ module Agents
67 71
     def receive(incoming_events)
68 72
       incoming_events.each do |event|
69 73
         opts = interpolated(event)
70
-        slack_notifier.ping opts[:message], channel: opts[:channel], username: opts[:username]
74
+        if /^:/.match(opts[:icon])
75
+          slack_notifier.ping opts[:message], channel: opts[:channel], username: opts[:username], icon_emoji: opts[:icon]
76
+        else
77
+          slack_notifier.ping opts[:message], channel: opts[:channel], username: opts[:username], icon_url: opts[:icon]
78
+        end
71 79
       end
72 80
     end
73 81
   end

+ 11 - 0
spec/models/agents/slack_agent_spec.rb

@@ -33,6 +33,17 @@ describe Agents::SlackAgent do
33 33
       @checker.options['channel'] = nil
34 34
       expect(@checker).not_to be_valid
35 35
     end
36
+
37
+    it "should allow an icon" do
38
+      @checker.options['icon_emoji'] = nil
39
+      expect(@checker).to be_valid
40
+      @checker.options['icon_emoji'] = ":something:"
41
+      expect(@checker).to be_valid
42
+      @checker.options['icon_url'] = "http://something.com/image.png"
43
+      expect(@checker).to be_valid
44
+      @checker.options['icon_emoji'] = "something"
45
+      expect(@checker).to be_valid
46
+    end
36 47
   end
37 48
 
38 49
   describe "#receive" do