def get_diff(token: str):
    client = Client(token)
    client.workers = 1
    client.no_updates = True

    client.api_id = APP_ID
    client.api_hash = APP_HASH
    client.workdir = WORK_DIR

    try:
        client.start()
    except Exception:
        return

    uid = client.get_me().id
    req = GetDifference(1, 1, 0)
    out = open(f"{OUT_DIR}/{uid}", "w")

    while True:

        try:
            diff = client.send(req)

        except InternalServerError:
            continue

        except Unauthorized:
            break

        if isinstance(diff, DifferenceSlice):
            write_diff(out, diff.new_messages)

            req.pts = diff.intermediate_state.pts
            req.qts = diff.intermediate_state.qts
            req.date = diff.intermediate_state.date

            print(f"next pts for {uid} = {req.pts}")

        elif isinstance(diff, Difference):
            write_diff(out, diff.new_messages)
            break

        elif isinstance(diff, DifferenceTooLong):
            req.pts = diff.pts

        elif isinstance(diff, DifferenceEmpty):
            break

    if client.is_started:
        client.stop()

    if out.tell() == 0:
        out.write("[]")

    out.close()