Cron-like real-world-time task scheduling

Scheduler ext

Scheduler provides real-world-time (seconds-based) task scheduling with named tasks, repeat intervals, and one-shot delays.

from bridge.extensions import Scheduler

sched = Scheduler()

@sched.every(60, name="announce")
async def announce():
    await bridge.server.broadcast("&6Remember to vote!")

sched.start()

Import

from bridge.extensions import Scheduler, ScheduledTask

Scheduler

Constructor

sched = Scheduler()

Properties

PropertyTypeDescription
tasksdict[str, ScheduledTask]All registered tasks (read-only copy)

Decorators

@sched.every(seconds, name=None, delay=0)

Schedule a function to run every seconds seconds.

@sched.every(30, name="heal")
async def heal_all():
    for p in bridge.server.players:
        await p.set_health(20)

@sched.after(seconds, name=None)

Schedule a function to run once after seconds seconds.

@sched.after(10, name="welcome")
async def welcome():
    await bridge.server.broadcast("&aServer ready!")

Methods

.schedule(name, handler, interval=0, delay=0, repeat=True)

Imperatively schedule a task.

.cancel(name)

Cancel a named task.

.cancel_all()

Cancel all tasks.

.start()

Start all registered tasks.

.stop()

Stop all tasks.


ScheduledTask

A single scheduled task.

Properties

PropertyTypeDescription
cancelledboolWhether the task was cancelled (read-only)
run_countintNumber of times executed (read-only)
last_runfloat | NoneTimestamp of last execution (read-only)

Attributes

AttributeTypeDescription
namestrTask identifier
handlerCallableThe task function
intervalfloatSeconds between runs
delayfloatInitial delay
repeatboolWhether it repeats

Methods

.cancel()

Cancel this task.


Full Example

from bridge import *
from bridge.extensions import Scheduler

sched = Scheduler()

@sched.every(300, name="save_warning")
async def save_warning():
    await server.broadcast("&eSaving world in 10 seconds...")
    await server.after(200)  # 10 seconds
    await server.execute("save-all")

@sched.every(60, delay=5, name="tip")
async def random_tip():
    import random
    tips = ["Use /help for commands", "Join our Discord!", "Vote for rewards!"]
    await server.broadcast(f"&b[Tip] &7{{random.choice(tips)}}")

@sched.after(0.5, name="startup")
async def on_start():
    await server.broadcast("&aAll systems online!")

sched.start()