soulfire.SoulFireTasks

class soulfire.SoulFireTasks(instance_id: str, bot_id: str, client: soulfire.task_connect.BotTaskServiceClient, header_factory: HeaderFactory)[source]

Start and observe durable jobs for one bot.

Access this API through soulfire.SoulFireBot.tasks. Named start methods return SoulFireTask after server acceptance. Call the handle’s result() to wait for successful completion. run_* methods instead produce progress events and tie cancellation to stream interruption by default.

A request timeout limits transport work. A task deadline limits server execution and must be timezone-aware. Keep these limits separate. For retries of task submission, use a stable idempotency_key rather than start another job accidentally.

start[ResultT: google.protobuf.message.Message](task_input: google.protobuf.message.Message, result_type: type[ResultT], *, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, disconnect_policy: soulfire.task_pb2.BotTaskDisconnectPolicy = BOT_TASK_DISCONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, parent_task_id: str | None = None, causation_id: str | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[ResultT], soulfire.errors.SoulFireOperationError][source]

Submit a protobuf task input and return a typed handle after acceptance.

Parameters:
  • task_input – Protobuf task input, such as CollectBlocksTask.

  • result_type – Matching protobuf result class for task.result().

  • conflict_policy – Server policy for conflicting task resources.

  • reconnect_policy – Server policy when the bot reconnects.

  • disconnect_policy – Server policy when the owning RPC disconnects.

  • priority – Scheduling priority; unspecified values use server defaults.

  • deadline – Absolute, timezone-aware execution deadline, or no deadline.

  • parent_task_id – Parent task identifier for task relationships.

  • causation_id – Identifier for the event or operation that caused this task.

  • idempotency_key – Stable key for retries of the same task submission.

  • headers – Extra request metadata; the SDK adds any active control token.

  • timeout_ms – RPC timeout in milliseconds, separate from deadline.

Returns:

An Effect that produces SoulFireTask[result_type] after acceptance. It does not wait for completion or register a cancellation finalizer.

run(task_input: google.protobuf.message.Message, *, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, disconnect_policy: soulfire.task_pb2.BotTaskDisconnectPolicy = BOT_TASK_DISCONNECT_POLICY_CANCEL_WITH_CALL, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, parent_task_id: str | None = None, causation_id: str | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]

Submit a protobuf task and stream progress with RPC ownership.

The stream is lazy: consumption starts the job. Its default disconnect policy is CANCEL_WITH_CALL. Closing or interrupting the stream therefore cancels unfinished work unless an explicit policy selects different behavior. Task failure is also represented in event snapshots; inspect task status.

Parameters:
  • task_input – Protobuf task input.

  • disconnect_policy – Policy for a closed RPC. Defaults to cancellation.

  • deadline – Absolute, timezone-aware task execution deadline.

  • idempotency_key – Stable key for retries of this submission.

  • timeout_ms – RPC timeout in milliseconds, separate from deadline.

  • headers – Extra request metadata.

Returns:

A Stream of BotTaskEvent values. Scheduling and relationship options have the same meaning as start().

run_go_to(goal: soulfire.bot_live_pb2.PathfindGoal, *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]

Navigate to a goal and stream task updates until execution ends.

Consumption starts the job. Interruption cancels unfinished work by default. Use go_to() for a handle with explicit ownership. deadline limits server execution; timeout_ms limits the RPC in milliseconds.

go_to(goal: soulfire.bot_live_pb2.PathfindGoal, *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.GoToTaskResult], soulfire.errors.SoulFireOperationError][source]

Start a durable navigation task and return its typed handle.

goal describes arrival, and options controls pathfinding. This operation returns after acceptance. Use yield from task.result() to wait for arrival, or run_go_to() for progress with stream ownership. Scheduling and request options have the same meaning as start().

run_follow_entity(target: FollowEntityTarget, *, distance: float = 3, options: soulfire.bot_live_pb2.PathfindOptions | None = None, target_unavailable_timeout_seconds: int = 0, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
follow_entity(target: FollowEntityTarget, *, distance: float = 3, options: soulfire.bot_live_pb2.PathfindOptions | None = None, target_unavailable_timeout_seconds: int = 0, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.FollowEntityTaskResult], soulfire.errors.SoulFireOperationError][source]
run_attack_entity(target: AttackEntityTarget, *, attack_range: float = 3, sprinting: bool = False, maximum_attacks: int = 0, options: soulfire.bot_live_pb2.PathfindOptions | None = None, target_unavailable_timeout_seconds: int = 0, select_best_weapon: bool = True, weapon: soulfire.inventory_pb2.ItemSelector | None = None, restore_selected_slot: bool = True, use_offhand_shield: bool = False, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
attack_entity(target: AttackEntityTarget, *, attack_range: float = 3, sprinting: bool = False, maximum_attacks: int = 0, options: soulfire.bot_live_pb2.PathfindOptions | None = None, target_unavailable_timeout_seconds: int = 0, select_best_weapon: bool = True, weapon: soulfire.inventory_pb2.ItemSelector | None = None, restore_selected_slot: bool = True, use_offhand_shield: bool = False, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.AttackEntityTaskResult], soulfire.errors.SoulFireOperationError][source]
run_attack_nearest(selector: soulfire.world_pb2.EntitySelector, *, radius: float = 32, attack_range: float = 3, sprinting: bool = False, maximum_attacks: int = 0, maximum_targets: int = 0, no_target_timeout_seconds: int = 0, complete_when_no_target: bool = False, select_best_weapon: bool = True, weapon: soulfire.inventory_pb2.ItemSelector | None = None, restore_selected_slot: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
attack_nearest(selector: soulfire.world_pb2.EntitySelector, *, radius: float = 32, attack_range: float = 3, sprinting: bool = False, maximum_attacks: int = 0, maximum_targets: int = 1, no_target_timeout_seconds: int = 0, complete_when_no_target: bool = True, select_best_weapon: bool = True, weapon: soulfire.inventory_pb2.ItemSelector | None = None, restore_selected_slot: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.AttackNearestTaskResult], soulfire.errors.SoulFireOperationError][source]
run_ranged_attack(target: AttackEntityTarget, *, minimum_range: float = 8, maximum_range: float = 24, maximum_shots: int = 0, target_unavailable_timeout_seconds: int = 10, weapon: soulfire.inventory_pb2.ItemSelector | None = None, bow_draw_ticks: int = 20, lead_target: bool = True, compensate_gravity: bool = True, strafe: bool = True, restore_selected_slot: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
ranged_attack(target: AttackEntityTarget, *, minimum_range: float = 8, maximum_range: float = 24, maximum_shots: int = 0, target_unavailable_timeout_seconds: int = 10, weapon: soulfire.inventory_pb2.ItemSelector | None = None, bow_draw_ticks: int = 20, lead_target: bool = True, compensate_gravity: bool = True, strafe: bool = True, restore_selected_slot: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.RangedAttackTaskResult], soulfire.errors.SoulFireOperationError][source]
run_flee(threats: soulfire.world_pb2.EntitySelector, *, trigger_radius: float = 8, safe_distance: float = 16, safe_seconds: int = 2, complete_when_safe: bool = False, maximum_escapes: int = 0, options: soulfire.bot_live_pb2.PathfindOptions | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
flee(threats: soulfire.world_pb2.EntitySelector, *, trigger_radius: float = 8, safe_distance: float = 16, safe_seconds: int = 2, complete_when_safe: bool = True, maximum_escapes: int = 0, options: soulfire.bot_live_pb2.PathfindOptions | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.FleeTaskResult], soulfire.errors.SoulFireOperationError][source]
run_guard(position: soulfire.common_pb2.BlockPosition, threats: soulfire.world_pb2.EntitySelector, *, guard_radius: float = 16, maximum_pursuit_distance: float = 24, return_radius: float = 3, attack_range: float = 3, sprinting: bool = False, maximum_attacks: int = 0, maximum_targets: int = 0, complete_when_clear: bool = False, clear_seconds: int = 3, select_best_weapon: bool = True, weapon: soulfire.inventory_pb2.ItemSelector | None = None, restore_selected_slot: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
guard(position: soulfire.common_pb2.BlockPosition, threats: soulfire.world_pb2.EntitySelector, *, guard_radius: float = 16, maximum_pursuit_distance: float = 24, return_radius: float = 3, attack_range: float = 3, sprinting: bool = False, maximum_attacks: int = 0, maximum_targets: int = 0, complete_when_clear: bool = True, clear_seconds: int = 3, select_best_weapon: bool = True, weapon: soulfire.inventory_pb2.ItemSelector | None = None, restore_selected_slot: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.GuardTaskResult], soulfire.errors.SoulFireOperationError][source]
run_protect(entity: AttackEntityTarget, threats: soulfire.world_pb2.EntitySelector, *, guard_radius: float = 16, maximum_pursuit_distance: float = 24, return_radius: float = 3, attack_range: float = 3, sprinting: bool = False, maximum_attacks: int = 0, maximum_targets: int = 0, complete_when_clear: bool = False, clear_seconds: int = 3, select_best_weapon: bool = True, weapon: soulfire.inventory_pb2.ItemSelector | None = None, restore_selected_slot: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
protect(entity: AttackEntityTarget, threats: soulfire.world_pb2.EntitySelector, *, guard_radius: float = 16, maximum_pursuit_distance: float = 24, return_radius: float = 3, attack_range: float = 3, sprinting: bool = False, maximum_attacks: int = 0, maximum_targets: int = 0, complete_when_clear: bool = True, clear_seconds: int = 3, select_best_weapon: bool = True, weapon: soulfire.inventory_pb2.ItemSelector | None = None, restore_selected_slot: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.GuardTaskResult], soulfire.errors.SoulFireOperationError][source]
run_sleep(bed: soulfire.common_pb2.BlockPosition | None = None, *, search_radius: int = 24, wait_until_possible: bool = True, retry_interval_ticks: int = 20, options: soulfire.bot_live_pb2.PathfindOptions | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
sleep(bed: soulfire.common_pb2.BlockPosition | None = None, *, search_radius: int = 24, wait_until_possible: bool = False, retry_interval_ticks: int = 20, options: soulfire.bot_live_pb2.PathfindOptions | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.SleepTaskResult], soulfire.errors.SoulFireOperationError][source]
run_fish(*, maximum_catches: int = 0, maximum_failed_casts: int = 0, rod: soulfire.inventory_pb2.ItemSelector | None = None, cast_timeout_ticks: int = 100, bite_timeout_ticks: int = 12000, complete_when_no_rod: bool = False, restore_selected_slot: bool = True, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
fish(*, maximum_catches: int = 1, maximum_failed_casts: int = 0, rod: soulfire.inventory_pb2.ItemSelector | None = None, cast_timeout_ticks: int = 100, bite_timeout_ticks: int = 12000, complete_when_no_rod: bool = True, restore_selected_slot: bool = True, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.FishTaskResult], soulfire.errors.SoulFireOperationError][source]
run_farm(crop_ids: collections.abc.Iterable[str] = (), *, center: soulfire.common_pb2.BlockPosition | None = None, radius: int = 24, maximum_harvests: int = 0, replant: bool = True, complete_when_no_mature_crops: bool = False, options: soulfire.bot_live_pb2.PathfindOptions | None = None, rescan_interval_ticks: int = 100, restore_selected_slot: bool = True, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
farm(crop_ids: collections.abc.Iterable[str] = (), *, center: soulfire.common_pb2.BlockPosition | None = None, radius: int = 24, maximum_harvests: int = 1, replant: bool = True, complete_when_no_mature_crops: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, rescan_interval_ticks: int = 100, restore_selected_slot: bool = True, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.FarmTaskResult], soulfire.errors.SoulFireOperationError][source]
run_breed(animals: soulfire.world_pb2.EntitySelector | None = None, *, food: soulfire.inventory_pb2.ItemSelector | None = None, center: soulfire.common_pb2.BlockPosition | None = None, radius: int = 24, maximum_pairs: int = 0, complete_when_no_pair: bool = False, complete_when_no_food: bool = False, options: soulfire.bot_live_pb2.PathfindOptions | None = None, rescan_interval_ticks: int = 100, breeding_timeout_ticks: int = 100, restore_selected_slot: bool = True, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
breed(animals: soulfire.world_pb2.EntitySelector | None = None, *, food: soulfire.inventory_pb2.ItemSelector | None = None, center: soulfire.common_pb2.BlockPosition | None = None, radius: int = 24, maximum_pairs: int = 1, complete_when_no_pair: bool = True, complete_when_no_food: bool = True, options: soulfire.bot_live_pb2.PathfindOptions | None = None, rescan_interval_ticks: int = 100, breeding_timeout_ticks: int = 100, restore_selected_slot: bool = True, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.BreedTaskResult], soulfire.errors.SoulFireOperationError][source]
run_explore(*, origin: soulfire.common_pb2.BlockPosition | None = None, radius: int = 256, waypoint_spacing: int = 64, maximum_waypoints: int = 0, options: soulfire.bot_live_pb2.PathfindOptions | None = None, return_to_origin: bool = False, purpose: str = 'sdk-explore', reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
explore(*, origin: soulfire.common_pb2.BlockPosition | None = None, radius: int = 256, waypoint_spacing: int = 64, maximum_waypoints: int = 1, options: soulfire.bot_live_pb2.PathfindOptions | None = None, return_to_origin: bool = False, purpose: str = 'sdk-explore', conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.ExploreTaskResult], soulfire.errors.SoulFireOperationError][source]
run_stash(container: soulfire.common_pb2.BlockPosition, operations: collections.abc.Iterable[ContainerTransferSpec | soulfire.task_pb2.ContainerTransferOperation], *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, close_container: bool = True, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
stash(container: soulfire.common_pb2.BlockPosition, operations: collections.abc.Iterable[ContainerTransferSpec | soulfire.task_pb2.ContainerTransferOperation], *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, close_container: bool = True, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.ContainerTransferTaskResult], soulfire.errors.SoulFireOperationError][source]
run_withdraw(container: soulfire.common_pb2.BlockPosition, operations: collections.abc.Iterable[ContainerTransferSpec | soulfire.task_pb2.ContainerTransferOperation], *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, close_container: bool = True, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
withdraw(container: soulfire.common_pb2.BlockPosition, operations: collections.abc.Iterable[ContainerTransferSpec | soulfire.task_pb2.ContainerTransferOperation], *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, close_container: bool = True, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.ContainerTransferTaskResult], soulfire.errors.SoulFireOperationError][source]
run_maintain_loadout(container: soulfire.common_pb2.BlockPosition, requirements: collections.abc.Iterable[LoadoutRequirementSpec | soulfire.task_pb2.LoadoutRequirement], *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, check_interval_ticks: int = 100, maximum_rebalances: int = 0, complete_when_satisfied: bool = False, close_container: bool = True, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
maintain_loadout(container: soulfire.common_pb2.BlockPosition, requirements: collections.abc.Iterable[LoadoutRequirementSpec | soulfire.task_pb2.LoadoutRequirement], *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, check_interval_ticks: int = 100, maximum_rebalances: int = 0, complete_when_satisfied: bool = False, close_container: bool = True, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.MaintainLoadoutTaskResult], soulfire.errors.SoulFireOperationError][source]
balance_loadout(container: soulfire.common_pb2.BlockPosition, requirements: collections.abc.Iterable[LoadoutRequirementSpec | soulfire.task_pb2.LoadoutRequirement], *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, check_interval_ticks: int = 100, close_container: bool = True, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.MaintainLoadoutTaskResult], soulfire.errors.SoulFireOperationError][source]
run_auto_eat(food_item_ids: collections.abc.Iterable[str] = (), *, food_level: int = 14, check_interval_ticks: int = 20, maximum_meals: int = 0, complete_when_no_food: bool = False, restore_selected_slot: bool = True, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
auto_eat(food_item_ids: collections.abc.Iterable[str] = (), *, food_level: int = 14, check_interval_ticks: int = 20, maximum_meals: int = 0, complete_when_no_food: bool = False, restore_selected_slot: bool = True, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.AutoEatTaskResult], soulfire.errors.SoulFireOperationError][source]
run_auto_respawn(*, respawn_delay_ticks: int = 0, maximum_respawns: int = 0, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
auto_respawn(*, respawn_delay_ticks: int = 0, maximum_respawns: int = 0, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.AutoRespawnTaskResult], soulfire.errors.SoulFireOperationError][source]
run_auto_totem(*, check_interval_ticks: int = 20, maximum_equips: int = 0, complete_when_no_totem: bool = False, replace_occupied_offhand: bool = False, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
auto_totem(*, check_interval_ticks: int = 20, maximum_equips: int = 0, complete_when_no_totem: bool = False, replace_occupied_offhand: bool = False, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.AutoTotemTaskResult], soulfire.errors.SoulFireOperationError][source]
run_auto_armor(*, check_interval_ticks: int = 20, maximum_equips: int = 0, complete_when_no_upgrade: bool = False, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
auto_armor(*, check_interval_ticks: int = 20, maximum_equips: int = 0, complete_when_no_upgrade: bool = False, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.AutoArmorTaskResult], soulfire.errors.SoulFireOperationError][source]
run_collect_blocks(block_ids: str | collections.abc.Iterable[str] = (), *, tags: collections.abc.Iterable[str] = (), count: int = 1, search_radius: int = 32, avoid_submerged_targets: bool = False, require_line_of_sight: bool = False, target_y_range: soulfire.world_pb2.IntRange | None = None, options: soulfire.bot_live_pb2.PathfindOptions | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]

Collect matching blocks and stream progress with cancellation ownership.

Selector and pathfinding options match collect_blocks(). Consumption starts the job. Interruption cancels unfinished work by default. deadline limits server execution; timeout_ms limits the RPC in milliseconds.

collect_blocks(block_ids: str | collections.abc.Iterable[str] = (), *, tags: collections.abc.Iterable[str] = (), count: int = 1, search_radius: int = 32, avoid_submerged_targets: bool = False, require_line_of_sight: bool = False, target_y_range: soulfire.world_pb2.IntRange | None = None, options: soulfire.bot_live_pb2.PathfindOptions | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.CollectBlocksTaskResult], soulfire.errors.SoulFireOperationError][source]

Start a durable block collection task and return its typed handle.

Parameters:
  • block_ids – Block IDs or #-prefixed tags; accepts one string or an iterable.

  • tags – Additional block tags, such as "minecraft:logs".

  • count – Blocks to collect. Defaults to 1.

  • search_radius – Search distance in blocks. Defaults to 32, at most 64.

  • avoid_submerged_targets – Skip targets covered by fluid up to the bot’s height.

  • require_line_of_sight – Restrict selection to visible blocks.

  • target_y_range – Allowed block heights; an omitted bound is open.

  • options – Pathfinding configuration.

  • deadline – Absolute, timezone-aware task execution deadline.

  • idempotency_key – Stable key for retries of the same submission.

  • timeout_ms – RPC timeout in milliseconds.

Returns:

An Effect that produces SoulFireTask[CollectBlocksTaskResult] after acceptance. Scheduling options have the same meaning as start().

Examples

Inside an Effect workflow:

task = yield from bot.tasks.collect_blocks(tags=["minecraft:logs"], count=16)
result = yield from task.result()

See also

soulfire.SoulFireBot.collect() to wait with automatic cancellation of unfinished work, or run_collect_blocks() to stream progress.

run_excavate(from_position: soulfire.common_pb2.BlockPosition, to_position: soulfire.common_pb2.BlockPosition, *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, maximum_blocks: int = 0, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
excavate(from_position: soulfire.common_pb2.BlockPosition, to_position: soulfire.common_pb2.BlockPosition, *, options: soulfire.bot_live_pb2.PathfindOptions | None = None, maximum_blocks: int = 0, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.ExcavateTaskResult], soulfire.errors.SoulFireOperationError][source]
run_build(origin: soulfire.common_pb2.BlockPosition, blocks: collections.abc.Iterable[SchematicBlock], *, rotation: soulfire.task_pb2.BuildRotation = BUILD_ROTATION_NONE, mirror: soulfire.task_pb2.BuildMirror = BUILD_MIRROR_NONE, substitutions: collections.abc.Mapping[str, collections.abc.Iterable[str]] | None = None, options: soulfire.bot_live_pb2.PathfindOptions | None = None, break_incorrect_blocks: bool = True, restore_selected_slot: bool = True, partition_index: int = 0, partition_count: int = 1, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
build(origin: soulfire.common_pb2.BlockPosition, blocks: collections.abc.Iterable[SchematicBlock], *, rotation: soulfire.task_pb2.BuildRotation = BUILD_ROTATION_NONE, mirror: soulfire.task_pb2.BuildMirror = BUILD_MIRROR_NONE, substitutions: collections.abc.Mapping[str, collections.abc.Iterable[str]] | None = None, options: soulfire.bot_live_pb2.PathfindOptions | None = None, break_incorrect_blocks: bool = True, restore_selected_slot: bool = True, partition_index: int = 0, partition_count: int = 1, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.task_pb2.BuildTaskResult], soulfire.errors.SoulFireOperationError][source]
run_craft(recipe_id: str, *, count: int = 1, station: soulfire.common_pb2.BlockPosition | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
craft(recipe_id: str, *, count: int = 1, station: soulfire.common_pb2.BlockPosition | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.recipe_pb2.CraftTaskResult], soulfire.errors.SoulFireOperationError][source]
run_smelt(input: soulfire.inventory_pb2.ItemSelector, *, count: int = 1, fuel: soulfire.inventory_pb2.ItemSelector | None = None, station: soulfire.common_pb2.BlockPosition | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
smelt(input: soulfire.inventory_pb2.ItemSelector, *, count: int = 1, fuel: soulfire.inventory_pb2.ItemSelector | None = None, station: soulfire.common_pb2.BlockPosition | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.recipe_pb2.SmeltTaskResult], soulfire.errors.SoulFireOperationError][source]
run_brew(input: soulfire.inventory_pb2.ItemSelector, ingredient: soulfire.inventory_pb2.ItemSelector, *, count: int = 1, fuel: soulfire.inventory_pb2.ItemSelector | None = None, station: soulfire.common_pb2.BlockPosition | None = None, expected_result: soulfire.inventory_pb2.ItemSelector | None = None, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
brew(input: soulfire.inventory_pb2.ItemSelector, ingredient: soulfire.inventory_pb2.ItemSelector, *, count: int = 1, fuel: soulfire.inventory_pb2.ItemSelector | None = None, station: soulfire.common_pb2.BlockPosition | None = None, expected_result: soulfire.inventory_pb2.ItemSelector | None = None, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.recipe_pb2.BrewTaskResult], soulfire.errors.SoulFireOperationError][source]
run_villager_trade(offer_index: int, *, count: int = 1, expected_result: soulfire.inventory_pb2.ItemSelector | None = None, close_when_done: bool = False, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]
villager_trade(offer_index: int, *, count: int = 1, expected_result: soulfire.inventory_pb2.ItemSelector | None = None, close_when_done: bool = False, conflict_policy: soulfire.task_pb2.BotTaskConflictPolicy = BOT_TASK_CONFLICT_POLICY_UNSPECIFIED, reconnect_policy: soulfire.task_pb2.BotTaskReconnectPolicy = BOT_TASK_RECONNECT_POLICY_UNSPECIFIED, priority: soulfire.task_pb2.BotTaskPriority = BOT_TASK_PRIORITY_UNSPECIFIED, deadline: datetime.datetime | None = None, idempotency_key: str | None = None, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[soulfire.recipe_pb2.VillagerTradeTaskResult], soulfire.errors.SoulFireOperationError][source]
get[ResultT: google.protobuf.message.Message](task_id: str, result_type: type[ResultT], *, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[SoulFireTask[ResultT], soulfire.errors.SoulFireOperationError][source]
list(*, statuses: collections.abc.Iterable[soulfire.task_pb2.BotTaskStatus] = (), include_terminal: bool = False, page_size: int = 100, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → effect_py.Effect[list[soulfire.task_pb2.BotTask], soulfire.errors.SoulFireOperationError][source]
watch(*, statuses: collections.abc.Iterable[soulfire.task_pb2.BotTaskStatus] = (), after_sequence: int = 0, include_snapshot: bool = True, headers: dict[str, str] | None = None, timeout_ms: int | None = None) → soulfire.streams.Stream[soulfire.task_pb2.BotTaskEvent, soulfire.errors.SoulFireOperationError][source]