Skip to main content

Overview

Parties (also called lobbies) are groups where players gather before entering a match. The party system allows your bot to create parties, join friends, manage members, and control party settings.

Party Classes

ClientParty

Represents the bot’s current party.

PartyMember

Represents a member in a party.

ClientPartyMember

Represents the bot as a party member (extends PartyMember).

Accessing the Current Party

@client.event
async def event_ready():
    party = client.party
    
    print(f'Party ID: {party.id}')
    print(f'Members: {party.member_count}/{party.max_size}')
    print(f'Leader: {party.leader.display_name}')
    print(f'Privacy: {party.privacy}')

Party Configuration

Configure default party settings when creating the client:
import rebootpy
from functools import partial

client = rebootpy.Client(
    auth=rebootpy.AdvancedAuth(
        prompt_device_code=True
    ),
    default_party_config=rebootpy.DefaultPartyConfig(
        privacy=rebootpy.PartyPrivacy.PUBLIC,
        max_size=16,
        chat_enabled=True,
        team_change_allowed=True,
        meta=[
            partial(rebootpy.ClientParty.set_playlist, 'Playlist_DefaultDuo')
        ]
    )
)

DefaultPartyConfig Parameters

privacy
PartyPrivacy
default:"PUBLIC"
Party privacy setting (PUBLIC, FRIENDS_ALLOW_FRIENDS_OF_FRIENDS, FRIENDS, PRIVATE)
max_size
int
default:"16"
Maximum party size (1-16)
chat_enabled
bool
default:"True"
Whether party chat is enabled
team_change_allowed
bool
default:"True"
Whether members can manually swap teams
meta
List[partial]
List of party meta configurations to apply on party creation

Party Member Configuration

Configure default member settings:
from functools import partial

client = rebootpy.Client(
    auth=...,
    default_party_member_config=rebootpy.DefaultPartyMemberConfig(
        yield_leadership=False,
        offline_ttl=30,
        meta=[
            partial(
                rebootpy.ClientPartyMember.set_outfit,
                'CID_028_Athena_Commando_F'
            ),
            partial(
                rebootpy.ClientPartyMember.set_banner,
                icon='StandardBanner15',
                color='DefaultColor15',
                season_level=100
            )
        ]
    )
)

Managing Party Privacy

import rebootpy

# Set to public
await client.party.set_privacy(rebootpy.PartyPrivacy.PUBLIC)

# Set to friends only
await client.party.set_privacy(rebootpy.PartyPrivacy.FRIENDS)

# Set to private
await client.party.set_privacy(rebootpy.PartyPrivacy.PRIVATE)

# Check current privacy
if client.party.privacy == rebootpy.PartyPrivacy.PRIVATE:
    print('Party is private')

Party Members

Get All Members

party = client.party

for member in party.members:
    print(f'{member.display_name} - {member.outfit}')

print(f'Total members: {party.member_count}')

Get Specific Member

# Get member by ID
member = client.party.get_member('user-id')

if member:
    print(f'Found: {member.display_name}')
else:
    print('Member not found')

Get Leader

leader = client.party.leader
print(f'Leader: {leader.display_name}')

# Check if bot is leader
if client.party.me.leader:
    print('Bot is party leader')

Inviting Members

import rebootpy
from rebootpy.errors import PartyError

# Invite a friend
friend = client.get_friend('user-id')

try:
    invitation = await client.party.invite(friend.id)
    print(f'Invited {friend.display_name}')
except PartyError as e:
    print(f'Failed to invite: {e}')

Joining Parties

Join by Party ID

try:
    party = await client.join_party('party-id-here')
    print(f'Joined party {party.id}')
except rebootpy.PartyError:
    print('Could not join party')
except rebootpy.Forbidden:
    print('Party is private')

Join Friend’s Party

@client.event
async def event_friend_presence(before, after):
    friend = after.friend
    
    # Join when friend comes online
    if after.available and after.party and not after.party.private:
        await friend.join_party()
        print(f'Joined {friend.display_name}\'s party')

Accept Party Invitation

@client.event
async def event_party_invitation(invitation):
    print(f'Invited by {invitation.sender.display_name}')
    
    # Accept the invitation
    await invitation.accept()

Leaving Parties

# Leave current party (creates a new one)
await client.party.leave()
print('Left party')

Kicking Members

# Kick a member (must be leader)
member = client.party.get_member('user-id')

if member:
    await member.kick()
    print(f'Kicked {member.display_name}')

Promoting Members

# Promote a member to leader
member = client.party.get_member('user-id')

if member and client.party.me.leader:
    await member.promote()
    print(f'Promoted {member.display_name} to leader')

Party Messages

# Send a party message
await client.party.send('Hello everyone!')

@client.event
async def event_party_message(message):
    print(f'{message.author.display_name}: {message.content}')
    
    if message.author.id != client.user.id:
        await message.reply('Thanks for your message!')
See Messages for more details.

Party Meta (Settings)

Set Playlist

# Set party playlist
await client.party.set_playlist(
    playlist='Playlist_DefaultDuo',
    tournament='',
    event_window='',
    region=rebootpy.Region.EUROPE
)

Set Custom Matchmaking Key

await client.party.set_custom_key('MyCustomKey123')

Set Party Size

# Change max party size
await client.party.set_max_size(4)

Member Cosmetics

Set Outfit (Skin)

member = client.party.me

# Set outfit by asset path
await member.set_outfit(
    asset='CID_028_Athena_Commando_F'  # Renegade Raider
)

# Set outfit with variants
await member.set_outfit(
    asset='CID_030_Athena_Commando_M_Halloween',
    variants=[
        {
            'channel': 'Material',
            'variant': 'Mat1'
        }
    ]
)

Set Backpack

await client.party.me.set_backpack(
    asset='BID_001_BlueSquire'  # Blue Squire Shield
)

Set Pickaxe

await client.party.me.set_pickaxe(
    asset='Pickaxe_Lockjaw'  # Bitemark Pickaxe
)

Set Emote

# Play an emote
await client.party.me.set_emote(
    asset='EID_Floss'  # Floss emote
)

# Clear emote
await client.party.me.clear_emote()

Set Banner

await client.party.me.set_banner(
    icon='StandardBanner15',
    color='DefaultColor15',
    season_level=100
)

Set Battle Pass Info

await client.party.me.set_battlepass_info(
    has_purchased=True,
    level=100
)

Member Ready State

# Set ready
await client.party.me.set_ready(rebootpy.ReadyState.READY)

# Set sitting out
await client.party.me.set_ready(rebootpy.ReadyState.SITTING_OUT)

# Set not ready
await client.party.me.set_ready(rebootpy.ReadyState.NOT_READY)

Batch Cosmetic Updates

For better performance, use edit() to update multiple cosmetics at once:
from functools import partial

await client.party.me.edit(
    partial(client.party.me.set_outfit, 'CID_028_Athena_Commando_F'),
    partial(client.party.me.set_backpack, 'BID_001_BlueSquire'),
    partial(client.party.me.set_pickaxe, 'Pickaxe_Lockjaw'),
    partial(client.party.me.set_banner, icon='StandardBanner15', season_level=100)
)

Party Events

Member Joined

@client.event
async def event_party_member_join(member):
    print(f'{member.display_name} joined the party')
    
    # Welcome message
    await client.party.send(f'Welcome {member.display_name}!')
    
    # Check if it's the bot
    if member.id == client.user.id:
        print('Bot joined a new party')

Member Left

@client.event
async def event_party_member_leave(member):
    print(f'{member.display_name} left the party')

Member Updated

@client.event
async def event_party_member_update(member):
    print(f'{member.display_name} updated their cosmetics')
    print(f'Outfit: {member.outfit}')
    print(f'Backpack: {member.backpack}')
    print(f'Emote: {member.emote}')

Leadership Changed

@client.event
async def event_party_member_promote(old_leader, new_leader):
    print(f'{new_leader.display_name} is now the party leader')
    
    # When bot becomes leader
    if new_leader.id == client.user.id:
        await client.party.set_privacy(rebootpy.PartyPrivacy.PUBLIC)
        await client.party.send('I\'m the leader now!')

Member Kicked

@client.event
async def event_party_member_kick(member):
    print(f'{member.display_name} was kicked from the party')

Party Invitation

@client.event
async def event_party_invitation(invitation):
    print(f'Invited to party by {invitation.sender.display_name}')
    
    # Auto-accept if sender is a friend
    if client.get_friend(invitation.sender.id):
        await invitation.accept()

Advanced Examples

Copy Friend’s Loadout

@client.event
async def event_party_member_join(member):
    if member.id == client.user.id:
        return
    
    # Wait a moment for member's cosmetics to load
    await asyncio.sleep(1)
    
    # Copy their cosmetics
    await client.party.me.edit(
        partial(client.party.me.set_outfit, member.outfit),
        partial(client.party.me.set_backpack, member.backpack),
        partial(client.party.me.set_pickaxe, member.pickaxe)
    )
    
    await client.party.send(f'Copied {member.display_name}\'s loadout!')

Auto-promote System

@client.event
async def event_party_member_join(member):
    # If bot is leader and a friend joins, promote them
    if client.party.me.leader and client.get_friend(member.id):
        await member.promote()
        print(f'Promoted {member.display_name} to leader')

Mirror Emotes

@client.event
async def event_party_member_update(member):
    # Don't mirror ourselves
    if member.id == client.user.id:
        return
    
    # Mirror their emote
    if member.emote != 'None':
        await client.party.me.set_emote(member.emote)

Party Size Manager

@client.event
async def event_party_member_join(member):
    party = client.party
    
    # Kick if party is full
    if party.member_count > party.max_size and party.me.leader:
        await member.kick()
        await party.send('Party is full!')

Best Practices

Check leadership

Always verify client.party.me.leader before performing leader actions

Use edit() for multiple updates

Batch cosmetic updates with edit() to reduce API calls

Handle party changes

Bot creates a new party when kicked or when leaving

Validate cosmetic assets

Invalid cosmetic IDs will cause errors - verify IDs before using

Common Party Privacies

# Public - Anyone can join
rebootpy.PartyPrivacy.PUBLIC

# Friends only
rebootpy.PartyPrivacy.FRIENDS

# Friends and friends of friends
rebootpy.PartyPrivacy.FRIENDS_ALLOW_FRIENDS_OF_FRIENDS

# Private - Invite only
rebootpy.PartyPrivacy.PRIVATE

Next Steps

Messages

Send party and friend messages

Events

Handle party-related events

Friends

Manage friends to invite to parties

Presence

Track party information from presence