Skip to content

Channels

Working with channels in the Mezon SDK.

Fetching Channels

From Client

# Fetch a channel by ID
channel = await client.channels.fetch("channel_id")

print(f"Channel: {channel.name}")
print(f"Type: {channel.channel_type}")

From Clan

# Get a clan
clan = await client.clans.get("clan_id")

# Load all channels in the clan
await clan.load_channels()

# Get a specific channel
channel = await clan.channels.get("channel_id")

Channel Properties

channel.id           # Channel ID
channel.name         # Channel name
channel.channel_type # Type of channel
channel.is_private   # Whether the channel is private
channel.messages     # Message cache manager

Sending Messages

See the Messaging Guide for details.

from mezon.models import ChannelMessageContent

# Send a message
await channel.send(content=ChannelMessageContent(t="Hello!"))

# Send ephemeral message
await channel.send_ephemeral(
    receiver_id="user_id",
    content=ChannelMessageContent(text="Private message")
)

Accessing Messages

# Get a message by ID
message = channel.messages.get("message_id")

# Reply to it
await message.reply(content=ChannelMessageContent(t="Reply!"))

# Update it
await message.update(content=ChannelMessageContent(t="Updated!"))

Channel Types

The SDK supports various channel types:

from mezon.constants import ChannelType

ChannelType.TEXT           # Text channel
ChannelType.VOICE          # Voice channel
ChannelType.DM             # Direct message
ChannelType.GROUP_DM       # Group direct message
ChannelType.CATEGORY       # Category (container for channels)
ChannelType.ANNOUNCEMENT   # Announcement channel
ChannelType.FORUM          # Forum channel

DM Channels

Send DM to User

# Get user
user = await client.users.get("user_id")

# Send DM
await user.send_dm_message(
    content=ChannelMessageContent(t="Hello via DM!")
)

Using Channel Manager

# Get DM channel
dm_channel = await client.channel_manager.get_dm_channel("user_id")

# Send message
await dm_channel.send(content=ChannelMessageContent(t="Hello!"))

Channel Events

Listen for channel-related events:

from mezon.protobuf.rtapi import realtime_pb2

async def on_channel_created(event: realtime_pb2.ChannelCreatedEvent):
    print(f"New channel: {event.channel_id}")
    # Fetch the new channel
    channel = await client.channels.fetch(event.channel_id)

async def on_channel_updated(event: realtime_pb2.ChannelUpdatedEvent):
    print(f"Channel updated: {event.channel_id}")

async def on_channel_deleted(event: realtime_pb2.ChannelDeletedEvent):
    print(f"Channel deleted: {event.channel_id}")

client.on_channel_created(on_channel_created)
client.on_channel_updated(on_channel_updated)
client.on_channel_deleted(on_channel_deleted)

User Presence in Channels

async def on_user_joined(event: realtime_pb2.UserChannelAdded):
    print(f"User {event.user_id} joined {event.channel_id}")

async def on_user_left(event: realtime_pb2.UserChannelRemoved):
    print(f"User {event.user_id} left {event.channel_id}")

client.on_user_channel_added(on_user_joined)
client.on_user_channel_removed(on_user_left)