// add a new block list for this app
await client.createBlockList({
name: "no-cakes",
words: ["fudge", "cream", "sugar"],
});
// use the block list for all channels of type messaging
await client.updateChannelType("messaging", {
blocklist: "no-cakes",
blocklist_behavior: "block",
});
Block Lists
A Block List is a list of words that you can use to moderate chat messages. Stream Chat comes with a built-in Block List called profanity_en_2020_v1
which contains over a thousand of the most common profane words.
You can manage your own block lists via the Stream dashboard or APIs to a manage blocklists and configure your channel types to use them. Channel types can be configured to block or flag messages from your users based on your blocklists. To do this you need to configure your channel type(s) with these two configurations: blocklist
and blocklist_behavior
. The first one refers to the name of the block list and the second must be set as block
or flag
.
Applications can have up to 15 block lists in total alongside advanced filters
A Block List can contain up to 10,000 words, each word can be up to 40 characters
The block list words must be in lowercase
Text matching is done with case insensitive word match (no prefix, post-fix support)
Messages are split into words using white spaces and hyphens (cookie-monster matches both “cookie” and “monster”)
So for instance, if you have a block list with the word “cream” these messages will be blocked or flagged:
She jabbed the spoon in the ice cream and sighed
Cream is the best
and it will not affect any of these
Is creamcheese a word?
I did not enjoy watching Scream
The default block list contains material that many will find offensive.
Setup example
Block Lists can be managed using the APIs like any other Chat feature. Here is a simple example on how to create a Block List and use it for a channel type.
// add a new block list for this app
$client->createBlocklist(["no-cakes" => $name, "words" => ["fudge", "cream", "sugar"]]);
# add a new block list for this app
client.create_blocklist(name="no-cakes", words=["fudge", "cream", "sugar"])
# use the block list for all channels of type messaging
client.update_channel_type("messaging", blocklist="no-cakes", blocklist_behavior="block")
# add a new block list for this app
client.create_blocklist("no-cakes", words: ["fudge", "cream", "sugar"])
# use the block list for all channels of type messaging
client.update_channel_type("messaging", blocklist: "no-cakes", blocklist_behavior: "block")
// add a new block list for this app
Blocklist.create()
.name("no-cakes")
.words(List.of("fudge", "cream", "sugar"))
.request();
// use the block list for all channels of type messaging
ChannelType.update("messaging")
.blocklist("no-cakes")
.blocklistBehavior(ChannelType.BlocklistBehavior.BLOCK)
.request();
// add a new block list for this app
blocklistReq := &BlocklistCreateRequest{BlocklistBase{Name: "no-cakes", Words: []string{"fudge", "cream", "sugar"}}}
client.CreateBlocklist(ctx, blocklistReq)
// use the block list for all channels of type messaging
client.UpdateChannelType(ctx, "messaging", map[string]interface{}{
"blocklist": "no-cakes",
"blocklist_behavior": "block",
})
// add a new block list for this app
await blocklistClient.CreateAsync(new BlocklistCreateRequest
{
Name = "no-cakes",
Words = new[] { "fudge", "cream", "sugar" },
});
// use the block list for all channels of type messaging
List available block lists
All applications have the profanity_en_2020_v1
block list available. This endpoint returns all block lists available for this application.
await client.listBlockLists();
$client->listBlocklists();
client.list_blocklists()
client.list_blocklists()
Blocklist.list().request();
client.ListBlocklists(ctx)
await blocklistClient.ListAsync();
Describe a block list
await client.getBlockList("no-cakes");
$client->getBlocklist("no-cakes");
client.get_blocklist("no-cakes")
client.get_blocklist("no-cakes")
Blocklist.get("no-cakes").request();
c.GetBlocklist(ctx, "no-cakes")
await blocklistClient.GetAsync("no-cakes");
Create new block list
const words = ["fudge", "cream", "sugar"];
await client.createBlockList({
name: "no-cakes",
words,
});
$client->createBlocklist(["no-cakes" => $name, "words" => ["fudge", "cream", "sugar"]]);
client.create_blocklist(name="no-cakes", words=["fudge", "cream", "sugar"])
client.create_blocklist("no-cakes", words: ["fudge", "cream", "sugar"])
Blocklist.create()
.name("no-cakes")
.words(List.of("fudge", "cream", "sugar"))
.request();
blocklistReq := &BlocklistCreateRequest{BlocklistBase{Name: "no-cakes", Words: []string{"fudge", "cream", "sugar"}}}
client.CreateBlocklist(ctx, blocklistReq)
await blocklistClient.CreateAsync(new BlocklistCreateRequest
{
Name = "no-cakes",
Words = new[] { "fudge", "cream", "sugar" },
});
Update a new block list
await client.updateBlockList("no-cakes", {
words: ["fudge", "cream", "sugar", "vanilla"],
});
$client->updateBlocklist("no-cakes", ["words" => ["fudge", "cream", "sugar", "vanilla"]]);
client.update_blocklist("no-cakes", words=["fudge", "cream", "sugar", "vanilla"])
client.update_blocklist("no-cakes", words: ["fudge", "cream", "sugar", "vanilla"])
Blocklist.update("no-cakes")
.words(List.of("fudge", "cream", "sugar", "vanilla"]))
.request();
client.UpdateBlocklist(ctx, "no-cakes", []string{"fudge", "cream", "sugar", "vanilla"})
await blocklistClient.UpdateAsync("no-cakes", new[] { "fudge", "cream", "sugar", "vanilla" });
Delete a block list
When a block list is deleted, it will be automatically removed from all channel types that were using it.
await client.deleteBlockList("no-cakes");
$client->deleteBlocklist("no-cakes");
client.delete_blocklist("no-cakes")
client.delete_blocklist("no-cakes")
Blocklist.delete("no-cakes").request();
client.DeleteBlocklist(ctx, "no-cakes")
await _blocklistClient.DeleteAsync("no-cakes");