discordrb 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of discordrb might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 17194fcdf12b5f81b55a74f37cd276dcf9e13071
4
- data.tar.gz: cb7bd42eb2b78807e44646c35b1717e6a89a3825
3
+ metadata.gz: b0dcdf2ba14487766e026041d7e00e0e49f565d7
4
+ data.tar.gz: 2630df655c054d3a00520302bcf8e164f199cddd
5
5
  SHA512:
6
- metadata.gz: aa692f6814a8440a5783f7c3881e9472b4094e7000c52a762fe0231becf8dad7a1c08b05cfb37aad4bda0f5c0371dad97bdfd88536ebf02e3c1288b0202b6e19
7
- data.tar.gz: 86caf5985693e9cf07d64b385b5bab07286c0c06e2e50c16325115e55a5fb1fbb2d47ba7b2ca4effa1887f04825fc6b96b939625c674f5e43aa56f7fb991c864
6
+ metadata.gz: 6641d9e376c4bacb632a7e9796914974fe3e8225aa9f32604ad9bdd7d84bcc63a8f4dcf5e66b9a1c4af4bebcf4da5b4c7a64f641fc0c6f4793fdc98205de2e24
7
+ data.tar.gz: f06c2d54af5b4572ebe1a74e108252880e469ecfba206b9e6c5b7dfe55493c9480474b47a0f178ca2e1e537a78e151c877845e66f5229f0bb82b9401ec3a521b
data/lib/discordrb/bot.rb CHANGED
@@ -27,6 +27,8 @@ module Discordrb
27
27
 
28
28
  @channels = {}
29
29
  @users = {}
30
+
31
+ add_default_handlers
30
32
  end
31
33
 
32
34
  def run
@@ -129,6 +131,24 @@ module Discordrb
129
131
 
130
132
  private
131
133
 
134
+ # Register any default event handlers that the end user shouldn't
135
+ # need to worry about implementing
136
+ def add_default_handlers
137
+ # Update a user's status
138
+ presence do |event|
139
+ user_id = event.user.id
140
+ cached_user = @users[user_id]
141
+ if !cached_user
142
+ # If this is a user we've never seen before, add them
143
+ @users[user_id] = event.user
144
+ cached_user = event.user
145
+ end
146
+ cached_user.instance_exec(event.status) do |status|
147
+ @status = status
148
+ end
149
+ end
150
+ end
151
+
132
152
  def debug(message)
133
153
  puts "[DEBUG @ #{Time.now.to_s}] #{message}" if @debug
134
154
  end
@@ -3,14 +3,21 @@
3
3
  module Discordrb
4
4
  class User
5
5
  attr_reader :username, :id, :discriminator, :avatar
6
+
7
+ # Is the user online, offline, or away?
8
+ attr_reader :status
9
+
6
10
  alias_method :name, :username
7
11
 
8
12
  def initialize(data, bot)
9
13
  @bot = bot
14
+
10
15
  @username = data['username']
11
16
  @id = data['id'].to_i
12
17
  @discriminator = data['discriminator']
13
18
  @avatar = data['avatar']
19
+
20
+ @status = :offline
14
21
  end
15
22
 
16
23
  # Utility function to mention users in messages
@@ -32,16 +39,17 @@ module Discordrb
32
39
  end
33
40
 
34
41
  class Channel
35
- attr_reader :name, :server, :type, :id, :is_private, :recipient
42
+ attr_reader :name, :server, :type, :id, :is_private, :recipient, :topic
36
43
 
37
44
  def initialize(data, bot)
38
45
  @bot = bot
39
46
 
40
47
  #data is a sometimes a Hash and othertimes an array of Hashes, you only want the last one if it's an array
41
- data = data[-1] if data.is_a?(Array)
48
+ data = data[-1] if data.is_a?(Array)
42
49
 
43
- @id = data['id']
50
+ @id = data['id'].to_i
44
51
  @type = data['type'] || 'text'
52
+ @topic = data['topic']
45
53
 
46
54
  @is_private = data['is_private']
47
55
  if @is_private
@@ -85,6 +93,9 @@ module Discordrb
85
93
  class Server
86
94
  attr_reader :region, :name, :owner_id, :id, :members
87
95
 
96
+ # Array of channels on the server
97
+ attr_reader :channels
98
+
88
99
  def initialize(data, bot)
89
100
  @bot = bot
90
101
  @region = data['region']
@@ -93,9 +104,36 @@ module Discordrb
93
104
  @id = data['id'].to_i
94
105
 
95
106
  @members = []
107
+ members_by_id = {}
96
108
 
97
109
  data['members'].each do |element|
98
- @members << User.new(element, bot)
110
+ user = User.new(element['user'], bot)
111
+ @members << user
112
+ members_by_id[user.id] = user
113
+ end
114
+
115
+ # Update user statuses with presence info
116
+ if data['presences']
117
+ data['presences'].each do |element|
118
+ if element['user']
119
+ user = members_by_id[element['user']['id'].to_i]
120
+ if user && element['status']
121
+ # I don't want to make User#status writable, so we'll use
122
+ # instance_exec to open the object and set the status
123
+ user.instance_exec(element['status']) do |status|
124
+ @status = status.to_sym
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ @channels = []
132
+
133
+ if data['channels']
134
+ data['channels'].each do |element|
135
+ @channels << Channel.new(element, bot)
136
+ end
99
137
  end
100
138
  end
101
139
  end
@@ -1,3 +1,3 @@
1
1
  module Discordrb
2
- VERSION = "1.1.2"
2
+ VERSION = "1.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discordrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - meew0
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-10 00:00:00.000000000 Z
11
+ date: 2015-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket