Additional Message Filtering
The MessagesRequest
class as you must be familiar with helps you to fetch messages based on the various parameters provided to it. This document will help you understand better the various options that are available using the MessagesRequest
class.
The MessagesRequest
class is designed using the Builder design pattern
. In order to obtain an object of the MessagesRequest
class, you will have to make use of the MessagesRequestBuilder
class in the MessagesRequest
class.
The MessagesRequestBuilder
class allows you to set various parameters to the MessagesRequest
class based on which the messages are fetched.
Steps to generate an object of the MessagesRequest class:
- Create an object of the
MessagesRequestBuilder
class. - Set all the parameters you wish to set.
- Call the
build()
method of theMessagesRequestBuilder
class to get an object of theMessagesRequest
class.
Once you have an object of the MessagesRequest
class, you can call either the fetchNext()
method or the fetchPrevious()
method using the object.
- fetchNext() - Calling this method will return the messages after the specified parameters.
- fetchPrevious() - Calling this method will give you messages before the specified parameters.
Since messages are obtained in a paginated manner, a maximum of 100 messages can be pulled in a single iteration. Calling the fetchPrevious()
/fetchNext()
method on the same MessagesRequest
object will get you the next set of messages.
Now that you are clear how to use the MessagesRequest
class, below are the various options available:
Number of messages fetched
In other words, how do I set the number of messages fetched in a single iteration
To achieve this, you can use the setLimit()
method. This method takes an integer value as the input and informs the SDK to fetch the specified number of messages in one iteration. The maximum number of messages that can be fetched in one go is 100.
- Javascript
- Typescript
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setLimit(50)
.build();
let messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setLimit(50)
.build();
Messages for a user conversation
In other words, how do I fetch messages between me and any user
This can be achieved using the setUID()
method. This method takes the UID of the user with whom the conversation is to be fetched. When a valid UID is passed, the SDK will return all the messages that are a part of the conversation between the logged-in user and the UID that has been specified.
- User Conversation
- Typescript
let UID = "UID";
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(50)
.build();
let UID = "UID";
let messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(50)
.build();
Messages for a group conversation
In other words, how do I fetch messages for any group conversation
You can achieve this using the setGUID()
method. This method takes the GUID of a group for which the conversations are to be fetched. Passing a valid GUID to this method will return all the messages that are a part of the group conversation. Please note that the logged-in user must be a member of the group to fetch the messages for that group.
- Group Conversation
- Typescript
let GUID = "GUID";
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(50)
.build();
let GUID: string = "GUID";
let messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(50)
.build();
If none of the above two methods setUID()
and setGUID()
is used, all the messages for the logged-in user will be fetched. This means that messages from all the one-on-one and group conversations which the logged-in user is a part of will be returned.> All the parameters discussed below can be used along with the setUID() or setGUID() or without any of the two to fetch all the messages that the logged-in user is a part of.
Messages before/after a message
In other words, how do I fetch messages before or after a particular message
This can be achieved using the setMessageId()
method. This method takes the message-id as input and provides messages only after/before the message-id based on if the fetchNext() or fetchPrevious() method is triggered.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let messageId = 1;
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setMessageId(messageId)
.setLimit(limit)
.build();
let GUID = "GUID";
let messageId = 1;
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setMessageId(messageId)
.setLimit(limit)
.build();
let UID: string = "UID",
messageId: number = 1,
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setMessageId(messageId)
.setLimit(limit)
.build();
let GUID: string = "GUID",
messageId: number = 1,
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setMessageId(messageId)
.setLimit(limit)
.build();
This method can be used along with setUID()
or setGUID()
methods to fetch messages after/before any specific message-id for a particular user/group conversation.
Messages before/after a given time
In other words, how do I fetch messages before or after a particular date or time
You can easily achieve this using the setTimestamp()
method. This method takes the Unix timestamp as input and provides messages only after/before the timestamp based on if fetchNext() or fetchPrevious() method is triggered.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let timestamp = 1602221371;
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setTimestamp(timestamp)
.setLimit(limit)
.build();
let GUID = "GUID";
let timestamp = 1602221371;
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setTimestamp(timestamp)
.setLimit(limit)
.build();
let UID: string = "UID",
timestamp: number = 1602221371,
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setTimestamp(timestamp)
.setLimit(limit)
.build();
let GUID: string = "GUID",
timestamp: number = 1602221371,
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setTimestamp(timestamp)
.setLimit(limit)
.build();
This method can be used along with setUID()
or setGUID()
methods to fetch messages after/before any specific date or time for a particular user/group conversation.
Unread messages
In other words, how do I fetch unread messages
This can easily be achieved using setting the unread flag to true. For this, you need to use the setUnread()
method. This method takes a boolean value as input. If the value is set to true, the SDK will return just the unread messages.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setUnread(true)
.setLimit(limit)
.build();
let GUID = "GUID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setUnread(true)
.setLimit(limit)
.build();
let UID: string = "UID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setUnread(true)
.setLimit(limit)
.build();
let GUID: string = "GUID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setUnread(true)
.setLimit(limit)
.build();
This method along with setGUID()
or setUID()
can be used to fetch unread messages for a particular group or user conversation respectively.
Exclude messages from blocked users
In other words, how do I fetch messages excluding the messages from the users I have blocked
This can be easily achieved using the hideMessagesFromBlockedUsers()
method. This method accepts a boolean value which determines if the messages from users blocked by the logged-in user need to be a part if the fetched messages. If the value is set to true, the messages will be hidden and won't be a part of the messages fetched. The default value is false i.e if this method is not used, the messages from blocked users will be included in the fetched messages.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.hideMessagesFromBlockedUsers(true)
.setLimit(limit)
.build();
let GUID = "GUID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.hideMessagesFromBlockedUsers(true)
.setLimit(limit)
.build();
let UID: string = "UID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.hideMessagesFromBlockedUsers(true)
.setLimit(limit)
.build();
let GUID: string = "GUID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.hideMessagesFromBlockedUsers(true)
.setLimit(limit)
.build();
This method can be used to hide the messages by users blocked by logged in user in groups that both the members are a part of.
Updated and received messages
In other words, how do I fetch messages that have been received or updated after a particular date or time
This method accepts a Unix timestamp value and will return all the messages that have been updated and the ones that have been sent/received after the specified time. The messages updated could mean the messages that have been marked as read/delivered or if the messages are edited or deleted.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let timestamp = 1602221371;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setUpdatedAfter(timestamp)
.setLimit(limit)
.build();
let GUID = "GUID";
let limit = 30;
let timestamp = 1602221371;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setUpdatedAfter(timestamp)
.setLimit(limit)
.build();
let UID: string = "UID",
limit: number = 30,
timestamp: string = "1602221371",
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setUpdatedAfter(timestamp)
.setLimit(limit)
.build();
let GUID: string = "GUID",
limit: number = 30,
timestamp: string = "1602221371",
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setUpdatedAfter(timestamp)
.setLimit(limit)
.build();
This can be useful in finding the messages that have been received or updated after a certain time. Can prove very useful if you are saving the messages locally and would like to know the messages that have been updated or received after the last message available in your local databases.
Updated messages only
In other words, how do I fetch messages that have been updated after a particular date or time
This can be achieved easily by setting the updatesOnly parameter to true. To do so, you can use the updatesOnly() method. This method takes a boolean input and can be used with the setUpdatedAfter()
method to get jus the updated messages and not the messages sent/received after the specified time. This method cannot be used independently and always needs to be used with the setUpdatedAfter()
method.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let timestamp = 1602221371;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setUpdatedAfter(timestamp)
.updatesOnly(true)
.setLimit(limit)
.build();
let GUID = "GUID";
let limit = 30;
let timestamp = 1602221371;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setUpdatedAfter(timestamp)
.updatesOnly(true)
.setLimit(limit)
.build();
let UID: string = "UID",
limit: number = 30,
timestamp: string = "1602221371",
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setUpdatedAfter(timestamp)
.updatesOnly(true)
.setLimit(limit)
.build();
let GUID: string = "GUID",
limit: number = 30,
timestamp: string = "1602221371",
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setUpdatedAfter(timestamp)
.updatesOnly(true)
.setLimit(limit)
.build();
Messages for multiple categories
In other words, how do I fetch messages belonging to multiple categories
We recommend before trying this, you refer to the Message structure and hierarchy guide to get familiar with the various categories of messages.
For this, you will have to use the setCategories()
method. This method accepts a list of categories. This tells the SDK to fetch messages only belonging to these categories.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let categories = ["message", "custom"];
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setCategories(categories)
.setLimit(limit)
.build();
let GUID = "GUID";
let limit = 30;
let categories = ["message", "custom"];
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setCategories(categories)
.setLimit(limit)
.build();
let UID: string = "UID",
limit: number = 30,
categories: Array<String> = ["message", "custom"],
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setCategories(categories)
.setLimit(limit)
.build();
let GUID: string = "GUID",
limit: number = 30,
categories: Array<String> = ["message", "custom"],
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setCategories(categories)
.setLimit(limit)
.build();
The above snippet will help you get only the messages belonging to the message
and custom
category. This can also be used to disable certain categories of messages like call
and action
.
Messages for multiple types
In other words, how do I fetch messages belonging to multiple types
We recommend before trying this, you refer to the Message structure and hierarchy guide to get familiar with the various types of messages.
This can be easily achieved using the setTypes()
method. This method accepts a list of types. This tells the SDK to fetch messages only belonging to these types.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let categories = ["message"];
let types = ["image", "video", "audio", "file"];
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setCategories(categories)
.setTypes(types)
.setLimit(limit)
.build();
let GUID = "GUID";
let limit = 30;
let categories = ["message"];
let types = ["image", "video", "audio", "file"];
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setCategories(categories)
.setTypes(types)
.setLimit(limit)
.build();
let UID: string = "UID",
limit: number = 30,
categories: Array<String> = ["message", "custom"],
types: Array<String> = ["image", "video", "audio", "file"],
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setCategories(categories)
.setTypes(types)
.setLimit(limit)
.build();
let GUID: string = "GUID",
limit: number = 30,
categories: Array<String> = ["message", "custom"],
types: Array<String> = ["image", "video", "audio", "file"],
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setCategories(categories)
.setTypes(types)
.setLimit(limit)
.build();
Using the above code snippet, you can fetch all the media messages.
Messages for a specific thread
In other words, how do I fetch messages that are a part of a thread and not directly a user/group conversations
This can be done using the setParentMessageId()
method. This method needs to be used when you have implemented threaded conversations in your app. This method will return the messages only belonging to the thread with the specified parent Id.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let messageId = 1;
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.setParentMessageId(messageId)
.build();
let GUID = "GUID";
let messageId = 1;
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.setParentMessageId(messageId)
.build();
let UID: string = "UID",
limit: number = 30,
messageId: number = 1,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.setParentMessageId(messageId)
.build();
let GUID: string = "GUID",
limit: number = 30,
messageId: number = 1,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.setParentMessageId(messageId)
.build();
The above code snippet returns the messages that belong to the thread with parent id 100.
Hide threaded messages in user/group conversations
In other words, how do I exclude threaded messages from the normal user/group conversations
In order to do this, you can use the hideReplies()
method. This method is also related to threaded conversations. This method takes boolean as input. This boolean when set to true will make sure that the messages that belong to threads are not fetched. If set to false, which is also the default value, the messages belong to the threads will also be fetched along with other messages.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.hideReplies(true)
.build();
let GUID = "GUID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.hideReplies(true)
.build();
let UID: string = "UID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.hideReplies(true)
.build();
let GUID: string = "GUID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.hideReplies(true)
.build();
Hide deleted messages in user/group conversations
In other words, how do I exclude deleted messages a user/group conversations
In order to do this, you can use the hideDeletedMessages()
method. This method takes boolean as input. This boolean when set to true will make sure that the deleted messages are not fetched. If set to false, which is also the default value, the deleted messages will also be fetched along with other messages.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.hideDeletedMessages(true)
.build();
let GUID = "GUID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.hideDeletedMessages(true)
.build();
let UID: string = "UID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.hideDeletedMessages(true)
.build();
let GUID: string = "GUID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.hideDeletedMessages(true)
.build();
Messages by tags
In other words, how do I fetch messages by tags
In order to do this, you can use the setTags()
method. This method accepts a list of tags. This tells the SDK to fetch messages only belonging to these tags.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let tags = ["starredMessage"];
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.setTags(tags)
.build();
let GUID = "GUID";
let limit = 30;
let tags = ["starredMessage"];
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.setTags(tags)
.build();
let UID: string = "UID",
limit: number = 30,
tags: Array<String> = ["starredMessage"],
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.setTags(tags)
.build();
let GUID: string = "GUID",
limit: number = 30,
tags: Array<String> = ["starredMessage"],
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.setTags(tags)
.build();
Messages with tags
In other words, how do I fetch messages with the tags information
In order to do this, you can use the withTags()
method. This method accepts boolean as input. When set to true
, the SDK will fetch messages along with the tags. When set to false
, the SDK will not fetch tags associated with messages. The default value for this parameter is false
.
- User
- Group
- TypeScript(User)
- TypeScript(Group)
let UID = "UID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setUID(UID)
.setLimit(limit)
.withTags(true)
.build();
let GUID = "GUID";
let limit = 30;
let messagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.withTags(tags)
.build();
let UID: string = "UID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(UID)
.setLimit(limit)
.withTags(true)
.build();
let GUID: string = "GUID",
limit: number = 30,
messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder()
.setGUID(GUID)
.setLimit(limit)
.withTags(true)
.build();