rublox 0.2.0 → 0.3.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 +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 +25 -42
- data/lib/rublox/derive/model.rb +17 -0
- data/lib/rublox/derive/user.rb +38 -84
- data/lib/rublox/models/full_group.rb +49 -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 +54 -93
- data/lib/rublox/models/skinny_user.rb +28 -0
- data/lib/rublox/util/api_helper.rb +69 -0
- data/lib/rublox/util/errors.rb +40 -105
- data/lib/rublox.rb +69 -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: ca58ae27999a8a9d6dad08937ce3167d34163e903571912c47da20cd19c1814a
|
4
|
+
data.tar.gz: 6116e15392c612305c88425a84d737a867bf6531d36022354f4d410147987837
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 353887d40de73fdb4926837cdfc5209e310db9a9bd323283f288ed312e709e71425133f556f734badd7a54429fbff8fd8acc066fe00dc5701a72ca5c0491bc18
|
7
|
+
data.tar.gz: 03bbc4ff1011eda5b039c7dcdd9dafcbec8c3f20ae6c462e6e817dcd3b5e2abe849fd2a318ed6d92e7ff542e882aa4b5647e5070430e80b34ade740631b77631
|
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
|
+

|
61
51
|
|
62
|
-
|
52
|
+
And methods for getting the corresponding model can be found by searching through methods:
|
63
53
|
|
64
|
-
|
54
|
+

|
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,33 @@
|
|
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
|
-
# puts member.role.rank # -> 1
|
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
|
+
def accept_join_request(user_id)
|
18
|
+
APIHelper.post("https://groups.roblox.com/v1/groups/#{@id}/join-requests/users/#{user_id}")
|
19
|
+
nil
|
20
|
+
end
|
33
21
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
# puts owner_member.role.rank # -> 255
|
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
|
22
|
+
def decline_join_request(user_id)
|
23
|
+
APIHelper.delete("https://groups.roblox.com/v1/groups/#{@id}/join-requests/users/#{user_id}")
|
24
|
+
nil
|
25
|
+
end
|
46
26
|
|
47
|
-
|
48
|
-
|
49
|
-
|
27
|
+
def kick(user_id)
|
28
|
+
APIHelper.delete("https://groups.roblox.com/v1/groups/#{@id}/users/#{user_id}")
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
50
33
|
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 [Number] 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,55 @@
|
|
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
|
-
@private = data["publicEntryAllowed"]
|
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]
|
19
|
+
attr_reader :owner
|
20
|
+
# @return [GroupShout]
|
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
|
+
def update_shout!(message)
|
51
|
+
@shout = update_shout(message)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
60
55
|
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?]
|
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
|