realtime-slackbot 0.1.1 → 1.0.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 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: