Skip to content

Set your own presence ("preferred presence") and status message.

A preferred presence overrides whatever Teams computes from your activity until the expiration elapses (5–240 minutes) or you clear it. It only takes effect while at least one presence session exists — that is, while Teams is signed in.

Permissions

Requires the delegated permission Presence.ReadWrite.

Reference

View source

import argparse
from datetime import datetime, timedelta, timezone

from office365.graph_client import GraphClient
from tests.settings import client_id, password, tenant, username


def main():
    parser = argparse.ArgumentParser(description="Set your preferred presence")
    parser.add_argument(
        "--availability",
        default="DoNotDisturb",
        help="Available, Busy, DoNotDisturb, Away, BeRightBack, Offline",
    )
    parser.add_argument("--activity", default="DoNotDisturb", help="activity that refines the availability")
    parser.add_argument("--minutes", type=int, default=120, help="how long the status lasts (5-240)")
    parser.add_argument("--message", default="In a meeting — will respond later", help="status message ('' to skip)")
    args = parser.parse_args()

    client = GraphClient(tenant=tenant).with_username_and_password(client_id, username, password)
    presence = client.me.presence

    presence.set_user_preferred_presence(
        availability=args.availability,
        activity=args.activity,
        expiration_duration=f"PT{args.minutes}M",
    ).execute_query()
    print(f"Presence set to {args.availability}/{args.activity} for {args.minutes} minute(s)")

    if args.message:
        presence.set_status_message(
            message=args.message,
            expiry=datetime.now(timezone.utc) + timedelta(minutes=args.minutes),
        ).execute_query()
        print(f"Status message set to {args.message!r}")


if __name__ == "__main__":
    main()

← Back to presence