Skip to content

Commit 3ce3056

Browse files
authored
Add user presence code examples (#142)
1 parent aa375a0 commit 3ce3056

File tree

4 files changed

+185
-106
lines changed

4 files changed

+185
-106
lines changed

Assets/Plugins/StreamChat/Core/StatefulModels/IStreamUser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public interface IStreamUser : IStreamStatefulModel
4848

4949
/// <summary>
5050
/// Invisible user will appear as offline to other users
51-
/// You can change user visibility with <see cref="ChangeVisibilityAsync"/>
51+
/// You can change user visibility with <see cref="MarkInvisibleAsync"/> & <see cref="MarkVisibleAsync"/>
5252
/// </summary>
5353
/// <remarks>https://getstream.io/chat/docs/unity/presence_format/?language=unity</remarks>
5454
bool Invisible { get; }

Assets/Plugins/StreamChat/Samples/MessagesCodeSamples.cs

Lines changed: 103 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,39 @@ internal sealed class MessagesCodeSamples
1717
/// </summary>
1818
public async Task Overview()
1919
{
20-
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
21-
var message = await channel.SendNewMessageAsync("Hello world!");
20+
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
21+
var message = await channel.SendNewMessageAsync("Hello world!");
2222
}
2323

2424
/// <summary>
2525
/// https://getstream.io/chat/docs/unity/send_message/?language=unity#complex-example
2626
/// </summary>
2727
public async Task ComplexExample()
2828
{
29-
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, "my-channel-id");
29+
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, "my-channel-id");
3030

31-
IStreamUser someUser = null;
31+
IStreamUser someUser = null;
3232

3333
// Send simple message with text only
34-
var message3 = await channel.SendNewMessageAsync("Hello");
34+
var message3 = await channel.SendNewMessageAsync("Hello");
3535

3636
// Send simple message with text only
37-
var message2 = await channel.SendNewMessageAsync("Let's start a thread!");
37+
var message2 = await channel.SendNewMessageAsync("Let's start a thread!");
3838

39-
var message = await channel.SendNewMessageAsync(new StreamSendMessageRequest
40-
{
41-
MentionedUsers = new List<IStreamUser> { someUser }, // Mention a user
42-
ParentId = message2.Id, // Write in thread
43-
PinExpires = new DateTimeOffset(DateTime.Now).AddDays(7), // Pin for 7 days
44-
Pinned = true,
45-
QuotedMessage = message3,
46-
ShowInChannel = true,
47-
Text = "Hello",
48-
CustomData = new StreamCustomDataRequest
49-
{
50-
{ "my_lucky_numbers", new List<int> { 7, 13, 81 } }
51-
}
52-
});
39+
var message = await channel.SendNewMessageAsync(new StreamSendMessageRequest
40+
{
41+
MentionedUsers = new List<IStreamUser> { someUser }, // Mention a user
42+
ParentId = message2.Id, // Write in thread
43+
PinExpires = new DateTimeOffset(DateTime.Now).AddDays(7), // Pin for 7 days
44+
Pinned = true,
45+
QuotedMessage = message3,
46+
ShowInChannel = true,
47+
Text = "Hello",
48+
CustomData = new StreamCustomDataRequest
49+
{
50+
{ "my_lucky_numbers", new List<int> { 7, 13, 81 } }
51+
}
52+
});
5353
}
5454

5555
/// <summary>
@@ -65,18 +65,18 @@ public async Task GetMessageById()
6565
/// </summary>
6666
public async Task UpdateAMessage()
6767
{
68-
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
69-
var message = await channel.SendNewMessageAsync("Hello world!");
68+
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
69+
var message = await channel.SendNewMessageAsync("Hello world!");
7070

7171
// Edit message text and some custom data
72-
await message.UpdateAsync(new StreamUpdateMessageRequest
73-
{
74-
Text = "Hi everyone!",
75-
CustomData = new StreamCustomDataRequest
76-
{
77-
{"tags", new [] {"Funny", "Unique"}}
78-
}
79-
});
72+
await message.UpdateAsync(new StreamUpdateMessageRequest
73+
{
74+
Text = "Hi everyone!",
75+
CustomData = new StreamCustomDataRequest
76+
{
77+
{ "tags", new[] { "Funny", "Unique" } }
78+
}
79+
});
8080
}
8181

8282
/// <summary>
@@ -92,14 +92,14 @@ public async Task PartialUpdate()
9292
/// </summary>
9393
public async Task DeleteAMessage()
9494
{
95-
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
96-
var message = await channel.SendNewMessageAsync("Hello world!");
95+
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
96+
var message = await channel.SendNewMessageAsync("Hello world!");
9797

9898
// Soft delete
99-
await message.SoftDeleteAsync();
99+
await message.SoftDeleteAsync();
100100

101101
// Hard delete
102-
await message.HardDeleteAsync();
102+
await message.HardDeleteAsync();
103103
}
104104

105105
/// <summary>
@@ -118,24 +118,23 @@ public async Task UploadFileOrImage()
118118
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
119119

120120
// Get file byte array however you want e.g. Addressables.LoadAsset, Resources.Load, etc.
121-
var sampleFile = File.ReadAllBytes("path/to/file");
122-
var fileUploadResponse = await channel.UploadFileAsync(sampleFile, "my-file-name");
123-
var fileWebUrl = fileUploadResponse.FileUrl;
121+
var sampleFile = File.ReadAllBytes("path/to/file");
122+
var fileUploadResponse = await channel.UploadFileAsync(sampleFile, "my-file-name");
123+
var fileWebUrl = fileUploadResponse.FileUrl;
124124

125125
// Get image byte array however you want e.g. Addressables.LoadAsset, Resources.Load, etc.
126-
var sampleImage = File.ReadAllBytes("path/to/file");
127-
var imageUploadResponse = await channel.UploadImageAsync(sampleFile, "my-image-name");
128-
var imageWebUrl = imageUploadResponse.FileUrl;
129-
126+
var sampleImage = File.ReadAllBytes("path/to/file");
127+
var imageUploadResponse = await channel.UploadImageAsync(sampleFile, "my-image-name");
128+
var imageWebUrl = imageUploadResponse.FileUrl;
130129
}
131130

132131
/// <summary>
133132
/// https://getstream.io/chat/docs/unity/file_uploads/?language=unity#deleting-files-and-images
134133
/// </summary>
135134
public async Task DeleteFileOrImage()
136135
{
137-
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
138-
await channel.DeleteFileOrImageAsync("file-url");
136+
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
137+
await channel.DeleteFileOrImageAsync("file-url");
139138
}
140139

141140
/// <summary>
@@ -146,19 +145,19 @@ public async Task UsingYourOwnCdn()
146145
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
147146

148147
//Implement your own CDN upload and obtain the file URL
149-
var fileUrl = "file-url-to-your-cdn";
148+
var fileUrl = "file-url-to-your-cdn";
150149

151-
await channel.SendNewMessageAsync(new StreamSendMessageRequest
152-
{
153-
Text = "Message with file attachment",
154-
Attachments = new List<StreamAttachmentRequest>
155-
{
156-
new StreamAttachmentRequest
157-
{
158-
AssetUrl = fileUrl,
159-
}
160-
}
161-
});
150+
await channel.SendNewMessageAsync(new StreamSendMessageRequest
151+
{
152+
Text = "Message with file attachment",
153+
Attachments = new List<StreamAttachmentRequest>
154+
{
155+
new StreamAttachmentRequest
156+
{
157+
AssetUrl = fileUrl,
158+
}
159+
}
160+
});
162161

163162
await Task.CompletedTask;
164163
}
@@ -172,16 +171,16 @@ public async Task ReactionOverview()
172171
var message = await channel.SendNewMessageAsync("Hello world!");
173172

174173
// Send simple reaction with a score of 1
175-
await message.SendReactionAsync("like");
174+
await message.SendReactionAsync("like");
176175

177176
// Send reaction with a custom score value
178-
await message.SendReactionAsync("clap", 10);
177+
await message.SendReactionAsync("clap", 10);
179178

180179
// Send reaction with a custom score value
181-
await message.SendReactionAsync("clap", 10);
180+
await message.SendReactionAsync("clap", 10);
182181

183182
// Send reaction and replace all previous reactions (if any) from this user
184-
await message.SendReactionAsync("love", enforceUnique: true);
183+
await message.SendReactionAsync("love", enforceUnique: true);
185184
}
186185

187186
/// <summary>
@@ -192,7 +191,7 @@ public async Task RemoveReaction()
192191
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
193192
var message = await channel.SendNewMessageAsync("Hello world!");
194193

195-
await message.DeleteReactionAsync("like");
194+
await message.DeleteReactionAsync("like");
196195
}
197196

198197
/// <summary>
@@ -214,7 +213,7 @@ public async Task CumulativeReactions()
214213
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, channelId: "my-channel-id");
215214
var message = await channel.SendNewMessageAsync("Hello world!");
216215

217-
await message.SendReactionAsync("clap", score: 3);
216+
await message.SendReactionAsync("clap", score: 3);
218217
}
219218

220219
/// <summary>
@@ -228,14 +227,14 @@ public async Task ThreadsAndReplies()
228227
var message3 = await channel.SendNewMessageAsync("Hello");
229228

230229
// Send simple message with text only
231-
var parentMessage = await channel.SendNewMessageAsync("Let's start a thread!");
230+
var parentMessage = await channel.SendNewMessageAsync("Let's start a thread!");
232231

233-
var messageInThread = await channel.SendNewMessageAsync(new StreamSendMessageRequest
234-
{
235-
ParentId = parentMessage.Id, // Write in thread
236-
ShowInChannel = false, // Optionally send to both thread and the main channel like in Slack
237-
Text = "Hello",
238-
});
232+
var messageInThread = await channel.SendNewMessageAsync(new StreamSendMessageRequest
233+
{
234+
ParentId = parentMessage.Id, // Write in thread
235+
ShowInChannel = false, // Optionally send to both thread and the main channel like in Slack
236+
Text = "Hello",
237+
});
239238
}
240239

241240
/// <summary>
@@ -259,11 +258,11 @@ public async Task QuoteMessage()
259258
// Send simple message with text only
260259
var quotedMessage = await channel.SendNewMessageAsync("Let's start a thread!");
261260

262-
var messageWithQuote = await channel.SendNewMessageAsync(new StreamSendMessageRequest
263-
{
264-
QuotedMessage = quotedMessage,
265-
Text = "Hello",
266-
});
261+
var messageWithQuote = await channel.SendNewMessageAsync(new StreamSendMessageRequest
262+
{
263+
QuotedMessage = quotedMessage,
264+
Text = "Hello",
265+
});
267266
}
268267

269268
/// <summary>
@@ -282,46 +281,45 @@ public async Task SilentMessages()
282281
var channel = await Client.GetOrCreateChannelWithIdAsync(ChannelType.Messaging, "my-channel-id");
283282

284283
// This message will not trigger events for channel members
285-
var silentMessage = await channel.SendNewMessageAsync(new StreamSendMessageRequest
286-
{
287-
Text = "System message",
288-
Silent = true
289-
});
284+
var silentMessage = await channel.SendNewMessageAsync(new StreamSendMessageRequest
285+
{
286+
Text = "System message",
287+
Silent = true
288+
});
290289
}
291290

292291
/// <summary>
293292
/// https://getstream.io/chat/docs/unity/search/?language=unity
294293
/// </summary>
295294
public async Task Search()
296295
{
297-
298296
// Access to low-level client is left for backward compatibility. Soon simplified syntax for searching will be implemented
299-
var searchResponse = await Client.LowLevelClient.MessageApi.SearchMessagesAsync(new SearchRequest
300-
{
301-
//Filter is required for search
302-
FilterConditions = new Dictionary<string, object>
303-
{
304-
{
305-
//Get channels that local user is a member of
306-
"members", new Dictionary<string, object>
297+
var searchResponse = await Client.LowLevelClient.MessageApi.SearchMessagesAsync(new SearchRequest
298+
{
299+
//Filter is required for search
300+
FilterConditions = new Dictionary<string, object>
301+
{
302+
{
303+
//Get channels that local user is a member of
304+
"members", new Dictionary<string, object>
305+
{
306+
{ "$in", new[] { "John" } }
307+
}
308+
}
309+
},
310+
311+
//search phrase
312+
Query = "supercalifragilisticexpialidocious"
313+
});
314+
315+
foreach (var searchResult in searchResponse.Results)
307316
{
308-
{ "$in", new[] { "John" } }
317+
Debug.Log(searchResult.Message.Id); //Message ID
318+
Debug.Log(searchResult.Message.Text); //Message text
319+
Debug.Log(searchResult.Message.User); //Message author info
320+
Debug.Log(searchResult.Message.Channel); //Channel info
309321
}
310322
}
311-
},
312-
313-
//search phrase
314-
Query = "supercalifragilisticexpialidocious"
315-
});
316-
317-
foreach (var searchResult in searchResponse.Results)
318-
{
319-
Debug.Log(searchResult.Message.Id); //Message ID
320-
Debug.Log(searchResult.Message.Text); //Message text
321-
Debug.Log(searchResult.Message.User); //Message author info
322-
Debug.Log(searchResult.Message.Channel); //Channel info
323-
}
324-
}
325323

326324
/// <summary>
327325
/// https://getstream.io/chat/docs/unity/search/?language=unity#pagination
@@ -339,13 +337,13 @@ public async Task PinAndUnpinMessage()
339337
IStreamMessage message = null;
340338

341339
// Pin until unpinned
342-
await message.PinAsync();
340+
await message.PinAsync();
343341

344342
// Pin for 7 days
345-
await message.PinAsync(new DateTime().AddDays(7));
343+
await message.PinAsync(new DateTime().AddDays(7));
346344

347345
// Unpin previously pinned message
348-
await message.UnpinAsync();
346+
await message.UnpinAsync();
349347
}
350348

351349
/// <summary>

0 commit comments

Comments
 (0)