realtime-slackbot 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9d023b117fafe8b1b591162ef4eed2f80a93f2f
4
- data.tar.gz: 8df38b12ab08cc2b7bbe7538c8d399e67d360c56
3
+ metadata.gz: a79b3cf82fbab72c62706f8a80b4e6412b4f7a64
4
+ data.tar.gz: 25d33eb53caf8fd8b6583141b26398a844f6829e
5
5
  SHA512:
6
- metadata.gz: 3ad79d64285a5c817ef085dcc90ddad5aef433851b2bc9d792f82649724db01b643d755aeab8819f13763d55e34f26f5827fc4ccfc158237d294337ad9015be7
7
- data.tar.gz: c84af173eabf5a0143fefd4a644b801f8e20736726497b993983eb9220aca404368f67f4a4fc64d34a2fdf7743374780976a30a17b238df37503e3fef236a120
6
+ metadata.gz: 6c5b65cf27eeee8b1fad311404703fadc0266de28fb6ecfda1a48d4d094183598aa348cb5d6f66d85963d542bd03bf80326ed64e71f73c0e8e3db2d6bfa0b927
7
+ data.tar.gz: 06e51f1d0bf0badad597d7929baa0e40c927a9db141803a9b368baca2c8e46fe14612e9b77a675ff495b7bb3f5b9c03e6dcbfcd780df30f7646320deafdc861d
@@ -0,0 +1,46 @@
1
+ module SlackBot
2
+ class Channel
3
+ def initialize(info, bot)
4
+ @data = info
5
+ @bot = bot
6
+ end
7
+
8
+ def [](key)
9
+ @data[key]
10
+ end
11
+
12
+ # Helpers!
13
+ def creator
14
+ @bot.user @data['creator']
15
+ end
16
+ def id; @data['id'] end
17
+ def name; @data['name'] end
18
+ def user; @bot.user @data['user'] end
19
+ def channel?; @data['is_channel'] end
20
+ def user_channel?; @data['is_im'] end
21
+ def archived?; @data['is_archived'] end
22
+ def members
23
+ if user_channel?
24
+ return [self.user]
25
+ else
26
+ return @data['members'].map { |id| @bot.user id }
27
+ end
28
+ end
29
+ def purpose
30
+ p = @data['purpose']
31
+ p && p['value']
32
+ end
33
+ def topic
34
+ p = @data['topic']
35
+ p && p['value']
36
+ end
37
+
38
+ def to_s
39
+ if user_channel?
40
+ user.to_s
41
+ else
42
+ "##{name}"
43
+ end
44
+ end
45
+ end
46
+ end
data/lib/slack/message.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  require 'json'
2
- require_relative 'matchers/matcher'
3
2
 
4
3
  module SlackBot
5
4
  class Message
6
- attr_accessor :user
7
-
5
+ attr_reader :user
6
+
8
7
  def initialize(data, bot)
9
8
  @data = data
10
9
  @bot = bot
@@ -16,11 +15,7 @@ module SlackBot
16
15
  end
17
16
 
18
17
  def to_s
19
- "#{@user.name}: #{@data['text']}"
20
- end
21
-
22
- def user
23
- @bot.user(@data['user'])
18
+ "#{@user.name}: #{self.text}"
24
19
  end
25
20
 
26
21
  def [](key)
@@ -30,14 +25,17 @@ module SlackBot
30
25
  def []=(key, val)
31
26
  @data[key] = val
32
27
  end
33
-
34
- def method_missing(name, *args)
35
- # Access data if no args and is valid key, else throw exception
36
- if args.count == 0 && @data.has_key?(name.to_s)
37
- @data[name.to_s]
38
- else
39
- super(name, args)
40
- end
28
+
29
+ # Helpers!
30
+ def id; @data['id'] end
31
+ def text; @data['text'] end
32
+ def time
33
+ ts = @data['ts']
34
+ ts && Time.at(ts.to_i)
35
+ end
36
+ def channel
37
+ chan = @data['channel']
38
+ @bot.channel chan
41
39
  end
42
40
  end
43
41
  end
data/lib/slack/slack.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require_relative 'user'
2
2
  require_relative 'message'
3
+ require_relative 'channel'
3
4
  require_relative 'matchers/matcher_group'
4
5
  require 'net/http'
5
6
  require 'faye/websocket'
@@ -83,23 +84,64 @@ module SlackBot
83
84
  end
84
85
 
85
86
  def post(channel, message)
87
+ if channel.is_a? String
88
+ chan = channel
89
+ elsif channel.is_a? Channel
90
+ chan = channel.id
91
+ else
92
+ raise "Not a valid channel: #{channel}"
93
+ end
86
94
  data = {
87
95
  id: 1,
88
96
  type: 'message',
89
- channel: channel,
90
- text: message
97
+ channel: chan,
98
+ text: message.to_s
91
99
  }
92
100
  @socket.send data.to_json
93
101
  end
94
102
 
95
- def reply_to(data, message)
96
- post(data['channel'], message)
103
+ def reply_to(msg, text)
104
+ post(msg['channel'], text)
105
+ end
106
+
107
+ def load_channels
108
+ channels = Hash.new
109
+ @team_info['channels'].each do |chan|
110
+ channels[chan['id']] = Channel.new chan, self
111
+ end
112
+ channels
113
+ end
114
+
115
+ def channels
116
+ @channels ||= load_channels
97
117
  end
98
118
 
99
119
  def channel(id)
100
- @team_info['channels'].select { |ch| ch['id'] == id }.first rescue nil
120
+ channels[id]
121
+ end
122
+
123
+ def load_user_channels
124
+ channels = Hash.new
125
+ @team_info['ims'].each do |chan|
126
+ channels[chan['user']] = Channel.new chan, self
127
+ end
128
+ channels
101
129
  end
102
130
 
131
+ def user_channels
132
+ @user_channels ||= load_user_channels
133
+ end
134
+
135
+ def user_channel(user)
136
+ if user.is_a? User
137
+ id = user.id
138
+ else
139
+ id = user
140
+ end
141
+ user_channels[id]
142
+ end
143
+
144
+
103
145
  def load_users
104
146
  users = Hash.new
105
147
  (@team_info['users'] + @team_info['bots']).map do |info|
@@ -110,16 +152,18 @@ module SlackBot
110
152
 
111
153
  def users
112
154
  @users ||= load_users
113
- @users.values
114
155
  end
115
156
 
116
157
  def user(id)
117
- @users ||= load_users
118
- @users[id]
158
+ users[id]
159
+ end
160
+
161
+ def me
162
+ @team_info['self']
119
163
  end
120
164
 
121
- def channel(name)
122
- @team_info['channels'].select { |c| c['name'] == name }.first
165
+ def [](key)
166
+ @team_info[key]
123
167
  end
124
168
 
125
169
  def log(type, message)
data/lib/slack/user.rb CHANGED
@@ -1,32 +1,11 @@
1
1
  module SlackBot
2
- DEFAULT_ATTRS = [
3
- :id,
4
- :team_id,
5
- :name,
6
- :deleted,
7
- :status,
8
- :color,
9
- :real_name,
10
- :tz,
11
- :tz_label,
12
- :tz_offset,
13
- :profile,
14
- :is_admin,
15
- :is_owner,
16
- :is_primary_owner,
17
- :is_restricted,
18
- :is_ultra_restricted,
19
- :is_bot,
20
- :presence
21
- ]
22
2
  class User
23
-
24
3
  def initialize(data)
25
4
  @data = data
26
5
  end
27
6
 
28
7
  def to_s
29
- "#{real_name} (#{name})"
8
+ "@#{name}"
30
9
  end
31
10
 
32
11
  def pretty_name
@@ -34,17 +13,27 @@ module SlackBot
34
13
  end
35
14
 
36
15
  def pretty_first_name
37
- (real_name && real_name.split(' ').first) || name
16
+ first_name || name
38
17
  end
39
18
 
40
- def method_missing(sym)
41
- if @data.has_key? sym.to_s
42
- return @data[sym.to_s]
43
- elsif DEFAULT_ATTRS.include? sym.to_sym
44
- return nil
45
- else
46
- super
47
- end
19
+ def [](key)
20
+ @data[key]
48
21
  end
22
+
23
+ # Helper methods for getting info
24
+ def profile; @data['profile'] || {} end
25
+ def real_name; profile['real_name'] end
26
+ def first_name; profile['first_name'] end
27
+ def last_name; profile['last_name'] end
28
+
29
+ def id; @data['id'] end
30
+ def name; @data['name'] end
31
+ def deleted; @data['deleted'] end
32
+ def admin?; @data['admin'] end
33
+ def owner?; @data['owner'] end
34
+ def primary_owner?; @data['primary_owner'] end
35
+ def bot?; @data['is_bot'] end
36
+ def presence; @data['presence'] end
37
+ def user_channel; @bot.user_channel self end
49
38
  end
50
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: realtime-slackbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Will Richardson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-21 00:00:00.000000000 Z
11
+ date: 2016-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket
@@ -46,6 +46,7 @@ extra_rdoc_files: []
46
46
  files:
47
47
  - lib/realtime-slackbot.rb
48
48
  - lib/slack/bot.rb
49
+ - lib/slack/channel.rb
49
50
  - lib/slack/matchers/matcher.rb
50
51
  - lib/slack/matchers/matcher_group.rb
51
52
  - lib/slack/message.rb
@@ -76,3 +77,4 @@ signing_key:
76
77
  specification_version: 4
77
78
  summary: Slackbot realtime API
78
79
  test_files: []
80
+ has_rdoc: