rublox 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -23
- data/lib/rublox/bases/base_group.rb +19 -0
- data/lib/rublox/bases/base_user.rb +19 -0
- data/lib/rublox/derive/group.rb +28 -42
- data/lib/rublox/derive/model.rb +17 -0
- data/lib/rublox/derive/user.rb +38 -84
- data/lib/rublox/models/full_group.rb +50 -54
- data/lib/rublox/models/full_user.rb +34 -43
- data/lib/rublox/models/group_shout.rb +21 -57
- data/lib/rublox/models/presence.rb +56 -93
- data/lib/rublox/models/skinny_user.rb +28 -0
- data/lib/rublox/util/api_helper.rb +71 -0
- data/lib/rublox/util/errors.rb +40 -105
- data/lib/rublox.rb +77 -116
- data/rublox.gemspec +24 -26
- metadata +30 -47
- data/Gemfile +0 -6
- data/Rakefile +0 -33
- data/lib/rublox/models/group_member.rb +0 -54
- data/lib/rublox/models/group_role.rb +0 -355
- data/lib/rublox/models/limited_user.rb +0 -34
- data/lib/rublox/util/cache.rb +0 -39
- data/lib/rublox/util/http_client.rb +0 -95
- data/lib/rublox/util/pages.rb +0 -85
- data/lib/rublox/util/url.rb +0 -25
- data/lib/rublox/version.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d71b3699e8ae0069057c6df240c9ab0199b98f7891c9675543f4b058faf49d3
|
4
|
+
data.tar.gz: b1816f4f994d9d5a78d10bd9cb9ce53882ebabcf3847f2bb58ae9d8d0c5d2cc0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33ab5fe58df3c385f14334db14cfced103b5c7004c62b25b8005041b070cf336e5fffbefc00aa5691a05ee11ba3970157f7533e08e32380d72e0f13f4ff31058
|
7
|
+
data.tar.gz: f76ac4fec783276f419fdf1814cd2b6a71cbc82bbeaf5930f373727e6d3c7e0ebd8f2f8ee555596aa53268d1bbb2752c9a79b8efae4d4a6e2154fcf00e2f518e
|
data/README.md
CHANGED
@@ -24,44 +24,34 @@
|
|
24
24
|
<a href="https://rubydoc.info/gems/rublox">
|
25
25
|
<img alt="docs" src="https://img.shields.io/badge/docs-rubydoc.info-aa0000?style=flat-square">
|
26
26
|
</a>
|
27
|
-
|
28
|
-
<a href="https://guilded.gg/roblox-api-wrappers">
|
29
|
-
<img alt="support server" src="https://img.shields.io/badge/guilded-support%20server-aa0000.svg?style=flat-square&logo=guilded">
|
30
|
-
</a>
|
31
27
|
</div>
|
32
28
|
|
33
29
|
<div align="center"> <i>rublox is a Roblox web API wrapper written in Ruby. It aims to provide an object oriented interface to get and modify data from Roblox's web API. </i> </div>
|
34
30
|
|
35
31
|
<br>
|
36
32
|
|
37
|
-
#
|
38
|
-
|
39
|
-
Include rublox in your application's `Gemfile`
|
33
|
+
# Getting Started
|
40
34
|
|
35
|
+
Authentication can be done by setting the .ROBLOSECURITY cookie through `Rublox.roblosecurity=`
|
41
36
|
```ruby
|
42
|
-
|
43
|
-
```
|
37
|
+
require "rublox"
|
44
38
|
|
45
|
-
|
39
|
+
Rublox.roblosecurity = "cookie"
|
46
40
|
|
47
|
-
|
41
|
+
require "dotenv"
|
42
|
+
Dotenv.load
|
48
43
|
|
49
|
-
|
50
|
-
|
51
|
-
# Getting started
|
44
|
+
Rublox.roblosecurity = ENV["ROBLOSECURITY"]
|
45
|
+
```
|
52
46
|
|
53
|
-
|
47
|
+
All classes representing the Roblox API models should not be initialised by the user. Instead, they are all made through methods in modules and classes.
|
48
|
+
Models can be found by searching through classes:
|
54
49
|
|
55
|
-
|
56
|
-
# Without a cookie
|
57
|
-
client = Rublox::Client.new
|
58
|
-
# With a cookie
|
59
|
-
client = Rublox::Client.new("_|WARNING:-DO-NOT-SHARE-THIS.--Sharing-this ...")
|
60
|
-
```
|
50
|
+
![](https://cdn.discordapp.com/attachments/827652175609856053/1070881521348653056/image.png)
|
61
51
|
|
62
|
-
|
52
|
+
And methods for getting the corresponding model can be found by searching through methods:
|
63
53
|
|
64
|
-
|
54
|
+
![](https://cdn.discordapp.com/attachments/827652175609856053/1070881991093919794/image.png)
|
65
55
|
|
66
56
|
# Documentation
|
67
57
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rublox/derive/group"
|
4
|
+
|
5
|
+
module Rublox
|
6
|
+
module Bases
|
7
|
+
class BaseGroup
|
8
|
+
include Derive::Group
|
9
|
+
|
10
|
+
# @return [Integer]
|
11
|
+
attr_reader :id
|
12
|
+
|
13
|
+
# @!visibility private
|
14
|
+
def initialize(id)
|
15
|
+
@id = id
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rublox/derive/user"
|
4
|
+
|
5
|
+
module Rublox
|
6
|
+
module Bases
|
7
|
+
class BaseUser
|
8
|
+
include Derive::User
|
9
|
+
|
10
|
+
# @return [Integer]
|
11
|
+
attr_reader :id
|
12
|
+
|
13
|
+
# @!visibility private
|
14
|
+
def initialize(id)
|
15
|
+
@id = id
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/rublox/derive/group.rb
CHANGED
@@ -1,50 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "rublox/models/
|
4
|
-
require "rublox/
|
3
|
+
require "rublox/models/group_shout"
|
4
|
+
require "rublox/util/api_helper"
|
5
5
|
|
6
6
|
module Rublox
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@client.http_client.get(
|
17
|
-
URL.endpoint("groups", "v1/groups/#{@id}/roles")
|
18
|
-
)["roles"].map { |role| GroupRole.new(role, self, @client) }
|
19
|
-
end
|
7
|
+
module Derive
|
8
|
+
module Group
|
9
|
+
# @return [Models::GroupShout] the new group shout
|
10
|
+
def update_shout(message)
|
11
|
+
Models::GroupShout.new(APIHelper.patch(
|
12
|
+
"https://groups.roblox.com/v1/groups/#{@id}/status",
|
13
|
+
json: { message: message }
|
14
|
+
))
|
15
|
+
end
|
20
16
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
# @param id [Integer] the user's ID
|
27
|
-
# @return [GroupMember] the user as a group member object
|
28
|
-
def member_by_id(id)
|
29
|
-
member_by_user(@client.user_from_id(id))
|
30
|
-
rescue Errors::UserNotFoundError
|
31
|
-
raise Errors::MemberNotFoundError.new(id, @id)
|
32
|
-
end
|
17
|
+
# @return [nil]
|
18
|
+
def accept_join_request(user_id)
|
19
|
+
APIHelper.post("https://groups.roblox.com/v1/groups/#{@id}/join-requests/users/#{user_id}")
|
20
|
+
nil
|
21
|
+
end
|
33
22
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
# @param user [FullUser, LimitedUser] the user to tie to the group member
|
40
|
-
# @return [GroupMember] the user as a group member object
|
41
|
-
def member_by_user(user)
|
42
|
-
data = @client.http_client.get(
|
43
|
-
URL.endpoint("groups", "v2/users/#{user.id}/groups/roles")
|
44
|
-
)["data"].find { |member_data| member_data["group"]["id"] == @id }
|
45
|
-
raise Errors::MemberNotFoundError.new(user.id, @id) unless data
|
23
|
+
# @return [nil]
|
24
|
+
def decline_join_request(user_id)
|
25
|
+
APIHelper.delete("https://groups.roblox.com/v1/groups/#{@id}/join-requests/users/#{user_id}")
|
26
|
+
nil
|
27
|
+
end
|
46
28
|
|
47
|
-
|
48
|
-
|
49
|
-
|
29
|
+
# @return [nil]
|
30
|
+
def kick(user_id)
|
31
|
+
APIHelper.delete("https://groups.roblox.com/v1/groups/#{@id}/users/#{user_id}")
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
50
36
|
end
|
data/lib/rublox/derive/user.rb
CHANGED
@@ -1,89 +1,43 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "rublox/util/
|
3
|
+
require "rublox/util/api_helper"
|
4
|
+
require "rublox/derive/model"
|
4
5
|
|
5
6
|
module Rublox
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
# client = Rublox::Client.new
|
43
|
-
# user = client.user_from_id(1)
|
44
|
-
# puts user.follower_count # -> around 6 million
|
45
|
-
# @return [Integer] the count of how many followers the user has
|
46
|
-
def follower_count
|
47
|
-
@client.http_client.get(
|
48
|
-
URL.endpoint("friends", "/v1/users/#{@id}/followers/count")
|
49
|
-
)["count"]
|
50
|
-
end
|
51
|
-
|
52
|
-
# @example
|
53
|
-
# client = Rublox::Client.new
|
54
|
-
# user = client.user_from_id(1)
|
55
|
-
# puts user.followings_count # -> 0
|
56
|
-
# @return [Integer] the count of how many users the user has followed
|
57
|
-
def followings_count
|
58
|
-
@client.http_client.get(
|
59
|
-
URL.endpoint("friends", "/v1/users/#{@id}/followings/count")
|
60
|
-
)["count"]
|
61
|
-
end
|
62
|
-
|
63
|
-
# @example
|
64
|
-
# client = Rublox::Client.new
|
65
|
-
# user = client.user_from_id(1)
|
66
|
-
# puts user.status # -> "Welcome to Roblox, the Imagination Platform. Make friends, explore, and play games!"
|
67
|
-
# @return [String] the user's status
|
68
|
-
def status
|
69
|
-
@client.http_client.get(
|
70
|
-
URL.endpoint("users", "/v1/users/#{@id}/status")
|
71
|
-
)["status"]
|
72
|
-
end
|
73
|
-
|
74
|
-
# @example
|
75
|
-
# client = Rublox::Client.new
|
76
|
-
# user = client.user_from_id(1)
|
77
|
-
# presence = user.presence
|
78
|
-
# puts presence.last_location # -> "Website"
|
79
|
-
# @return [Presence] the presence state of the user
|
80
|
-
def presence
|
81
|
-
@client.user_presence_from_id(@id)
|
82
|
-
end
|
83
|
-
|
84
|
-
# @return [String] a readable string representation of the user
|
85
|
-
def to_s
|
86
|
-
"User of ID #{@id}, username: #{@username}"
|
87
|
-
end
|
88
|
-
end
|
7
|
+
module Derive
|
8
|
+
module User
|
9
|
+
include Model
|
10
|
+
|
11
|
+
# @return [Integer] the amount of robux the current authenticated user has
|
12
|
+
def currency
|
13
|
+
APIHelper.get("https://economy.roblox.com/v1/users/#{@id}/currency")["robux"]
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Boolean]
|
17
|
+
def premium?
|
18
|
+
APIHelper.get("https://premiumfeatures.roblox.com/v1/users/#{@id}/validate-membership")
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Integer]
|
22
|
+
def friend_count
|
23
|
+
get_generic_count "friends"
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Integer]
|
27
|
+
def follower_count
|
28
|
+
get_generic_count "followers"
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Integer]
|
32
|
+
def followings_count
|
33
|
+
get_generic_count "followings"
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def get_generic_count(channel)
|
39
|
+
APIHelper.get("https://friends.roblox.com/v1/users/#{@id}/#{channel}/count")["count"]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
89
43
|
end
|
@@ -1,60 +1,56 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "rublox/models/group_shout"
|
4
|
-
require "rublox/models/limited_user"
|
5
3
|
require "rublox/derive/group"
|
4
|
+
require "rublox/models/skinny_user"
|
5
|
+
require "rublox/models/group_shout"
|
6
6
|
|
7
7
|
module Rublox
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
@client = client
|
58
|
-
end
|
59
|
-
end
|
8
|
+
module Models
|
9
|
+
class FullGroup
|
10
|
+
include Derive::Group
|
11
|
+
|
12
|
+
# @return [Integer]
|
13
|
+
attr_reader :id
|
14
|
+
# @return [String]
|
15
|
+
attr_reader :name
|
16
|
+
# @return [String]
|
17
|
+
attr_reader :description
|
18
|
+
# @return [SkinnyUser, nil]
|
19
|
+
attr_reader :owner
|
20
|
+
# @return [GroupShout, nil]
|
21
|
+
attr_reader :shout
|
22
|
+
# @return [Integer]
|
23
|
+
attr_reader :member_count
|
24
|
+
# @return [Boolean]
|
25
|
+
attr_reader :is_builders_club_only
|
26
|
+
# @return [Boolean]
|
27
|
+
attr_reader :public_entry_allowed
|
28
|
+
# @return [Boolean]
|
29
|
+
attr_reader :is_locked
|
30
|
+
# @return [Boolean]
|
31
|
+
attr_reader :has_verified_badge
|
32
|
+
|
33
|
+
# @!visibility private
|
34
|
+
def initialize(data)
|
35
|
+
owner_data = data["owner"]
|
36
|
+
shout_data = data["shout"]
|
37
|
+
@id = data["id"]
|
38
|
+
@name = data["name"]
|
39
|
+
@description = data["description"]
|
40
|
+
@owner = SkinnyUser.new(owner_data) if owner_data
|
41
|
+
@shout = GroupShout.new(shout_data) if shout_data
|
42
|
+
@member_count = data["memberCount"]
|
43
|
+
@is_builders_club_only = data["isBuildersClubOnly"]
|
44
|
+
@public_entry_allowed = data["publicEntryAllowed"]
|
45
|
+
@is_locked = !data["isLocked"].nil?
|
46
|
+
@has_verified_badge = data["hasVerifiedBadge"]
|
47
|
+
end
|
48
|
+
|
49
|
+
# Updates the group shout and sets {#shout} to the new group shout
|
50
|
+
# @return [nil]
|
51
|
+
def update_shout!(message)
|
52
|
+
@shout = update_shout(message)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
60
56
|
end
|
@@ -1,49 +1,40 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "time"
|
4
|
-
|
5
3
|
require "rublox/derive/user"
|
6
4
|
|
7
5
|
module Rublox
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
@description = data["description"]
|
43
|
-
@banned = data["banned"]
|
44
|
-
@join_date = Time.iso8601(data["created"])
|
45
|
-
|
46
|
-
@client = client
|
47
|
-
end
|
48
|
-
end
|
6
|
+
module Models
|
7
|
+
class FullUser
|
8
|
+
include Derive::User
|
9
|
+
|
10
|
+
# @return [String]
|
11
|
+
attr_reader :description
|
12
|
+
# @return [Time]
|
13
|
+
attr_reader :created
|
14
|
+
# @return [Boolean]
|
15
|
+
attr_reader :is_banned
|
16
|
+
# @return [String, nil]
|
17
|
+
attr_reader :external_app_display_name
|
18
|
+
# @return [Boolean]
|
19
|
+
attr_reader :has_verified_badge
|
20
|
+
# @return [Integer]
|
21
|
+
attr_reader :id
|
22
|
+
# @return [String]
|
23
|
+
attr_reader :name
|
24
|
+
# @return [String]
|
25
|
+
attr_reader :display_name
|
26
|
+
|
27
|
+
# @!visibility private
|
28
|
+
def initialize(data)
|
29
|
+
@description = data["description"]
|
30
|
+
@created = Time.iso8601(data["created"])
|
31
|
+
@is_banned = data["isBanned"]
|
32
|
+
@external_app_display_name = data["externalAppDisplayName"]
|
33
|
+
@has_verified_badge = data["hasVerifiedBadge"]
|
34
|
+
@id = data["id"]
|
35
|
+
@name = data["name"]
|
36
|
+
@display_name = data["displayName"]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
49
40
|
end
|
@@ -1,62 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "rublox/models/
|
3
|
+
require "rublox/models/skinny_user"
|
4
4
|
|
5
5
|
module Rublox
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@client = client
|
27
|
-
end
|
28
|
-
|
29
|
-
# Sends a new shout.
|
30
|
-
# @example
|
31
|
-
# client = Rublox::Client.new
|
32
|
-
# group = client.group_from_id(1)
|
33
|
-
# group.shout.send_shout("new shout")
|
34
|
-
# @param new_shout [String] the body of the new shout
|
35
|
-
# @return [void]
|
36
|
-
def send_shout(new_shout)
|
37
|
-
@client.http_client.patch(
|
38
|
-
URL.endpoint("groups", "v1/groups/#{@group_id}/status"),
|
39
|
-
json: {
|
40
|
-
message: new_shout
|
41
|
-
}
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
# Clears the group shout. Same as calling {#send_shout} with an empty string.
|
46
|
-
# @example
|
47
|
-
# client = Rublox::Client.new
|
48
|
-
# group = client.group_from_id(1)
|
49
|
-
# group.shout.clear
|
50
|
-
# # same as
|
51
|
-
# group.shout.send_shout("")
|
52
|
-
# @return [void]
|
53
|
-
def clear
|
54
|
-
send_shout("")
|
55
|
-
end
|
56
|
-
|
57
|
-
# @return [GroupShout] A new group shout object with updated information.
|
58
|
-
def refresh
|
59
|
-
@client.group_from_id(@group_id).shout
|
60
|
-
end
|
61
|
-
end
|
6
|
+
module Models
|
7
|
+
class GroupShout
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :body
|
10
|
+
# @return [SkinnyUser]
|
11
|
+
attr_reader :poster
|
12
|
+
# @return [Time]
|
13
|
+
attr_reader :created
|
14
|
+
# @return [Time]
|
15
|
+
attr_reader :updated
|
16
|
+
|
17
|
+
# @!visibility private
|
18
|
+
def initialize(data)
|
19
|
+
@body = data["body"]
|
20
|
+
@poster = SkinnyUser.new(data["poster"])
|
21
|
+
@created = Time.iso8601(data["created"])
|
22
|
+
@updated = Time.iso8601(data["updated"])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
62
26
|
end
|