slackbotsy 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +90 -4
- data/lib/slackbotsy/bot.rb +27 -14
- data/lib/slackbotsy/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78670e10397ffcfd1cc98a51af115c7e5526e460
|
4
|
+
data.tar.gz: 53d8c0d28534b2068595e93cf9b9c64ddc669709
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3e36dc080d170fd71233061dd97ff52f9e14822a6aeedc96269ffacf98bcd0c55b79149abdfa81650a66ecaca1d80b2294251a5c13d4a874a94bce7dab29722
|
7
|
+
data.tar.gz: a2114b3535e6a0ca2e8146ed1828eec5e71a69de67325a3df42eadc1fdd6bd6513b1c5288368da87a494917d5a1168b6577b6a6004e85eb3bc3f92dfe291867a
|
data/README.md
CHANGED
@@ -36,14 +36,100 @@ gem install slackbotsy
|
|
36
36
|
|
37
37
|
## Setup
|
38
38
|
|
39
|
-
botsy requires
|
39
|
+
botsy requires some or all of the following integrations setup in slack:
|
40
40
|
|
41
|
-
* outgoing webhook: for slack to send messages out to botsy
|
41
|
+
* outgoing webhook: for slack to send free-format messages out to botsy
|
42
|
+
* slash command: for slack to send messages prefixed with a slash
|
43
|
+
command, for example `/botsy`
|
42
44
|
* incoming webhook: for botsy `say` and `attach` methods to respond
|
43
45
|
|
44
46
|
Set these up at https://your_team.slack.com/services/new and copy
|
45
47
|
the webhook urls/tokens to botsy's config as below.
|
46
48
|
|
49
|
+
## Sending messages to botsy
|
50
|
+
|
51
|
+
You have three choices of how to send messages to botsy. It is fine to
|
52
|
+
mix and match these to listen to different kinds of messages.
|
53
|
+
|
54
|
+
### Global outgoing webhook
|
55
|
+
|
56
|
+
This sends all messages from all channels to botsy, but requires a
|
57
|
+
trigger word (e.g. `botsy`). This word must be included in
|
58
|
+
`hear`-block regexes. The return from the hear block is posted
|
59
|
+
publically to the sending channel. Alternatively, return `nil` and use
|
60
|
+
`say` or `attach` to craft an asynchronous response.
|
61
|
+
|
62
|
+
Requires you to set the `outgoing_token` config variable.
|
63
|
+
|
64
|
+
### Per-channel outgoing webhooks
|
65
|
+
|
66
|
+
These do not require any trigger word or magic prefix, but you must
|
67
|
+
setup a webhook for every channel in which you want botsy to
|
68
|
+
respond. This is useful to give your botsy a little personality, by
|
69
|
+
seeming to respond to users' comments without being prompted.
|
70
|
+
|
71
|
+
As with global webhooks, `hear` block returns public responses, or use
|
72
|
+
`say` or `attach`.
|
73
|
+
|
74
|
+
Add all required channel tokens to the `outgoing_token` array.
|
75
|
+
|
76
|
+
### Slash commands
|
77
|
+
|
78
|
+
You can define one or more slash integrations that send any messages
|
79
|
+
with a slash trigger prefix (for example `/botsy`). A major advantage
|
80
|
+
is that messages can be triggered from all channels, groups and
|
81
|
+
private chats.
|
82
|
+
|
83
|
+
The return value of the `hear`-block is sent as a _private_ response
|
84
|
+
to the user (like communication from the built-in `slackbot`). This
|
85
|
+
can be useful for requesting verbose bot information without spamming
|
86
|
+
channels. To respond _publically_ from a `hear`-block, post direct to
|
87
|
+
the channel using `say` or `attach`.
|
88
|
+
|
89
|
+
The slash trigger itself is used in the `hear`-block regex match, so
|
90
|
+
you may setup as many slash integrations as you like with different
|
91
|
+
triggers, and respond appropriately.
|
92
|
+
|
93
|
+
Add all slash integration tokens to config `slash_token`.
|
94
|
+
|
95
|
+
## Sending messages to slack
|
96
|
+
|
97
|
+
There are four methods of sending data to slack in response to
|
98
|
+
matching a `hear` block. These may be mixed as necessary.
|
99
|
+
|
100
|
+
### Simple response in return
|
101
|
+
|
102
|
+
The return value from a `hear`-block is returned to slack in the http
|
103
|
+
response to the sent message. This is a lightweight synchronous
|
104
|
+
response to the same channel, and is sufficient for many needs.
|
105
|
+
|
106
|
+
Note: responses to outgoing webhooks are posted publically, responses
|
107
|
+
to slash commands are private to the requesting user (and appear to
|
108
|
+
come from `slackbot`).
|
109
|
+
|
110
|
+
### Post simple text to an incoming webhook with `say()`
|
111
|
+
|
112
|
+
Asynchronous plain-text responses may be sent with the `say()` method
|
113
|
+
from inside a `hear`-block. This is useful for multiple replies or to
|
114
|
+
pass extra arguments, such as `channel`, to post response to a
|
115
|
+
specific channel. It is also useful when botsy is expanded to be a
|
116
|
+
general API for slack integration with third-party applications.
|
117
|
+
|
118
|
+
Set the value of the `incoming_webhook` config variable to the URL
|
119
|
+
given in your slack Incoming Webhook integration.
|
120
|
+
|
121
|
+
### Post attachments to an incoming webook with `attach()`
|
122
|
+
|
123
|
+
Works exactly like `say()`, except you may post JSON containing
|
124
|
+
complex attachment information.
|
125
|
+
|
126
|
+
### Upload data directly to slack using the API
|
127
|
+
|
128
|
+
Call `post_message()` to get full access to the Slack Web API
|
129
|
+
`/chat.postMessage` call. Argument is a hash containing the same
|
130
|
+
variables described in the Web API docs. This allows uploading of text
|
131
|
+
snippets and binary data.
|
132
|
+
|
47
133
|
## Example usage
|
48
134
|
|
49
135
|
```ruby
|
@@ -60,8 +146,8 @@ config = {
|
|
60
146
|
|
61
147
|
bot = Slackbotsy::Bot.new(config) do
|
62
148
|
|
63
|
-
hear /echo\s+(.+)/ do |
|
64
|
-
"I heard #{
|
149
|
+
hear /echo\s+(.+)/ do |mdata|
|
150
|
+
"I heard #{user_name} say '#{mdata[1]}' in #{channel_name}"
|
65
151
|
end
|
66
152
|
|
67
153
|
hear /flip out/i do
|
data/lib/slackbotsy/bot.rb
CHANGED
@@ -109,32 +109,45 @@ module Slackbotsy
|
|
109
109
|
## pass list of files containing hear statements, to be opened and evaled
|
110
110
|
def eval_scripts(*files)
|
111
111
|
files.flatten.each do |file|
|
112
|
-
self.instance_eval
|
112
|
+
self.instance_eval(File.open(file).read)
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
116
|
## check message and run blocks for any matches
|
117
|
-
def
|
118
|
-
return nil unless @options['outgoing_token'].include?
|
117
|
+
def handle_outgoing_webhook(msg)
|
118
|
+
return nil unless @options['outgoing_token'].include?(msg[:token]) # ensure messages are for us from slack
|
119
119
|
return nil if msg[:user_name] == 'slackbot' # do not reply to self
|
120
120
|
return nil unless msg[:text].is_a?(String) # skip empty messages
|
121
121
|
|
122
|
-
|
123
|
-
|
124
|
-
responses
|
125
|
-
|
122
|
+
responses = get_responses(msg, msg[:text].strip)
|
123
|
+
|
124
|
+
if responses
|
125
|
+
{ text: responses.compact.join("\n") }.to_json # webhook responses are json
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def handle_slash_command(msg)
|
130
|
+
return nil unless @options['slash_token'].include?(msg[:token])
|
131
|
+
|
132
|
+
responses = get_responses(msg, "#{msg[:command]} #{msg[:text]}".strip)
|
133
|
+
|
134
|
+
if responses
|
135
|
+
responses.join("\n") # plain text responses
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
## run on msg all hear blocks matching text
|
140
|
+
def get_responses(msg, text)
|
141
|
+
message = Slackbotsy::Message.new(self, msg)
|
142
|
+
@listeners.map do |listener|
|
143
|
+
text.match(listener.regex) do |mdata|
|
126
144
|
begin
|
127
|
-
|
128
|
-
rescue => err
|
145
|
+
message.instance_exec(mdata, &listener.proc)
|
146
|
+
rescue => err # keep running even with a broken script, but report the error
|
129
147
|
err
|
130
148
|
end
|
131
149
|
end
|
132
150
|
end
|
133
|
-
|
134
|
-
## format any replies for http response
|
135
|
-
if responses
|
136
|
-
{ text: responses.compact.join("\n") }.to_json
|
137
|
-
end
|
138
151
|
end
|
139
152
|
|
140
153
|
end
|
data/lib/slackbotsy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slackbotsy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Lister
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
122
|
+
rubygems_version: 2.2.3
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: Ruby bot for Slack chat.
|