rublox 0.1.0 → 0.3.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
  SHA256:
3
- metadata.gz: 1e1d91f1dc37df6df866bdf110705af8a5f78e68748edd2d577ff44de821e0f7
4
- data.tar.gz: c91696dacf025936ce517ffdcca4cae5672856bcd46822b04f28c002bc5eb0e5
3
+ metadata.gz: ca58ae27999a8a9d6dad08937ce3167d34163e903571912c47da20cd19c1814a
4
+ data.tar.gz: 6116e15392c612305c88425a84d737a867bf6531d36022354f4d410147987837
5
5
  SHA512:
6
- metadata.gz: db8304263e8be041a5fb44b6c090240014c5473c84088d72b7c881b0c40abad7134d6f5dec7842b1d7a767655db833a193d4c8c79d5f0486c9a06d59748ea175
7
- data.tar.gz: a32d33986c09589f38f95f9e91b8f4746b4236fea4263aabbb41af8fc63f6d717e865d21d02755b1a578c2673a45cf4f5a22fda4f3f8fb13b6fd659856fd4a6f
6
+ metadata.gz: 353887d40de73fdb4926837cdfc5209e310db9a9bd323283f288ed312e709e71425133f556f734badd7a54429fbff8fd8acc066fe00dc5701a72ca5c0491bc18
7
+ data.tar.gz: 03bbc4ff1011eda5b039c7dcdd9dafcbec8c3f20ae6c462e6e817dcd3b5e2abe849fd2a318ed6d92e7ff542e882aa4b5647e5070430e80b34ade740631b77631
data/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2021 Roblox API wrappers
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Roblox API wrappers
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,68 +1,58 @@
1
- <div align="center">
2
- <img src="https://raw.githubusercontent.com/roblox-api-wrappers/.github/main/res/rublox_logo.png" alt="rublox" width="15%" height="15%"/>
3
- </div>
4
-
5
- <br>
6
-
7
- <div align="center">
8
- <a href="https://rubygems.org/gems/rublox">
9
- <img alt="gem" src="https://img.shields.io/gem/dt/rublox?color=rgb%28170%2C%200%2C%200%29&logo=rubygems&style=flat-square">
10
- </a>
11
-
12
- <a href="https://rubygems.org/gems/rublox">
13
- <img alt="gem version" src="https://img.shields.io/gem/v/rublox?color=rgb%28170%2C%200%2C%200%29&label=gem%20version&logo=rubygems&style=flat-square">
14
- </a>
15
-
16
- <a href="https://github.com/roblox-api-wrappers/rublox/blob/main/LICENSE">
17
- <img alt="license: MIT" src="https://img.shields.io/github/license/roblox-api-wrappers/rublox?color=rgb%28150%2C%200%2C%200%29&logo=github&style=flat-square">
18
- </a>
19
-
20
- <img alt="commit activity" src="https://img.shields.io/github/commit-activity/m/roblox-api-wrappers/rublox?color=rgb%28170%2C%200%2C%200%29&logo=github&style=flat-square">
21
-
22
- <img alt="repo stars" src="https://img.shields.io/github/stars/roblox-api-wrappers/rublox?color=rgb%28170%2C%200%2C%200%29&logo=github&style=flat-square">
23
-
24
- <a href="https://rubydoc.info/gems/rublox">
25
- <img alt="docs" src="https://img.shields.io/badge/docs-rubydoc.info-aa0000?style=flat-square">
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
- </div>
32
-
33
- <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
-
35
- <br>
36
-
37
- # Installation
38
-
39
- Include rublox in your application's `Gemfile`
40
-
41
- ```ruby
42
- gem "rublox", "~> 0.1.0"
43
- ```
44
-
45
- or run
46
-
47
- > $ gem install rublox
48
-
49
- on your terminal.
50
-
51
- # Getting started
52
-
53
- The gateway to the API is the [Rublox::Client](https://rubydoc.info/gems/rublox/Rublox/Client) object. You can initialize it with your _.ROBLOSECURITY_ cookie if you need functionality that needs it.
54
-
55
- ```ruby
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
- ```
61
-
62
- **(if you open-source/work with other people on your application, it is recommended to keep your cookie in a `.env` file and load it with a library like [dotenv](https://rubygems.org/gems/dotenv))**
63
-
64
- From there, you can build off your application's logic with methods provided via [Rublox::Client](https://rubydoc.info/gems/rublox/Rublox/Client)
65
-
66
- # Documentation
67
-
68
- You can access the documentation at https://rubydoc.info/gems/rublox.
1
+ <div align="center">
2
+ <img src="https://raw.githubusercontent.com/roblox-api-wrappers/.github/main/res/rublox_logo.png" alt="rublox" width="15%" height="15%"/>
3
+ </div>
4
+
5
+ <br>
6
+
7
+ <div align="center">
8
+ <a href="https://rubygems.org/gems/rublox">
9
+ <img alt="gem" src="https://img.shields.io/gem/dt/rublox?color=rgb%28170%2C%200%2C%200%29&logo=rubygems&style=flat-square">
10
+ </a>
11
+
12
+ <a href="https://rubygems.org/gems/rublox">
13
+ <img alt="gem version" src="https://img.shields.io/gem/v/rublox?color=rgb%28170%2C%200%2C%200%29&label=gem%20version&logo=rubygems&style=flat-square">
14
+ </a>
15
+
16
+ <a href="https://github.com/roblox-api-wrappers/rublox/blob/main/LICENSE">
17
+ <img alt="license: MIT" src="https://img.shields.io/github/license/roblox-api-wrappers/rublox?color=rgb%28150%2C%200%2C%200%29&logo=github&style=flat-square">
18
+ </a>
19
+
20
+ <img alt="commit activity" src="https://img.shields.io/github/commit-activity/m/roblox-api-wrappers/rublox?color=rgb%28170%2C%200%2C%200%29&logo=github&style=flat-square">
21
+
22
+ <img alt="repo stars" src="https://img.shields.io/github/stars/roblox-api-wrappers/rublox?color=rgb%28170%2C%200%2C%200%29&logo=github&style=flat-square">
23
+
24
+ <a href="https://rubydoc.info/gems/rublox">
25
+ <img alt="docs" src="https://img.shields.io/badge/docs-rubydoc.info-aa0000?style=flat-square">
26
+ </a>
27
+ </div>
28
+
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>
30
+
31
+ <br>
32
+
33
+ # Getting Started
34
+
35
+ Authentication can be done by setting the .ROBLOSECURITY cookie through `Rublox.roblosecurity=`
36
+ ```ruby
37
+ require "rublox"
38
+
39
+ Rublox.roblosecurity = "cookie"
40
+
41
+ require "dotenv"
42
+ Dotenv.load
43
+
44
+ Rublox.roblosecurity = ENV["ROBLOSECURITY"]
45
+ ```
46
+
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:
49
+
50
+ ![](https://cdn.discordapp.com/attachments/827652175609856053/1070881521348653056/image.png)
51
+
52
+ And methods for getting the corresponding model can be found by searching through methods:
53
+
54
+ ![](https://cdn.discordapp.com/attachments/827652175609856053/1070881991093919794/image.png)
55
+
56
+ # Documentation
57
+
58
+ You can access the documentation at https://rubydoc.info/gems/rublox.
@@ -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
@@ -1,50 +1,33 @@
1
- # frozen_string_literal: true
2
-
3
- require "rublox/models/group_member"
4
- require "rublox/models/group_role"
5
-
6
- module Rublox
7
- # This mixin module contains functions that can be called on group objects.
8
- # @abstract
9
- module Group
10
- # @example
11
- # client = Rublox::Client.new
12
- # group = client.group_from_id(1)
13
- # group.roles.each { |role| puts role.rank } # 0, 1, 180, 100, 254, 255
14
- # @return [Array<GroupRole>] the group's roles
15
- def roles
16
- @client.http_client.get(
17
- URL.endpoint("groups", "v1/groups/#{@id}/roles")
18
- )["roles"].map { |role| GroupRole.new(role, self, @client) }
19
- end
20
-
21
- # @example
22
- # client = Rublox::Client.new
23
- # group = client.group_from_id(7384468)
24
- # member = group.member_by_id(1)
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
33
-
34
- # @example
35
- # client = Rublox::Client.new
36
- # group = client.group_from_id(7384468)
37
- # owner_member = group.member_by_user(group.owner)
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
46
-
47
- GroupMember.new(user, GroupRole.new(data["role"], self, @client), self, @client)
48
- end
49
- end
50
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "rublox/models/group_shout"
4
+ require "rublox/util/api_helper"
5
+
6
+ module Rublox
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
16
+
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
21
+
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
26
+
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
33
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rublox
4
+ module Derive
5
+ module Model
6
+ # @return [String]
7
+ def to_s
8
+ "#<#{self.class} of ID #{@id}>"
9
+ end
10
+
11
+ # @return [Boolean]
12
+ def ==(other)
13
+ @id == other.id
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,89 +1,43 @@
1
- # frozen_string_literal: true
2
-
3
- require "rublox/util/url"
4
-
5
- module Rublox
6
- # This mixin module contains functions that can be called on user objects.
7
- # @abstract
8
- module User
9
- # @example Updating a {FullUser}
10
- # client = Rublox::Client.new
11
- # user = client.user_from_id(1)
12
- # puts user.display_name # -> Roblox
13
- # # suppose the Roblox account changes it's display name to "ABC"
14
- # refreshed_user = user.refresh
15
- # puts refreshed_user.display_name # -> ABC
16
- # @example Updating a {LimitedUser}
17
- # client = Rublox::Client.new
18
- # group = client.group_from_id(1)
19
- # # say we want the user's join date. LimitedUsers do not contain that information, so we can update it to get a
20
- # # FullUser, which has that
21
- # the_full_user_owner = group.owner.refresh
22
- # # we can now get the owner's join date
23
- # puts the_full_user_owner.join_date.inspect # "2008-09-30 15:54:26 UTC"
24
- # @return [FullUser] a mirrored {FullUser} object, containing new information
25
- # about theuser if it has been changed, or if the user is a {LimitedUser}.
26
- def refresh
27
- @client.user_from_id(@id)
28
- end
29
-
30
- # @example
31
- # client = Rublox::Client.new
32
- # user = client.user_from_id(1)
33
- # puts user.friend_count # -> 0
34
- # @return [Integer] the count of how many friends the user has
35
- def friend_count
36
- @client.http_client.get(
37
- URL.endpoint("friends", "/v1/users/#{@id}/friends/count")
38
- )["count"]
39
- end
40
-
41
- # @example
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
89
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "rublox/util/api_helper"
4
+ require "rublox/derive/model"
5
+
6
+ module Rublox
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
43
+ end
@@ -1,60 +1,55 @@
1
- # frozen_string_literal: true
2
-
3
- require "rublox/models/group_shout"
4
- require "rublox/models/limited_user"
5
- require "rublox/derive/group"
6
-
7
- module Rublox
8
- # @note This class is handled internally by the public interface such as
9
- # {Client#group_from_id}. You should not be creating it yourself.
10
- # The {FullGroup} class corresponds to a full group response you can get via
11
- # https://groups.roblox.com/v1/groups/groupId. You can use it to get information
12
- # about groups.
13
- #
14
- # See {Group} for methods you can call on groups!
15
- class FullGroup
16
- include Group
17
-
18
- # @return [Integer] the group's ID
19
- attr_reader :id
20
-
21
- # @return [String] the group's name
22
- attr_reader :name
23
-
24
- # @return [String] the group's description
25
- attr_reader :description
26
-
27
- # @return [LimitedUser, nil] the group's owner, can be nil if the group has
28
- # no owner
29
- attr_reader :owner
30
-
31
- # @return [GroupShout, nil] the group's shout, can be nil if the group has
32
- # no shout
33
- attr_reader :shout
34
-
35
- # @return [Integer] the count of how many members the group has
36
- attr_reader :member_count
37
-
38
- # @return [true, false] is the group locked?
39
- attr_reader :locked
40
-
41
- # @return [true, false] is the group private/invite only?
42
- attr_reader :private
43
-
44
- # @param data [Hash]
45
- # @param client [Client]
46
- def initialize(data, client)
47
- @id = data["id"]
48
- @name = data["name"]
49
- @description = data["description"]
50
- @owner = LimitedUser.new(data["owner"], client) if data["owner"]
51
- @shout = GroupShout.new(data["shout"], client, @id) if data["shout"]
52
- @member_count = data["memberCount"]
53
- # isLocked is only returned if the group is locked, else it is just null (awesome)
54
- @locked = !data["isLocked"].nil?
55
- @private = data["publicEntryAllowed"]
56
-
57
- @client = client
58
- end
59
- end
60
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "rublox/derive/group"
4
+ require "rublox/models/skinny_user"
5
+ require "rublox/models/group_shout"
6
+
7
+ module Rublox
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
55
+ end