slackbotsy 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|