soulfire.client.SoulFireInstance¶
- class soulfire.client.SoulFireInstance(instance_id: str, bot_service: soulfire.bot_connect.BotServiceClient, bot_live: soulfire.bot_live_connect.BotLiveServiceClient, instance_service: soulfire.instance_connect.InstanceServiceClient, mc_auth_service: soulfire.mc_auth_connect.MCAuthServiceClient | None = None, bot_tasks: soulfire.task_connect.BotTaskServiceClient | None = None, pathfinder_service: soulfire.pathfinding_connect.PathfinderServiceClient | None = None, chat_service: soulfire.chat_connect.ChatServiceClient | None = None, inventory_service: soulfire.inventory_connect.InventoryServiceClient | None = None, recipe_service: soulfire.recipe_connect.RecipeServiceClient | None = None, registry_service: soulfire.registry_connect.RegistryServiceClient | None = None, world_service: soulfire.world_connect.WorldServiceClient | None = None, protocol_service: soulfire.protocol_connect.BotProtocolServiceClient | None = None, capabilities: soulfire.connection.CapabilitySet | None = None, instance_live: soulfire.instance_live_connect.InstanceLiveServiceClient | None = None)[source]¶
An instance handle that groups bot accounts and configuration.
Obtain a handle from
SoulFire.instance()orSoulFire.get_or_create_instance(). Useget_or_create_bot()for normal provisioning andbot()for an existing bot UUID. The instance itself persists after the client scope closes.- id¶
- property fleet: soulfire.fleet.SoulFireFleet¶
- get_or_create_bot(name: str, *, auth: Literal['offline', 'microsoft'] = 'offline', username: str | None = None, start: bool = True, ready_timeout: float = 30.0, on_device_code: collections.abc.Callable[[soulfire.mc_auth_pb2.DeviceCode], effect_py.Effect[None, soulfire.errors.SoulFireOperationError]] | None = None, timeout_ms: int | None = None) effect_py.Effect[soulfire.bot.SoulFireBot, soulfire.errors.SoulFireOperationError, effect_py.Scope][source]¶
Provision a named account and return a bot, ready by default.
Bot names belong to this instance. Repeated calls reuse the named account; conflicting usernames or authentication methods fail explicitly. With
start=True, this operation callsSoulFireBot.connect(). Scope cleanup stops a bot started by the SDK and preserves a bot that was already running. The account remains in the instance.- Parameters:
name – Stable bot name within this instance.
auth –
"offline"or"microsoft". Defaults to"offline".username – Minecraft username for provisioning an offline account.
start – Start and observe the bot when true. With false, returns an unconnected handle for configuration before
SoulFireBot.connect().ready_timeout – Positive, finite readiness deadline in seconds. Defaults to 30 and applies when
startis true.on_device_code – Effect callback for Microsoft device-code login. Without a callback, the SDK prints the sign-in URL and code.
timeout_ms – RPC timeout in milliseconds.
- Returns:
An Effect that produces a bot handle. Requires
Scope.
- bot(bot_id: str) soulfire.bot.SoulFireBot[source]¶
Create a bot handle without a network request or readiness wait.
- Parameters:
bot_id – Existing bot UUID, not its username or provisioning name.
- Returns:
A bot handle with no attached observation session. Use
SoulFireBot.connect()for scoped readiness and live state.
- info(*, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[soulfire.instance_pb2.InstanceInfo, soulfire.errors.SoulFireOperationError][source]¶
- delete(*, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[None, soulfire.errors.SoulFireOperationError][source]¶
- update_name(friendly_name: str, *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[None, soulfire.errors.SoulFireOperationError][source]¶
- set_config_entry(namespace: str, key: str, value: Any, *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[None, soulfire.errors.SoulFireOperationError][source]¶
- add_accounts(accounts: collections.abc.Iterable[soulfire.common_pb2.MinecraftAccountProto], *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[None, soulfire.errors.SoulFireOperationError][source]¶
- remove_accounts(profile_ids: collections.abc.Iterable[str], *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[None, soulfire.errors.SoulFireOperationError][source]¶
- add_proxies(proxies: collections.abc.Iterable[soulfire.common_pb2.ProxyProto], *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[None, soulfire.errors.SoulFireOperationError][source]¶
- remove_proxies(addresses: collections.abc.Iterable[str], *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[None, soulfire.errors.SoulFireOperationError][source]¶
- login_credentials(service: soulfire.common_pb2.AccountTypeCredentials, payload: collections.abc.Iterable[str], *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) soulfire.streams.Stream[soulfire.mc_auth_pb2.CredentialsAuthResponse, soulfire.errors.SoulFireOperationError][source]¶
- login_device_code(service: soulfire.common_pb2.AccountTypeDeviceCode, *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) soulfire.streams.Stream[soulfire.mc_auth_pb2.DeviceCodeAuthResponse, soulfire.errors.SoulFireOperationError][source]¶
- refresh_account(account: soulfire.common_pb2.MinecraftAccountProto, *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[soulfire.mc_auth_pb2.RefreshResponse, soulfire.errors.SoulFireOperationError][source]¶
- bots(*, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[list[soulfire.bot_pb2.BotListEntry], soulfire.errors.SoulFireOperationError][source]¶
- watch_bot_statuses(*, headers: dict[str, str] | None = None, timeout_ms: int | None = None) soulfire.streams.Stream[soulfire.bot_pb2.WatchBotStatusesResponse, soulfire.errors.SoulFireOperationError][source]¶
- events(filter: soulfire.instance_live_pb2.InstanceEventFilter | None = None, *, bot_ids: collections.abc.Iterable[str] = (), headers: dict[str, str] | None = None, timeout_ms: int | None = None) soulfire.streams.Stream[soulfire.instance_live_pb2.InstanceEvent, soulfire.errors.SoulFireOperationError][source]¶
Watch one multiplexed event stream for bots in this instance.
- start(*, bot_ids: collections.abc.Iterable[str] | None = None, count: int | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[list[soulfire.bot_pb2.BotStatus], soulfire.errors.SoulFireOperationError][source]¶
- stop(*, bot_ids: collections.abc.Iterable[str] | None = None, count: int | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[list[soulfire.bot_pb2.BotStatus], soulfire.errors.SoulFireOperationError][source]¶
- restart(*, bot_ids: collections.abc.Iterable[str] | None = None, count: int | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) effect_py.Effect[list[soulfire.bot_pb2.BotStatus], soulfire.errors.SoulFireOperationError][source]¶