twitchrb 1.2.6 → 1.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +15 -2
  3. data/.rubocop.yml +8 -0
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +70 -2
  6. data/README.md +53 -2
  7. data/Rakefile +1 -1
  8. data/lib/twitch/client.rb +5 -5
  9. data/lib/twitch/collection.rb +12 -0
  10. data/lib/twitch/oauth.rb +3 -5
  11. data/lib/twitch/object.rb +1 -1
  12. data/lib/twitch/objects/warning.rb +4 -0
  13. data/lib/twitch/resources/announcements.rb +1 -3
  14. data/lib/twitch/resources/automod.rb +4 -6
  15. data/lib/twitch/resources/badges.rb +0 -2
  16. data/lib/twitch/resources/banned_events.rb +0 -2
  17. data/lib/twitch/resources/banned_users.rb +1 -3
  18. data/lib/twitch/resources/blocked_terms.rb +2 -4
  19. data/lib/twitch/resources/channels.rb +2 -4
  20. data/lib/twitch/resources/charity_campaigns.rb +1 -3
  21. data/lib/twitch/resources/chat_messages.rb +1 -3
  22. data/lib/twitch/resources/chatters.rb +1 -3
  23. data/lib/twitch/resources/clips.rb +1 -3
  24. data/lib/twitch/resources/custom_reward_redemptions.rb +2 -4
  25. data/lib/twitch/resources/custom_rewards.rb +3 -5
  26. data/lib/twitch/resources/emotes.rb +0 -2
  27. data/lib/twitch/resources/event_sub_conduit.rb +2 -4
  28. data/lib/twitch/resources/eventsub_conduits.rb +5 -7
  29. data/lib/twitch/resources/eventsub_subscriptions.rb +2 -4
  30. data/lib/twitch/resources/games.rb +5 -7
  31. data/lib/twitch/resources/goals.rb +1 -3
  32. data/lib/twitch/resources/hype_train_events.rb +1 -3
  33. data/lib/twitch/resources/moderator_events.rb +0 -2
  34. data/lib/twitch/resources/moderators.rb +2 -4
  35. data/lib/twitch/resources/polls.rb +2 -4
  36. data/lib/twitch/resources/predictions.rb +2 -4
  37. data/lib/twitch/resources/raids.rb +1 -3
  38. data/lib/twitch/resources/search.rb +0 -2
  39. data/lib/twitch/resources/shoutouts.rb +0 -2
  40. data/lib/twitch/resources/stream_markers.rb +0 -2
  41. data/lib/twitch/resources/stream_schedule.rb +5 -7
  42. data/lib/twitch/resources/streams.rb +0 -2
  43. data/lib/twitch/resources/subscriptions.rb +2 -4
  44. data/lib/twitch/resources/tags.rb +0 -2
  45. data/lib/twitch/resources/unban_requests.rb +2 -5
  46. data/lib/twitch/resources/users.rb +9 -11
  47. data/lib/twitch/resources/videos.rb +1 -3
  48. data/lib/twitch/resources/vips.rb +1 -3
  49. data/lib/twitch/resources/warnings.rb +12 -0
  50. data/lib/twitch/resources/whispers.rb +1 -3
  51. data/lib/twitch/version.rb +1 -1
  52. data/lib/twitch.rb +2 -2
  53. data/lib/twitchrb.rb +1 -1
  54. data/twitchrb.gemspec +3 -3
  55. metadata +5 -2
@@ -1,21 +1,19 @@
1
1
  module Twitch
2
2
  class EventSubSubscriptionsResource < Resource
3
-
4
3
  def list(**params)
5
4
  response = get_request("eventsub/subscriptions", params: params)
6
5
  Collection.from_response(response, type: EventSubSubscription)
7
6
  end
8
7
 
9
8
  def create(type:, version:, condition:, transport:, **params)
10
- attributes = {type: type, version: version, condition: condition, transport: transport}.merge(params)
9
+ attributes = { type: type, version: version, condition: condition, transport: transport }.merge(params)
11
10
  response = post_request("eventsub/subscriptions", body: attributes)
12
11
 
13
12
  EventSubSubscription.new(response.body.dig("data")[0]) if response.success?
14
13
  end
15
14
 
16
15
  def delete(id:)
17
- delete_request("eventsub/subscriptions", params: {id: id})
16
+ delete_request("eventsub/subscriptions", params: { id: id })
18
17
  end
19
-
20
18
  end
21
19
  end
@@ -1,36 +1,34 @@
1
1
  module Twitch
2
2
  class EventsubConduitsResource < Resource
3
-
4
3
  def list(**params)
5
4
  response = get_request("eventsub/conduits", params: params)
6
5
  Collection.from_response(response, type: EventsubConduit)
7
6
  end
8
7
 
9
8
  def create(shard_count:)
10
- response = post_request("eventsub/conduits", body: {shard_count: shard_count})
9
+ response = post_request("eventsub/conduits", body: { shard_count: shard_count })
11
10
 
12
11
  EventsubConduit.new(response.body.dig("data")[0]) if response.success?
13
12
  end
14
13
 
15
14
  def update(id:, shard_count:)
16
- response = patch_request("eventsub/conduits", body: {id: id, shard_count: shard_count})
15
+ response = patch_request("eventsub/conduits", body: { id: id, shard_count: shard_count })
17
16
 
18
17
  EventsubConduit.new(response.body.dig("data")[0]) if response.success?
19
18
  end
20
19
 
21
20
  def delete(id:)
22
- delete_request("eventsub/conduits", params: {id: id})
21
+ delete_request("eventsub/conduits", params: { id: id })
23
22
  end
24
23
 
25
24
  def shards(id:, **params)
26
- response = get_request("eventsub/conduits/shards", params: {conduit_id: id}.merge(params))
25
+ response = get_request("eventsub/conduits/shards", params: { conduit_id: id }.merge(params))
27
26
  Collection.from_response(response, type: EventsubConduitShard)
28
27
  end
29
28
 
30
29
  def update_shards(id:, shards:)
31
- response = patch_request("eventsub/conduits/shards", body: {conduit_id: id, shards: shards})
30
+ response = patch_request("eventsub/conduits/shards", body: { conduit_id: id, shards: shards })
32
31
  Collection.from_response(response, type: EventsubConduitShard)
33
32
  end
34
-
35
33
  end
36
34
  end
@@ -1,21 +1,19 @@
1
1
  module Twitch
2
2
  class EventsubSubscriptionsResource < Resource
3
-
4
3
  def list(**params)
5
4
  response = get_request("eventsub/subscriptions", params: params)
6
5
  Collection.from_response(response, type: EventsubSubscription)
7
6
  end
8
7
 
9
8
  def create(type:, version:, condition:, transport:, **params)
10
- attributes = {type: type, version: version, condition: condition, transport: transport}.merge(params)
9
+ attributes = { type: type, version: version, condition: condition, transport: transport }.merge(params)
11
10
  response = post_request("eventsub/subscriptions", body: attributes)
12
11
 
13
12
  EventsubSubscription.new(response.body.dig("data")[0]) if response.success?
14
13
  end
15
14
 
16
15
  def delete(id:)
17
- delete_request("eventsub/subscriptions", params: {id: id})
16
+ delete_request("eventsub/subscriptions", params: { id: id })
18
17
  end
19
-
20
18
  end
21
19
  end
@@ -1,17 +1,16 @@
1
1
  module Twitch
2
2
  class GamesResource < Resource
3
-
4
3
  def retrieve(id: nil, ids: nil, name: nil, names: nil)
5
4
  raise "Either id, ids, name or names is required" unless !id.nil? || !ids.nil? || !name.nil? || !names.nil?
6
5
 
7
6
  if id
8
- response = get_request("games", params: {id: id})
7
+ response = get_request("games", params: { id: id })
9
8
  elsif ids
10
- response = get_request("games", params: {id: ids})
9
+ response = get_request("games", params: { id: ids })
11
10
  elsif names
12
- response = get_request("games", params: {name: names})
11
+ response = get_request("games", params: { name: names })
13
12
  else
14
- response = get_request("games", params: {name: name})
13
+ response = get_request("games", params: { name: name })
15
14
  end
16
15
 
17
16
  body = response.body.dig("data")
@@ -20,7 +19,7 @@ module Twitch
20
19
  elsif ids || names && body.count > 1
21
20
  Collection.from_response(response, type: Game)
22
21
  else
23
- return nil
22
+ nil
24
23
  end
25
24
  end
26
25
 
@@ -28,6 +27,5 @@ module Twitch
28
27
  response = get_request("games/top", params: params)
29
28
  Collection.from_response(response, type: Game)
30
29
  end
31
-
32
30
  end
33
31
  end
@@ -1,12 +1,10 @@
1
1
  module Twitch
2
2
  class GoalsResource < Resource
3
-
4
3
  # Required scope: channel:read:goals
5
4
  # Broadcaster ID must match the user in the OAuth token
6
5
  def list(broadcaster_id:)
7
- response = get_request("goals", params: {broadcaster_id: broadcaster_id})
6
+ response = get_request("goals", params: { broadcaster_id: broadcaster_id })
8
7
  Collection.from_response(response, type: Goal)
9
8
  end
10
-
11
9
  end
12
10
  end
@@ -1,12 +1,10 @@
1
1
  module Twitch
2
2
  class HypeTrainEventsResource < Resource
3
-
4
3
  # Required scope: channel:read:hype_train
5
4
  # Broadcaster ID must match the user in the OAuth token
6
5
  def list(broadcaster_id:)
7
- response = get_request("hypetrain/events", params: {broadcaster_id: broadcaster_id})
6
+ response = get_request("hypetrain/events", params: { broadcaster_id: broadcaster_id })
8
7
  Collection.from_response(response, type: HypeTrainEvent)
9
8
  end
10
-
11
9
  end
12
10
  end
@@ -1,11 +1,9 @@
1
1
  module Twitch
2
2
  class ModeratorEventsResource < Resource
3
-
4
3
  # Broadcaster ID must match the user in the OAuth token
5
4
  def list(broadcaster_id:, **params)
6
5
  response = get_request("moderation/moderators/events", params: params.merge(broadcaster_id: broadcaster_id))
7
6
  Collection.from_response(response, type: ModeratorEvent)
8
7
  end
9
-
10
8
  end
11
9
  end
@@ -1,9 +1,8 @@
1
1
  module Twitch
2
2
  class ModeratorsResource < Resource
3
-
4
3
  # User ID must match the user in the OAuth token
5
4
  def channels(user_id:)
6
- response = get_request("moderation/channels", params: {user_id: user_id})
5
+ response = get_request("moderation/channels", params: { user_id: user_id })
7
6
  Collection.from_response(response, type: Channel)
8
7
  end
9
8
 
@@ -14,12 +13,11 @@ module Twitch
14
13
  end
15
14
 
16
15
  def create(broadcaster_id:, user_id:)
17
- post_request("moderation/moderators", body: {broadcaster_id: broadcaster_id, user_id: user_id})
16
+ post_request("moderation/moderators", body: { broadcaster_id: broadcaster_id, user_id: user_id })
18
17
  end
19
18
 
20
19
  def delete(broadcaster_id:, user_id:)
21
20
  delete_request("moderation/moderators?broadcaster_id=#{broadcaster_id}&user_id=#{user_id}")
22
21
  end
23
-
24
22
  end
25
23
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class PollsResource < Resource
3
-
4
3
  # Broadcaster ID must match the user in the OAuth token
5
4
  def list(broadcaster_id:, **params)
6
5
  response = get_request("polls", params: params.merge(broadcaster_id: broadcaster_id))
@@ -9,7 +8,7 @@ module Twitch
9
8
 
10
9
  # Broadcaster ID must match the user in the OAuth token
11
10
  def create(broadcaster_id:, title:, choices:, duration:, **params)
12
- attrs = {broadcaster_id: broadcaster_id, title: title, choices: choices, duration: duration}
11
+ attrs = { broadcaster_id: broadcaster_id, title: title, choices: choices, duration: duration }
13
12
  response = post_request("polls", body: attrs.merge(params))
14
13
 
15
14
  Poll.new(response.body.dig("data")[0]) if response.success?
@@ -17,11 +16,10 @@ module Twitch
17
16
 
18
17
  # Broadcaster ID must match the user in the OAuth token
19
18
  def end(broadcaster_id:, id:, status:)
20
- attrs = {broadcaster_id: broadcaster_id, id: id, status: status.upcase}
19
+ attrs = { broadcaster_id: broadcaster_id, id: id, status: status.upcase }
21
20
  response = patch_request("polls", body: attrs)
22
21
 
23
22
  Poll.new(response.body.dig("data")[0]) if response.success?
24
23
  end
25
-
26
24
  end
27
25
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class PredictionsResource < Resource
3
-
4
3
  # Broadcaster ID must match the user in the OAuth token
5
4
  def list(broadcaster_id:, **params)
6
5
  response = get_request("predictions", params: params.merge(broadcaster_id: broadcaster_id))
@@ -14,7 +13,7 @@ module Twitch
14
13
 
15
14
  # Broadcaster ID must match the user in the OAuth token
16
15
  def create(broadcaster_id:, title:, outcomes:, duration:, **params)
17
- attrs = {broadcaster_id: broadcaster_id, title: title, outcomes: outcomes, prediction_window: duration}
16
+ attrs = { broadcaster_id: broadcaster_id, title: title, outcomes: outcomes, prediction_window: duration }
18
17
  response = post_request("predictions", body: attrs.merge(params))
19
18
 
20
19
  Prediction.new(response.body.dig("data")[0]) if response.success?
@@ -22,11 +21,10 @@ module Twitch
22
21
 
23
22
  # Broadcaster ID must match the user in the OAuth token
24
23
  def end(broadcaster_id:, id:, status:, **params)
25
- attrs = {broadcaster_id: broadcaster_id, id: id, status: status.upcase}
24
+ attrs = { broadcaster_id: broadcaster_id, id: id, status: status.upcase }
26
25
  response = patch_request("predictions", body: attrs.merge(params))
27
26
 
28
27
  Prediction.new(response.body.dig("data")[0]) if response.success?
29
28
  end
30
-
31
29
  end
32
30
  end
@@ -1,9 +1,8 @@
1
1
  module Twitch
2
2
  class RaidsResource < Resource
3
-
4
3
  # from_broadcaster_id must match the user in the OAuth token
5
4
  def create(from_broadcaster_id:, to_broadcaster_id:)
6
- attrs = {from_broadcaster_id: from_broadcaster_id, to_broadcaster_id: to_broadcaster_id}
5
+ attrs = { from_broadcaster_id: from_broadcaster_id, to_broadcaster_id: to_broadcaster_id }
7
6
 
8
7
  response = post_request("raids", body: attrs)
9
8
 
@@ -14,6 +13,5 @@ module Twitch
14
13
  def delete(broadcaster_id:)
15
14
  delete_request("raids?broadcaster_id=#{broadcaster_id}")
16
15
  end
17
-
18
16
  end
19
17
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class SearchResource < Resource
3
-
4
3
  def categories(query:, **params)
5
4
  response = get_request("search/categories", params: params.merge(query: query))
6
5
 
@@ -12,6 +11,5 @@ module Twitch
12
11
 
13
12
  Collection.from_response(response, type: SearchResult)
14
13
  end
15
-
16
14
  end
17
15
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class ShoutoutsResource < Resource
3
-
4
3
  # Moderator ID must match the user in the OAuth token
5
4
  # From: the ID of the Broadcaster creating the Shoutout
6
5
  # To: the ID of the Broadcaster the Shoutout will be for
@@ -8,6 +7,5 @@ module Twitch
8
7
  def create(from:, to:, moderator_id:)
9
8
  post_request("chat/shoutouts?from_broadcaster_id=#{from}&to_broadcaster_id=#{to}&moderator_id=#{moderator_id}", body: nil)
10
9
  end
11
-
12
10
  end
13
11
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class StreamMarkersResource < Resource
3
-
4
3
  # Required scope: user:read:broadcast
5
4
  def list(**params)
6
5
  response = get_request("streams/markers", params: params)
@@ -14,6 +13,5 @@ module Twitch
14
13
 
15
14
  StreamMarker.new(response.body.dig("data")[0]) if response.success?
16
15
  end
17
-
18
16
  end
19
17
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class StreamScheduleResource < Resource
3
-
4
3
  # Broadcaster ID must match the user in the OAuth token
5
4
  def list(broadcaster_id:, **params)
6
5
  response = get_request("schedule", params: params.merge(broadcaster_id: broadcaster_id))
@@ -10,7 +9,7 @@ module Twitch
10
9
 
11
10
  # Broadcaster ID must match the user in the OAuth token
12
11
  def icalendar(broadcaster_id:)
13
- response = get_request("schedule/icalendar", params: {broadcaster_id: broadcaster_id})
12
+ response = get_request("schedule/icalendar", params: { broadcaster_id: broadcaster_id })
14
13
 
15
14
  response.body
16
15
  end
@@ -23,7 +22,7 @@ module Twitch
23
22
 
24
23
  # Broadcaster ID must match the user in the OAuth token
25
24
  def create_segment(broadcaster_id:, start_time:, timezone:, duration:, is_recurring:, **params)
26
- attrs = {broadcaster_id: broadcaster_id, start_time: start_time, duration: duration, timezone: timezone, is_recurring: is_recurring}
25
+ attrs = { broadcaster_id: broadcaster_id, start_time: start_time, duration: duration, timezone: timezone, is_recurring: is_recurring }
27
26
  response = post_request("schedule/segment", body: attrs.merge(params))
28
27
 
29
28
  StreamSchedule.new(response.body) if response.success?
@@ -31,7 +30,7 @@ module Twitch
31
30
 
32
31
  # Broadcaster ID must match the user in the OAuth token
33
32
  def update_segment(broadcaster_id:, id:, **params)
34
- attrs = {broadcaster_id: broadcaster_id, id: id}
33
+ attrs = { broadcaster_id: broadcaster_id, id: id }
35
34
  response = patch_request("schedule/segment", body: attrs.merge(params))
36
35
 
37
36
  StreamSchedule.new(response.body) if response.success?
@@ -39,9 +38,8 @@ module Twitch
39
38
 
40
39
  # Broadcaster ID must match the user in the OAuth token
41
40
  def delete_segment(broadcaster_id:, id:)
42
- attrs = {broadcaster_id: broadcaster_id, id: id}
41
+ attrs = { broadcaster_id: broadcaster_id, id: id }
43
42
  delete_request("schedule/segment", params: attrs)
44
- end
45
-
43
+ end
46
44
  end
47
45
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class StreamsResource < Resource
3
-
4
3
  def list(**params)
5
4
  response = get_request("streams", params: params)
6
5
 
@@ -14,6 +13,5 @@ module Twitch
14
13
 
15
14
  Collection.from_response(response, type: Stream)
16
15
  end
17
-
18
16
  end
19
17
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class SubscriptionsResource < Resource
3
-
4
3
  # Get all subscriptions for a broadcaster
5
4
  # Broadcaster ID must match the user in the OAuth token
6
5
  # Required scope: channel:read:subscriptions
@@ -14,7 +13,7 @@ module Twitch
14
13
  # User ID must match the user in the OAuth token
15
14
  # Required scope: user:read:subscriptions
16
15
  def is_subscribed(broadcaster_id:, user_id:, **params)
17
- attrs = {broadcaster_id: broadcaster_id, user_id: user_id}
16
+ attrs = { broadcaster_id: broadcaster_id, user_id: user_id }
18
17
  response = get_request("subscriptions/user", params: attrs.merge(params))
19
18
  Collection.from_response(response, type: Subscription)
20
19
  end
@@ -23,10 +22,9 @@ module Twitch
23
22
  # Broadcaster ID must match the user in the OAuth token
24
23
  # Required scope: channel:read:subscriptions
25
24
  def counts(broadcaster_id:)
26
- response = get_request("subscriptions", params: {broadcaster_id: broadcaster_id})
25
+ response = get_request("subscriptions", params: { broadcaster_id: broadcaster_id })
27
26
 
28
27
  SubscriptionCount.new(count: response.body["total"], points: response.body["points"])
29
28
  end
30
-
31
29
  end
32
30
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class TagsResource < Resource
3
-
4
3
  def list(**params)
5
4
  response = get_request("tags/streams", params: params)
6
5
  Collection.from_response(response, type: Tag)
@@ -15,6 +14,5 @@ module Twitch
15
14
  def replace(broadcaster_id:, **params)
16
15
  put_request("streams/tags", body: params.merge(broadcaster_id: broadcaster_id))
17
16
  end
18
-
19
17
  end
20
18
  end
@@ -1,18 +1,15 @@
1
1
  module Twitch
2
2
  class UnbanRequestsResource < Resource
3
-
4
3
  def list(broadcaster_id:, moderator_id:, status:, **params)
5
- attrs = {broadcaster_id: broadcaster_id, moderator_id: moderator_id, status: status}
4
+ attrs = { broadcaster_id: broadcaster_id, moderator_id: moderator_id, status: status }
6
5
  response = get_request("moderation/unban_requests", params: attrs.merge(params))
7
6
  Collection.from_response(response, type: UnbanRequest)
8
7
  end
9
8
 
10
9
  def resolve(broadcaster_id:, moderator_id:, id:, status:, **params)
11
- attrs = {broadcaster_id: broadcaster_id, moderator_id: moderator_id, unban_request_id: id, status: status}
10
+ attrs = { broadcaster_id: broadcaster_id, moderator_id: moderator_id, unban_request_id: id, status: status }
12
11
  response = patch_request("moderation/unban_requests", body: attrs.merge(params))
13
12
  UnbanRequest.new(response.body.dig("data")[0])
14
-
15
13
  end
16
-
17
14
  end
18
15
  end
@@ -1,17 +1,16 @@
1
1
  module Twitch
2
2
  class UsersResource < Resource
3
-
4
3
  def retrieve(id: nil, ids: nil, username: nil, usernames: nil)
5
4
  raise "Either id, ids, username or usernames is required" unless !id.nil? || !ids.nil? || !username.nil? || !usernames.nil?
6
5
 
7
6
  if id
8
- response = get_request("users", params: {id: id})
7
+ response = get_request("users", params: { id: id })
9
8
  elsif ids
10
- response = get_request("users", params: {id: ids})
9
+ response = get_request("users", params: { id: ids })
11
10
  elsif usernames
12
- response = get_request("users", params: {login: usernames})
11
+ response = get_request("users", params: { login: usernames })
13
12
  else
14
- response = get_request("users", params: {login: username})
13
+ response = get_request("users", params: { login: username })
15
14
  end
16
15
 
17
16
  body = response.body.dig("data")
@@ -20,20 +19,20 @@ module Twitch
20
19
  elsif ids || usernames && body.count > 1
21
20
  Collection.from_response(response, type: User)
22
21
  else
23
- return nil
22
+ nil
24
23
  end
25
24
  end
26
25
 
27
26
  # Updates the current users description
28
27
  # Required scope: user:edit
29
28
  def update(description:)
30
- response = put_request("users", body: {description: description})
29
+ response = put_request("users", body: { description: description })
31
30
  User.new response.body.dig("data")[0]
32
31
  end
33
32
 
34
33
  def get_color(user_id: nil, user_ids: nil)
35
34
  if user_ids != nil
36
- users = user_ids.split(",").map{|i| "user_id=#{i.strip}"}.join("&")
35
+ users = user_ids.split(",").map { |i| "user_id=#{i.strip}" }.join("&")
37
36
  puts "chat/color?#{users}"
38
37
  response = get_request("chat/color?#{users}")
39
38
  Collection.from_response(response, type: UserColor)
@@ -80,7 +79,7 @@ module Twitch
80
79
  def following?(from_id:, to_id:)
81
80
  warn "`users.following?` is deprecated. Use `channels.followers` or `channels.following` instead."
82
81
 
83
- response = get_request("users/follows", params: {from_id: from_id, to_id: to_id})
82
+ response = get_request("users/follows", params: { from_id: from_id, to_id: to_id })
84
83
 
85
84
  if response.body["data"].empty?
86
85
  false
@@ -90,10 +89,9 @@ module Twitch
90
89
  end
91
90
 
92
91
  def emotes(user_id:, **params)
93
- attrs = {user_id: user_id}
92
+ attrs = { user_id: user_id }
94
93
  response = get_request("chat/emotes/user", params: attrs.merge(params))
95
94
  Collection.from_response(response, type: Emote)
96
95
  end
97
-
98
96
  end
99
97
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class VideosResource < Resource
3
-
4
3
  def list(**params)
5
4
  raise "user_id or game_id is required" unless !params[:user_id].nil? || !params[:game_id].nil?
6
5
 
@@ -9,7 +8,7 @@ module Twitch
9
8
  end
10
9
 
11
10
  def retrieve(id:)
12
- response = get_request("videos", params: {id: id})
11
+ response = get_request("videos", params: { id: id })
13
12
  if response.body
14
13
  Video.new response.body["data"].first
15
14
  end
@@ -19,6 +18,5 @@ module Twitch
19
18
  def delete(video_id:)
20
19
  delete_request("videos?id=#{video_id}")
21
20
  end
22
-
23
21
  end
24
22
  end
@@ -1,6 +1,5 @@
1
1
  module Twitch
2
2
  class VipsResource < Resource
3
-
4
3
  # Broadcaster ID must match the user in the OAuth token
5
4
  def list(broadcaster_id:, **params)
6
5
  response = get_request("channels/vips", params: params.merge(broadcaster_id: broadcaster_id))
@@ -8,12 +7,11 @@ module Twitch
8
7
  end
9
8
 
10
9
  def create(broadcaster_id:, user_id:)
11
- post_request("channels/vips", body: {broadcaster_id: broadcaster_id, user_id: user_id})
10
+ post_request("channels/vips", body: { broadcaster_id: broadcaster_id, user_id: user_id })
12
11
  end
13
12
 
14
13
  def delete(broadcaster_id:, user_id:)
15
14
  delete_request("channels/vips?broadcaster_id=#{broadcaster_id}&user_id=#{user_id}")
16
15
  end
17
-
18
16
  end
19
17
  end
@@ -0,0 +1,12 @@
1
+ module Twitch
2
+ class WarningsResource < Resource
3
+ # Moderator ID must match the user in the OAuth token
4
+ # Required scope: moderator:manage:warnings
5
+ def create(broadcaster_id:, moderator_id:, user_id:, reason:)
6
+ attrs = { user_id: user_id, reason: reason }
7
+
8
+ response = post_request("moderation/warnings?broadcaster_id=#{broadcaster_id}&moderator_id=#{moderator_id}", body: { data: attrs })
9
+ Collection.from_response(response, type: Warning)
10
+ end
11
+ end
12
+ end
@@ -1,9 +1,7 @@
1
1
  module Twitch
2
2
  class WhispersResource < Resource
3
-
4
3
  def create(from_user_id:, to_user_id:, message:)
5
- post_request("whispers", body: {from_user_id: from_user_id, to_user_id: to_user_id, message: message})
4
+ post_request("whispers", body: { from_user_id: from_user_id, to_user_id: to_user_id, message: message })
6
5
  end
7
-
8
6
  end
9
7
  end
@@ -1,3 +1,3 @@
1
1
  module Twitch
2
- VERSION = "1.2.6"
2
+ VERSION = "1.3.0"
3
3
  end
data/lib/twitch.rb CHANGED
@@ -3,7 +3,6 @@ require "json"
3
3
  require "twitch/version"
4
4
 
5
5
  module Twitch
6
-
7
6
  autoload :Client, "twitch/client"
8
7
  autoload :Collection, "twitch/collection"
9
8
  autoload :Error, "twitch/error"
@@ -49,6 +48,7 @@ module Twitch
49
48
  autoload :ChattersResource, "twitch/resources/chatters"
50
49
  autoload :ShoutoutsResource, "twitch/resources/shoutouts"
51
50
  autoload :UnbanRequestsResource, "twitch/resources/unban_requests"
51
+ autoload :WarningsResource, "twitch/resources/warnings"
52
52
 
53
53
 
54
54
  autoload :User, "twitch/objects/user"
@@ -93,5 +93,5 @@ module Twitch
93
93
  autoload :Chatter, "twitch/objects/chatter"
94
94
  autoload :ChatMessage, "twitch/objects/chat_message"
95
95
  autoload :UnbanRequest, "twitch/objects/unban_request"
96
-
96
+ autoload :Warning, "twitch/objects/warning"
97
97
  end
data/lib/twitchrb.rb CHANGED
@@ -1 +1 @@
1
- require "twitch"
1
+ require "twitch"
data/twitchrb.gemspec CHANGED
@@ -3,8 +3,8 @@ require_relative 'lib/twitch/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "twitchrb"
5
5
  spec.version = Twitch::VERSION
6
- spec.authors = ["Dean Perry"]
7
- spec.email = ["dean@deanpcmad.com"]
6
+ spec.authors = [ "Dean Perry" ]
7
+ spec.email = [ "dean@deanpcmad.com" ]
8
8
 
9
9
  spec.summary = "A Ruby library for interacting with the Twitch Helix API"
10
10
  spec.homepage = "https://deanpcmad.com"
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  end
23
23
  spec.bindir = "exe"
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
- spec.require_paths = ["lib"]
25
+ spec.require_paths = [ "lib" ]
26
26
 
27
27
  spec.add_dependency "faraday", "~> 2.0"
28
28
  end