This guide shows how to migrate moderation code from stream-chat to getstream.
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
channel.add_moderators(["user-1", "user-2"])After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
channel = client.chat.channel("messaging", "general")
response = channel.update(add_moderators=["user-1", "user-2"])Key changes:
- No dedicated
add_moderators()method; usechannel.update(add_moderators=[...])instead - Channel accessed via
client.chat.channel()
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
channel.demote_moderators(["user-1"])After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
channel = client.chat.channel("messaging", "general")
response = channel.update(demote_moderators=["user-1"])Key changes:
- No dedicated
demote_moderators()method; usechannel.update(demote_moderators=[...])instead
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
client.ban_user(target_id="bad-user", user_id="admin", reason="Spam", timeout=3600)After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.moderation.ban(
target_user_id="bad-user",
banned_by_id="admin",
reason="Spam",
timeout=3600,
)Key changes:
- Moderation methods moved to
client.moderationsub-client target_idrenamed totarget_user_iduser_idrenamed tobanned_by_id
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
channel.ban_user(target_id="bad-user", user_id="admin", reason="Offensive")After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.moderation.ban(
target_user_id="bad-user",
banned_by_id="admin",
reason="Offensive",
channel_cid="messaging:general",
)Key changes:
- Channel-level bans use
channel_cid(format:type:id) on the moderation sub-client - No separate channel-level ban method; same
ban()with achannel_cidparameter
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
client.unban_user(target_id="bad-user")After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.moderation.unban(
target_user_id="bad-user",
unbanned_by_id="admin", # optional
)Key changes:
- Called on
client.moderationsub-client target_idrenamed totarget_user_idunbanned_by_idis optional, available when you want to record who performed the unban
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
client.shadow_ban(target_id="user-1", user_id="admin")After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.moderation.ban(
target_user_id="user-1",
banned_by_id="admin",
shadow=True,
)Key changes:
- No dedicated
shadow_ban()method; useban()withshadow=True - Remove shadow ban by calling
unban()(same as a regular unban)
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
client.mute_user(target_id="user-1", user_id="admin")After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.moderation.mute(
target_ids=["user-1"],
user_id="admin",
)Key changes:
- Called on
client.moderationsub-client target_idbecomestarget_ids(always a list, enabling batch mute)
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
client.unmute_user(target_id="user-1", user_id="admin")After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.moderation.unmute(
target_ids=["user-1"],
user_id="admin",
)Key changes:
- Called on
client.moderationsub-client target_idbecomestarget_ids(always a list)
| Use Case | stream-chat | getstream |
|---|---|---|
| Add moderators | channel.add_moderators([...]) |
channel.update(add_moderators=[...]) |
| Demote moderators | channel.demote_moderators([...]) |
channel.update(demote_moderators=[...]) |
| Ban (app-level) | client.ban_user(target_id, user_id) |
client.moderation.ban(target_user_id, banned_by_id) |
| Ban (channel) | channel.ban_user(target_id, user_id) |
client.moderation.ban(..., channel_cid="type:id") |
| Unban | client.unban_user(target_id) |
client.moderation.unban(target_user_id) |
| Shadow ban | client.shadow_ban(target_id, user_id) |
client.moderation.ban(..., shadow=True) |
| Mute | client.mute_user(target_id, user_id) |
client.moderation.mute(target_ids=[...], user_id) |
| Unmute | client.unmute_user(target_id, user_id) |
client.moderation.unmute(target_ids=[...], user_id) |