stream-chat-ruby 3.22.0 → 3.23.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef599aa75d34eac737ec0477c2c2dfa76583c7cdde1cebf6a5e21b494ea9abaa
4
- data.tar.gz: 9f5170f70e6c4490f691ee364c8f12efe2c45729bba0c877e064c748b31cb7cd
3
+ metadata.gz: 9b7896b214aa6d889a30c567056fdf2d0f6d4b6220d83a17acee469ba2b88aca
4
+ data.tar.gz: 4d7127a19485858f8ff18eef48996adc46dc4f6ae5661c6813a984a38017dd4b
5
5
  SHA512:
6
- metadata.gz: bae2b355732b9fcd45e66f34ea948cd19bdd68f394961b0c7e56c10ab35f012f296ff8d1b7e06613c90fbce2209778fc1d48bb4a7af124440bced0427aa51d6e
7
- data.tar.gz: 1240cd43dcba18db93d412fccb3b6b453e2e5c87090d19969063c34bbdd80197b4a92a8980f50ebddc13394d328f3fe9e4abefd5f65377e2b1c933361ad5094a
6
+ metadata.gz: 152671fd7190cb2762c3499996ade2c7fd4d4e1dfa823a05214da862d399ae39bcef64183b6ebd6e23912cba9b1685e93b8a1b7e4a06a43f8248d129bd460de4
7
+ data.tar.gz: 5f92a082a28faedd95b017fcc5f70f43b7c82d386da8149e4d50b03a60486f63360588b9ae280e8c71aff086cdecf6a60209fd447156e1315a02fea983b447fa
data/CHANGELOG.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [3.23.0](https://github.com/GetStream/stream-chat-ruby/compare/v3.22.0...v3.23.0) (2026-01-29)
6
+
5
7
  ## [3.22.0](https://github.com/GetStream/stream-chat-ruby/compare/v3.21.0...v3.22.0) (2026-01-15)
6
8
 
7
9
  ## [3.21.0](https://github.com/GetStream/stream-chat-ruby/compare/v3.20.0...v3.21.0) (2025-11-12)
@@ -97,6 +97,22 @@ module StreamChat
97
97
  state
98
98
  end
99
99
 
100
+ # Refreshes the channel state from the server.
101
+ # Updates the channel's members attribute with fresh data.
102
+ sig { returns(StreamChat::StreamResponse) }
103
+ def refresh_state
104
+ url = "channels/#{@channel_type}/#{@id}/query"
105
+ state = @client.post(url, data: { state: true })
106
+
107
+ # Members can be at top level or inside channel object (like Go's updateChannel)
108
+ if state['members'] && !state['members'].empty?
109
+ @members = state['members']
110
+ elsif state['channel'] && state['channel']['members']
111
+ @members = state['channel']['members']
112
+ end
113
+ state
114
+ end
115
+
100
116
  # Queries members of a channel.
101
117
  #
102
118
  # The queryMembers endpoint allows you to list and paginate members from a channel. The
@@ -323,9 +339,9 @@ module StreamChat
323
339
  end
324
340
 
325
341
  # Removes the ban for a user on this channel.
326
- sig { params(user_id: String).returns(StreamChat::StreamResponse) }
327
- def unban_user(user_id)
328
- @client.unban_user(user_id, type: @channel_type, id: @id)
342
+ sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
343
+ def unban_user(user_id, **options)
344
+ @client.unban_user(user_id, type: @channel_type, id: @id, **options)
329
345
  end
330
346
 
331
347
  # Removes a channel from query channel requests for that user until a new message is added.
@@ -0,0 +1,214 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require 'stream-chat/client'
5
+ require 'stream-chat/stream_response'
6
+ require 'stream-chat/types'
7
+
8
+ module StreamChat
9
+ class ChannelBatchUpdater
10
+ extend T::Sig
11
+
12
+ sig { params(client: StreamChat::Client).void }
13
+ def initialize(client)
14
+ @client = client
15
+ end
16
+
17
+ # Member operations
18
+
19
+ # addMembers - Add members to channels matching the filter
20
+ # @param filter [StringKeyHash] Filter to select channels
21
+ # @param members [T.any(T::Array[String], T::Array[StringKeyHash])] Members to add
22
+ # @return [StreamChat::StreamResponse] The server response
23
+ sig { params(filter: StringKeyHash, members: T.any(T::Array[String], T::Array[StringKeyHash])).returns(StreamChat::StreamResponse) }
24
+ def add_members(filter, members)
25
+ @client.update_channels_batch(
26
+ {
27
+ operation: 'addMembers',
28
+ filter: filter,
29
+ members: members
30
+ }
31
+ )
32
+ end
33
+
34
+ # removeMembers - Remove members from channels matching the filter
35
+ # @param filter [StringKeyHash] Filter to select channels
36
+ # @param members [T::Array[StringKeyHash]] Members to remove (each with user_id key)
37
+ # @return [StreamChat::StreamResponse] The server response
38
+ sig { params(filter: StringKeyHash, members: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
39
+ def remove_members(filter, members)
40
+ @client.update_channels_batch(
41
+ {
42
+ operation: 'removeMembers',
43
+ filter: filter,
44
+ members: members
45
+ }
46
+ )
47
+ end
48
+
49
+ # inviteMembers - Invite members to channels matching the filter
50
+ # @param filter [StringKeyHash] Filter to select channels
51
+ # @param members [T.any(T::Array[String], T::Array[StringKeyHash])] Members to invite
52
+ # @return [StreamChat::StreamResponse] The server response
53
+ sig { params(filter: StringKeyHash, members: T.any(T::Array[String], T::Array[StringKeyHash])).returns(StreamChat::StreamResponse) }
54
+ def invite_members(filter, members)
55
+ @client.update_channels_batch(
56
+ {
57
+ operation: 'invites',
58
+ filter: filter,
59
+ members: members
60
+ }
61
+ )
62
+ end
63
+
64
+ # addModerators - Add moderators to channels matching the filter
65
+ # @param filter [StringKeyHash] Filter to select channels
66
+ # @param members [T::Array[String]] Member IDs to promote to moderator
67
+ # @return [StreamChat::StreamResponse] The server response
68
+ sig { params(filter: StringKeyHash, members: T::Array[String]).returns(StreamChat::StreamResponse) }
69
+ def add_moderators(filter, members)
70
+ @client.update_channels_batch(
71
+ {
72
+ operation: 'addModerators',
73
+ filter: filter,
74
+ members: members
75
+ }
76
+ )
77
+ end
78
+
79
+ # demoteModerators - Remove moderator role from members in channels matching the filter
80
+ # @param filter [StringKeyHash] Filter to select channels
81
+ # @param members [T::Array[String]] Member IDs to demote
82
+ # @return [StreamChat::StreamResponse] The server response
83
+ sig { params(filter: StringKeyHash, members: T::Array[String]).returns(StreamChat::StreamResponse) }
84
+ def demote_moderators(filter, members)
85
+ @client.update_channels_batch(
86
+ {
87
+ operation: 'demoteModerators',
88
+ filter: filter,
89
+ members: members
90
+ }
91
+ )
92
+ end
93
+
94
+ # assignRoles - Assign roles to members in channels matching the filter
95
+ # @param filter [StringKeyHash] Filter to select channels
96
+ # @param members [T::Array[StringKeyHash]] Members with role assignments
97
+ # @return [StreamChat::StreamResponse] The server response
98
+ sig { params(filter: StringKeyHash, members: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
99
+ def assign_roles(filter, members)
100
+ @client.update_channels_batch(
101
+ {
102
+ operation: 'assignRoles',
103
+ filter: filter,
104
+ members: members
105
+ }
106
+ )
107
+ end
108
+
109
+ # Visibility operations
110
+
111
+ # hide - Hide channels matching the filter
112
+ # @param filter [StringKeyHash] Filter to select channels
113
+ # @return [StreamChat::StreamResponse] The server response
114
+ sig { params(filter: StringKeyHash).returns(StreamChat::StreamResponse) }
115
+ def hide(filter)
116
+ @client.update_channels_batch(
117
+ {
118
+ operation: 'hide',
119
+ filter: filter
120
+ }
121
+ )
122
+ end
123
+
124
+ # show - Show channels matching the filter
125
+ # @param filter [StringKeyHash] Filter to select channels
126
+ # @return [StreamChat::StreamResponse] The server response
127
+ sig { params(filter: StringKeyHash).returns(StreamChat::StreamResponse) }
128
+ def show(filter)
129
+ @client.update_channels_batch(
130
+ {
131
+ operation: 'show',
132
+ filter: filter
133
+ }
134
+ )
135
+ end
136
+
137
+ # archive - Archive channels matching the filter for specified members
138
+ # @param filter [StringKeyHash] Filter to select channels
139
+ # @param members [T::Array[StringKeyHash]] Members to archive channels for (each with user_id key)
140
+ # @return [StreamChat::StreamResponse] The server response
141
+ sig { params(filter: StringKeyHash, members: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
142
+ def archive(filter, members)
143
+ @client.update_channels_batch(
144
+ {
145
+ operation: 'archive',
146
+ filter: filter,
147
+ members: members
148
+ }
149
+ )
150
+ end
151
+
152
+ # unarchive - Unarchive channels matching the filter for specified members
153
+ # @param filter [StringKeyHash] Filter to select channels
154
+ # @param members [T::Array[StringKeyHash]] Members to unarchive channels for (each with user_id key)
155
+ # @return [StreamChat::StreamResponse] The server response
156
+ sig { params(filter: StringKeyHash, members: T::Array[StringKeyHash]).returns(StreamChat::StreamResponse) }
157
+ def unarchive(filter, members)
158
+ @client.update_channels_batch(
159
+ {
160
+ operation: 'unarchive',
161
+ filter: filter,
162
+ members: members
163
+ }
164
+ )
165
+ end
166
+
167
+ # Data operations
168
+
169
+ # updateData - Update data on channels matching the filter
170
+ # @param filter [StringKeyHash] Filter to select channels
171
+ # @param data [StringKeyHash] Data to update
172
+ # @return [StreamChat::StreamResponse] The server response
173
+ sig { params(filter: StringKeyHash, data: StringKeyHash).returns(StreamChat::StreamResponse) }
174
+ def update_data(filter, data)
175
+ @client.update_channels_batch(
176
+ {
177
+ operation: 'updateData',
178
+ filter: filter,
179
+ data: data
180
+ }
181
+ )
182
+ end
183
+
184
+ # addFilterTags - Add filter tags to channels matching the filter
185
+ # @param filter [StringKeyHash] Filter to select channels
186
+ # @param tags [T::Array[String]] Tags to add
187
+ # @return [StreamChat::StreamResponse] The server response
188
+ sig { params(filter: StringKeyHash, tags: T::Array[String]).returns(StreamChat::StreamResponse) }
189
+ def add_filter_tags(filter, tags)
190
+ @client.update_channels_batch(
191
+ {
192
+ operation: 'addFilterTags',
193
+ filter: filter,
194
+ filter_tags_update: tags
195
+ }
196
+ )
197
+ end
198
+
199
+ # removeFilterTags - Remove filter tags from channels matching the filter
200
+ # @param filter [StringKeyHash] Filter to select channels
201
+ # @param tags [T::Array[String]] Tags to remove
202
+ # @return [StreamChat::StreamResponse] The server response
203
+ sig { params(filter: StringKeyHash, tags: T::Array[String]).returns(StreamChat::StreamResponse) }
204
+ def remove_filter_tags(filter, tags)
205
+ @client.update_channels_batch(
206
+ {
207
+ operation: 'removeFilterTags',
208
+ filter: filter,
209
+ filter_tags_update: tags
210
+ }
211
+ )
212
+ end
213
+ end
214
+ end
@@ -17,6 +17,7 @@ require 'stream-chat/version'
17
17
  require 'stream-chat/util'
18
18
  require 'stream-chat/types'
19
19
  require 'stream-chat/moderation'
20
+ require 'stream-chat/channel_batch_updater'
20
21
 
21
22
  module StreamChat
22
23
  DEFAULT_BLOCKLIST = 'profanity_en_2020_v1'
@@ -485,6 +486,15 @@ module StreamChat
485
486
  get('query_banned_users', params: { payload: params.to_json })
486
487
  end
487
488
 
489
+ # Queries future channel bans.
490
+ #
491
+ # Future channel bans are automatically applied when a user creates a new channel
492
+ # or adds a member to an existing channel.
493
+ sig { params(options: T.untyped).returns(StreamChat::StreamResponse) }
494
+ def query_future_channel_bans(**options)
495
+ get('query_future_channel_bans', params: { payload: options.to_json })
496
+ end
497
+
488
498
  # Allows you to search for users and see if they are online/offline.
489
499
  # You can filter and sort on the custom fields you've set for your user, the user id, and when the user was last active.
490
500
  sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
@@ -1170,6 +1180,21 @@ module StreamChat
1170
1180
  post('channels/delivered', data: data || {}, params: { user_id: user_id })
1171
1181
  end
1172
1182
 
1183
+ # Update channels in batch.
1184
+ # @param payload [StringKeyHash] Payload containing operation, filter, and optional members/data/filter_tags_update
1185
+ # @return [StreamChat::StreamResponse] API response
1186
+ sig { params(payload: StringKeyHash).returns(StreamChat::StreamResponse) }
1187
+ def update_channels_batch(payload)
1188
+ put('channels/batch', data: payload)
1189
+ end
1190
+
1191
+ # Returns a ChannelBatchUpdater instance for batch channel operations.
1192
+ # @return [StreamChat::ChannelBatchUpdater] A ChannelBatchUpdater instance
1193
+ sig { returns(StreamChat::ChannelBatchUpdater) }
1194
+ def channel_batch_updater
1195
+ ChannelBatchUpdater.new(self)
1196
+ end
1197
+
1173
1198
  private
1174
1199
 
1175
1200
  sig { returns(T::Hash[String, String]) }
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module StreamChat
5
- VERSION = '3.22.0'
5
+ VERSION = '3.23.0'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stream-chat-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.22.0
4
+ version: 3.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - getstream.io
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-15 00:00:00.000000000 Z
11
+ date: 2026-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -115,6 +115,7 @@ files:
115
115
  - lib/stream-chat.rb
116
116
  - lib/stream-chat/campaign.rb
117
117
  - lib/stream-chat/channel.rb
118
+ - lib/stream-chat/channel_batch_updater.rb
118
119
  - lib/stream-chat/client.rb
119
120
  - lib/stream-chat/errors.rb
120
121
  - lib/stream-chat/moderation.rb