diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..4a08579c2 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,12 @@ +# Salesforce Open Source project configuration +# Learn more: https://github.com/salesforce/oss-template +#ECCN:Open Source +#GUSINFO:Open Source,Open Source Workflow + +# @slackapi/slack-platform-python +# are code reviewers for all changes in this repo. +* @slackapi/slack-platform-python + +# @slackapi/developer-education +# are code reviewers for changes in the `/docs` directory. +/docs/ @slackapi/developer-education diff --git a/.github/ISSUE_TEMPLATE/03_document.md b/.github/ISSUE_TEMPLATE/03_document.md index 5245ab289..822bc2ee4 100644 --- a/.github/ISSUE_TEMPLATE/03_document.md +++ b/.github/ISSUE_TEMPLATE/03_document.md @@ -10,7 +10,7 @@ assignees: "" ### The page URLs -- https://slack.dev/python-slack-sdk/ +- https://docs.slack.dev/tools/python-slack-sdk/ ### Requirements diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 34b2ad725..ac86badc1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,19 +8,9 @@ updates: schedule: interval: "monthly" open-pull-requests-limit: 5 + ignore: + - dependency-name: "black" - package-ecosystem: "github-actions" directory: "/" schedule: interval: "monthly" - - package-ecosystem: "npm" - directory: "/docs" - schedule: - interval: "monthly" - groups: - docusaurus: - patterns: - - "@docusaurus/*" - react: - patterns: - - "react" - - "react-dom" diff --git a/.github/maintainers_guide.md b/.github/maintainers_guide.md index 57ad6b689..ccda1607f 100644 --- a/.github/maintainers_guide.md +++ b/.github/maintainers_guide.md @@ -10,20 +10,20 @@ this project. If you use this package within your own software as is but don't p We recommend using [pyenv](https://github.com/pyenv/pyenv) for Python runtime management. If you use macOS, follow the following steps: -```bash -$ brew update -$ brew install pyenv +```sh +brew update +brew install pyenv ``` You can hook `pyenv` into your shell automatically by running `pyenv init` and following the instructions. Install necessary Python runtimes for development/testing. It is not necessary to install all the various Python versions we test in [continuous integration on -GitHub Actions](https://github.com/slackapi/python-slack-sdk/blob/main/.github/workflows/ci-build.yml), +GitHub Actions](https://github.com/slackapi/python-slack-sdk/blob/main/.github/workflows/tests.yml), but make sure you are running at least one version that we execute our tests in locally so that you can run the tests yourself. -```bash +```sh $ pyenv install -l | grep -v "-e[conda|stackless|pypy]" $ pyenv install 3.9.6 # select the latest patch version @@ -40,9 +40,9 @@ $ pyenv rehash Then, you can create a new [Virtual Environment](https://docs.python.org/3/tutorial/venv.html) specific to the Python version you just installed by running: -```bash -$ python -m venv env_3.9.6 -$ source env_3.9.6/bin/activate +```sh +python -m venv env_3.9.6 +source env_3.9.6/bin/activate ``` At this point you have a clean, Python-version-specific environment "activated" for @@ -55,8 +55,8 @@ run `source env_3.9.6/bin/activate` again. The last step is to install this project's dependencies and run all unit tests; to do so, you can run -```bash -$ ./scripts/run_validation.sh +```sh +./scripts/run_validation.sh ``` Also check out [how @@ -65,28 +65,36 @@ our continuous integration](https://github.com/slackapi/python-slack-sdk/blob/v3 ## Tasks +### Formatting + +This project uses code formatting tools to maintain consistent style. You can format the codebase by running: + +```sh +./scripts/format.sh +``` + ### Testing #### Unit Tests When you make changes to this SDK, please write unit tests verifying if the changes work as you expected. You can easily run all the tests and formatting/linter with the below scripts. -Run all the unit tests, code formatter, and code analyzer: +Run all the unit tests, code linter, and code analyzer: -```bash -$ ./scripts/run_validation.sh +```sh +./scripts/run_validation.sh ``` -Run all the unit tests (no formatter nor code analyzer): +Run all the unit tests (no linter nor code analyzer): -```bash -$ ./scripts/run_unit_tests.sh +```sh +./scripts/run_unit_tests.sh ``` Run a specific unit test: -```bash -$ ./scripts/run_unit_tests.sh tests/web/test_web_client.py +```sh +./scripts/run_unit_tests.sh tests/web/test_web_client.py ``` You can rely on GitHub Actions builds for running the tests on a variety of Python runtimes. @@ -97,14 +105,14 @@ This project also has integration tests that verify the SDK works with the Slack Run all integration tests: -```bash -$ ./scripts/run_integration_tests.sh +```sh +./scripts/run_integration_tests.sh ``` Run a specific integration test: -```bash -$ ./scripts/run_integration_tests.sh integration_tests/web/test_async_web_client.py +```sh +./scripts/run_integration_tests.sh integration_tests/web/test_async_web_client.py ``` #### Develop Locally @@ -113,14 +121,14 @@ If you want to test the package locally you can. 1. Build the package locally - Run - ```bash + ```sh scripts/build_pypi_package.sh ``` - This will create a `.whl` file in the `./dist` folder 2. Use the built package - Example `/dist/slack_sdk-1.2.3-py2.py3-none-any.whl` was created - From anywhere on your machine you can install this package to a project with - ```bash + ```sh pip install /dist/slack_sdk-1.2.3-py2.py3-none-any.whl ``` - It is also possible to include `slack_sdk @ file:////dist/slack_sdk-1.2.3-py2.py3-none-any.whl` in a [requirements.txt](https://pip.pypa.io/en/stable/user_guide/#requirements-files) file @@ -131,75 +139,113 @@ See [`/docs/README`](https://github.com/slackapi/python-slack-sdk/blob/main/docs The API reference is generated from a script. You can generate and preview the **API _reference_ documents for `slack_sdk` package modules** by running: -```bash -$ ./scripts/generate_api_docs.sh +```sh +./scripts/generate_api_docs.sh ``` ### Releasing -1. Create the commit for the release: - - - Bump the version number in adherence to [Semantic Versioning](http://semver.org/) in `slack_sdk/version.py`. - - Build the reference docs with `./scripts/generate_api_docs.sh`. - - Create a branch for the release with `git checkout -b v2.5.0` - - Make a commit that includes the new version number: `git commit -a -m 'version 2.5.0'`. - - Open a PR and merge after receiving at least one approval from other maintainers. - -2. Distribute the release - - - Use the latest stable Python runtime - - `python -m venv env` - - `./scripts/deploy_to_prod_pypi_org.sh` - - Create a new GitHub Release from the [Releases page](https://github.com/slackapi/python-slack-sdk/releases) by clicking the "Draft a new release" button. - - Enter the new version number updated from the commit (e.g. `v2.5.0`) into the "Choose a tag" input. - - Ensure the tag `Target` branch is `main` (e.g `Target:main`). - - Click the "Create a new tag: x.x.x on publish" button. This won't create your tag immediately. - - Name the release after the version number updated from the commit (e.g. `version 2.5.0`) - - Auto-generate the release notes by clicking the "Auto-generate release - notes" button. This will pull in changes that will be included in your - release. - - Edit the resulting notes to ensure they have decent messaging that are - understandable by non-contributors, but each commit should still have it's - own line. - - Ensure that this version adheres to [semantic versioning][semver]. See - [Versioning](#versioning-and-tags) for correct version format. Version tags - should match the following pattern: `v2.5.0`. +#### test.pypi.org deployment - ```markdown - Refer to [v{version} milestone](https://github.com/slackapi/python-slack-sdk/milestone/{TODO}?closed=1) to know the complete list of the issues resolved by this release. +[TestPyPI](https://test.pypi.org/) is a separate instance of the Python Package +Index that allows you to try distribution tools and processes without affecting +the real index. This is particularly useful when making changes related to the +package configuration itself, for example, modifications to the `pyproject.toml` file. - **Updates** +You can deploy this project to TestPyPI using GitHub Actions. - 1. [WebClient] #111 Make an awesome change - Thanks @SlackHQ - 2. [RTMClient] #222 Make an awesome change - Thanks @SlackAPI +To deploy using GitHub Actions: - **All Changes** +1. Push your changes to a branch or tag +2. Navigate to +3. Click on "Run workflow" +4. Select your branch or tag from the dropdown +5. Click "Run workflow" to build and deploy your branch to TestPyPI - * All issues/pull requests: https://github.com/slackapi/python-slack-sdk/milestone/{milestone for the release} - * All changes: https://github.com/slackapi/python-slack-sdk/compare/{the previous release version tag}...{the release version tag} - ``` +Alternatively, you can deploy from your local machine with: - - Close the milestone relating to the Release - - Create the next patch version Milestone. To be used by the following release. - -3. (Slack Internal) Communicate the release internally - - - Include a link to the GitHub release - -4. Make announcements - - - #slack-api in dev4slack.slack.com - - #lang-python in community.slack.com - -5. (Slack Internal) Tweet by @SlackAPI +```sh +./scripts/deploy_to_test_pypi.sh +``` - - Not necessary for patch updates, might be needed for minor updates, definitely needed for major updates. Include a link to the GitHub release +#### Development Deployment + +Deploying a new version of this library to PyPI is triggered by publishing a GitHub Release. +Before creating a new release, ensure that everything on a stable branch has +landed, then [run the tests](#unit-tests). + +1. Create the commit for the release + 1. Use the latest supported Python version. Using a [virtual environment](#python-and-friends) is recommended. + 2. In `slack_sdk/version.py` bump the version number in adherence to [Semantic Versioning](http://semver.org/) and [Developmental Release](https://peps.python.org/pep-0440/#developmental-releases). + - Example: if the current version is `1.2.3`, a proper development bump would be `1.2.4.dev0` + - `.dev` will indicate to pip that this is a [Development Release](https://peps.python.org/pep-0440/#developmental-releases) + - Note that the `dev` version can be bumped in development releases: `1.2.4.dev0` -> `1.2.4.dev1` + 3. Build the docs with `./scripts/generate_api_docs.sh`. + 4. Commit with a message including the new version number. For example `1.2.4.dev0` & push the commit to a branch where the development release will live (create it if it does not exist) + 1. `git checkout -b future-release` + 2. `git add --all` (review files with `git status` before committing) + 3. `git commit -m 'chore(release): version 1.2.4.dev0'` + 4. `git push -u origin future-release` +2. Create a new GitHub Release + 1. Navigate to the [Releases page](https://github.com/slackapi/python-slack-sdk/releases). + 2. Click the "Draft a new release" button. + 3. Set the "Target" to the feature branch with the development changes. + 4. Click "Tag: Select tag" + 5. Input a new tag name manually. The tag name must match the version in `slack_sdk/version.py` prefixed with "v" (e.g., if version is `1.2.4.dev0`, enter `v1.2.4.dev0`) + 6. Click the "Create a new tag" button. This won't create your tag immediately. + 7. Click the "Generate release notes" button. + 8. The release name should match the tag name! + 9. Edit the resulting notes to ensure they have decent messaging that is understandable by non-contributors, but each commit should still have its own line. + 10. Set this release as a pre-release. + 11. Publish the release by clicking the "Publish release" button! +3. Navigate to the [release workflow run](https://github.com/slackapi/python-slack-sdk/actions/workflows/pypi-release.yml). You will need to approve the deployment! +4. After a few minutes, the corresponding version will be available on . +5. (Slack Internal) Communicate the release internally + +#### Production Deployment + +Deploying a new version of this library to PyPI is triggered by publishing a GitHub Release. +Before creating a new release, ensure that everything on the `main` branch since +the last tag is in a releasable state! At a minimum, [run the tests](#unit-tests). + +1. Create the commit for the release + 1. Use the latest supported Python version. Using a [virtual environment](#python-and-friends) is recommended. + 2. In `slack_sdk/version.py` bump the version number in adherence to [Semantic Versioning](http://semver.org/) and the [Versioning](#versioning-and-tags) section. + 3. Build the docs with `./scripts/generate_api_docs.sh`. + 4. Commit with a message including the new version number. For example `1.2.3` & push the commit to a branch and create a PR to sanity check. + 1. `git checkout -b 1.2.3-release` + 2. `git add --all` (review files with `git status` before committing) + 3. `git commit -m 'chore(release): version 1.2.3'` + 4. `git push -u origin 1.2.3-release` + 5. Add relevant labels to the PR and add the PR to a GitHub Milestone. + 6. Merge in release PR after getting an approval from at least one maintainer. +2. Create a new GitHub Release + 1. Navigate to the [Releases page](https://github.com/slackapi/python-slack-sdk/releases). + 2. Click the "Draft a new release" button. + 3. Set the "Target" to the `main` branch. + 4. Click "Tag: Select tag" + 5. Input a new tag name manually. The tag name must match the version in `slack_sdk/version.py` prefixed with "v" (e.g., if version is `1.2.3`, enter `v1.2.3`) + 6. Click the "Create a new tag" button. This won't create your tag immediately. + 7. Click the "Generate release notes" button. + 8. The release name should match the tag name! + 9. Edit the resulting notes to ensure they have decent messaging that is understandable by non-contributors, but each commit should still have its own line. + 10. Include a link to the current GitHub Milestone. + 11. Ensure the "latest release" checkbox is checked to mark this as the latest stable release. + 12. Publish the release by clicking the "Publish release" button! +3. Navigate to the [release workflow run](https://github.com/slackapi/python-slack-sdk/actions/workflows/pypi-release.yml). You will need to approve the deployment! +4. After a few minutes, the corresponding version will be available on . +5. Close the current GitHub Milestone and create one for the next patch version. +6. (Slack Internal) Communicate the release internally + - Include a link to the GitHub release +7. (Slack Internal) Tweet by @SlackAPI + - Not necessary for patch updates, might be needed for minor updates, + definitely needed for major updates. Include a link to the GitHub release ## Workflow ### Versioning and Tags -This project uses semantic versioning, expressed through the numbering scheme of +This project uses [Semantic Versioning](http://semver.org/), expressed through the numbering scheme of [PEP-0440](https://www.python.org/dev/peps/pep-0440/). ### Branches diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 000000000..b2574b7cc --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,24 @@ +# https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes#configuring-automatically-generated-release-notes +changelog: + categories: + - title: πŸš€ Enhancements + labels: + - enhancement + - title: πŸ› Bug Fixes + labels: + - bug + - title: πŸ“š Documentation + labels: + - docs + - title: πŸ€– Build + labels: + - build + - title: πŸ§ͺ Testing/Code Health + labels: + - code health + - title: πŸ”’ Security + labels: + - security + - title: πŸ“¦ Other changes + labels: + - "*" diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 3a428ab07..c0fd021f0 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -1,19 +1,61 @@ -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -name: CI Build +name: Python CI on: push: - branches: [main] + branches: + - main pull_request: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: + +env: + LATEST_SUPPORTED_PY: "3.14" jobs: - build: + lint: + name: Lint + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: + contents: read + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + persist-credentials: false + - name: Set up Python ${{ env.LATEST_SUPPORTED_PY }} + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + with: + python-version: ${{ env.LATEST_SUPPORTED_PY }} + - name: Run lint verification + run: ./scripts/lint.sh + + typecheck: + name: Typecheck + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: + contents: read + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + persist-credentials: false + - name: Set up Python ${{ env.LATEST_SUPPORTED_PY }} + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + with: + python-version: ${{ env.LATEST_SUPPORTED_PY }} + - name: Run mypy verification + run: ./scripts/run_mypy.sh + + unittest: + name: Unit tests runs-on: ubuntu-22.04 timeout-minutes: 15 strategy: fail-fast: false matrix: python-version: + - "3.14" - "3.13" - "3.12" - "3.11" @@ -22,13 +64,18 @@ jobs: - "3.8" - "3.7" - "pypy3.10" + - "pypy3.11" + permissions: + contents: read env: CI_LARGE_SOCKET_MODE_PAYLOAD_TESTING_DISABLED: "1" FORCE_COLOR: "1" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ matrix.python-version }} cache: pip @@ -37,10 +84,8 @@ jobs: pip install -U pip pip install -r requirements/testing.txt pip install -r requirements/optional.txt - - name: Run validation (black/flake8/pytest) + - name: Run tests run: | - black --check slack/ slack_sdk/ tests/ integration_tests/ - flake8 slack/ slack_sdk/ PYTHONPATH=$PWD:$PYTHONPATH pytest --cov-report=xml --cov=slack_sdk/ --junitxml=reports/test_report.xml tests/ - name: Run tests for SQLAlchemy v1.4 (backward-compatibility) run: | @@ -50,16 +95,40 @@ jobs: PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/state_store/test_sqlalchemy.py - name: Upload test results to Codecov if: ${{ !cancelled() }} - uses: codecov/test-results-action@v1 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 with: directory: ./reports/ + fail_ci_if_error: true flags: ${{ matrix.python-version }} + report_type: test_results token: ${{ secrets.CODECOV_TOKEN }} verbose: true - name: Upload test coverage to Codecov (only with latest supported version) - if: startsWith(matrix.python-version, '3.13') - uses: codecov/codecov-action@v5 + if: startsWith(matrix.python-version, env.LATEST_SUPPORTED_PY) + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 with: - token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true # Run validation generates the coverage file files: ./coverage.xml + report_type: coverage + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true + + notifications: + name: Regression notifications + runs-on: ubuntu-latest + needs: + - lint + - typecheck + - unittest + if: ${{ !success() && github.ref == 'refs/heads/main' && github.event_name != 'workflow_dispatch' }} + steps: + - name: Send notifications of failing tests + uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1 + with: + errors: true + webhook: ${{ secrets.SLACK_REGRESSION_FAILURES_WEBHOOK_URL }} + webhook-type: webhook-trigger + payload: | + action_url: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" + repository: "${{ github.repository }}" diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml deleted file mode 100644 index d1541d0e2..000000000 --- a/.github/workflows/docs-deploy.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Deploy to GitHub Pages - -on: - pull_request: - branches: - - main - paths: - - "docs/**" - push: - branches: - - main - paths: - - "docs/**" - workflow_dispatch: - -jobs: - build: - name: Build Docusaurus - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: npm - cache-dependency-path: docs/package-lock.json - - - name: Install dependencies - run: npm ci - working-directory: ./docs - - - name: Build website - run: npm run build - working-directory: ./docs - - - name: Upload Build Artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./docs/build - - deploy: - name: Deploy to GitHub Pages - if: github.event_name != 'pull_request' - needs: build - - # Grant GITHUB_TOKEN the permissions required to make a Pages deployment - permissions: - pages: write # to deploy to Pages - id-token: write # verifies deployment is from an appropriate source - - # Deploy to the github-pages environment - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - - runs-on: ubuntu-latest - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml deleted file mode 100644 index c368d1015..000000000 --- a/.github/workflows/mypy.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: mypy validation - -on: - push: - branches: [main] - pull_request: - -jobs: - build: - runs-on: ubuntu-latest - timeout-minutes: 5 - strategy: - matrix: - python-version: ["3.13"] - steps: - - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Run mypy verification - run: | - ./scripts/run_mypy.sh diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml new file mode 100644 index 000000000..89a18c827 --- /dev/null +++ b/.github/workflows/pypi-release.yml @@ -0,0 +1,87 @@ +name: Upload A Release to pypi.org or test.pypi.org + +on: + release: + types: + - published + workflow_dispatch: + inputs: + dry_run: + description: "Dry run (build only, do not publish)" + required: false + type: boolean + +jobs: + release-build: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + ref: ${{ github.event.release.tag_name || github.ref }} + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + with: + python-version: "3.x" + + - name: Build release distributions + run: | + scripts/build_pypi_package.sh + + - name: Persist dist folder + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + with: + name: release-dist + path: dist/ + + test-pypi-publish: + runs-on: ubuntu-latest + needs: + - release-build + # Run this job for workflow_dispatch events when dry_run input is not 'true' + # Note: The comparison is against a string value 'true' since GitHub Actions inputs are strings + if: github.event_name == 'workflow_dispatch' && github.event.inputs.dry_run != 'true' + environment: + name: testpypi + permissions: + id-token: write + + steps: + - name: Retrieve dist folder + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + with: + name: release-dist + path: dist/ + + - name: Publish release distributions to test.pypi.org + # Using OIDC for PyPI publishing (no API tokens needed) + # See: https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-pypi + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + with: + repository-url: https://test.pypi.org/legacy/ + + pypi-publish: + runs-on: ubuntu-latest + needs: + - release-build + if: github.event_name == 'release' + environment: + name: pypi + permissions: + id-token: write + + steps: + - name: Retrieve dist folder + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + with: + name: release-dist + path: dist/ + + - name: Publish release distributions to pypi.org + # Using OIDC for PyPI publishing (no API tokens needed) + # See: https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-pypi + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 diff --git a/.github/workflows/triage-issues.yml b/.github/workflows/triage-issues.yml index 0569de984..cf13d3afc 100644 --- a/.github/workflows/triage-issues.yml +++ b/.github/workflows/triage-issues.yml @@ -4,20 +4,19 @@ name: Close stale issues and PRs -on: +on: workflow_dispatch: schedule: - - cron: '0 0 * * 1' - -permissions: - issues: write - pull-requests: write + - cron: "0 0 * * 1" jobs: stale: runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write steps: - - uses: actions/stale@v9.1.0 + - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1 with: days-before-issue-stale: 30 days-before-issue-close: 10 @@ -31,4 +30,3 @@ jobs: remove-stale-when-updated: true enable-statistics: true operations-per-run: 60 - diff --git a/README.md b/README.md index dceff689d..2d0638e7d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

- CI Build + Tests Codecov @@ -12,13 +12,13 @@ PyPI - Version Python Versions - + Documentation

The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit for your needs. This SDK offers a corresponding package for each of Slack’s APIs. They are small and powerful when used independently, and work seamlessly when used together, too. -**Comprehensive documentation on using the Slack Python can be found at [https://tools.slack.dev/python-slack-sdk/](https://tools.slack.dev/python-slack-sdk/)** +**Comprehensive documentation on using the Slack Python can be found at [https://docs.slack.dev/tools/python-slack-sdk/](https://docs.slack.dev/tools/python-slack-sdk/)** --- @@ -27,20 +27,20 @@ Whether you're building a custom app for your team, or integrating a third party The **Python Slack SDK** allows interaction with: - `slack_sdk.web`: for calling the [Web API methods][api-methods] -- `slack_sdk.webhook`: for utilizing the [Incoming Webhooks](https://api.slack.com/messaging/webhooks) and [`response_url`s in payloads](https://api.slack.com/interactivity/handling#message_responses) -- `slack_sdk.signature`: for [verifying incoming requests from the Slack API server](https://api.slack.com/authentication/verifying-requests-from-slack) -- `slack_sdk.socket_mode`: for receiving and sending messages over [Socket Mode](https://api.slack.com/socket-mode) connections -- `slack_sdk.audit_logs`: for utilizing [Audit Logs APIs](https://api.slack.com/admins/audit-logs) -- `slack_sdk.scim`: for utilizing [SCIM APIs](https://api.slack.com/admins/scim) -- `slack_sdk.oauth`: for implementing the [Slack OAuth flow](https://api.slack.com/authentication/oauth-v2) -- `slack_sdk.models`: for constructing [Block Kit](https://api.slack.com/block-kit) UI components using easy-to-use builders +- `slack_sdk.webhook`: for utilizing the [Incoming Webhooks](https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/) and [`response_url`s in payloads](https://docs.slack.dev/interactivity/handling-user-interaction/#message_responses) +- `slack_sdk.signature`: for [verifying incoming requests from the Slack API server](https://docs.slack.dev/authentication/verifying-requests-from-slack/) +- `slack_sdk.socket_mode`: for receiving and sending messages over [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode/) connections +- `slack_sdk.audit_logs`: for utilizing [Audit Logs APIs](https://docs.slack.dev/admins/audit-logs-api/) +- `slack_sdk.scim`: for utilizing [SCIM APIs](https://docs.slack.dev/admins/scim-api/) +- `slack_sdk.oauth`: for implementing the [Slack OAuth flow](https://docs.slack.dev/authentication/installing-with-oauth/) +- `slack_sdk.models`: for constructing [Block Kit](https://docs.slack.dev/block-kit/) UI components using easy-to-use builders - `slack_sdk.rtm`: for utilizing the [RTM API][rtm-docs] -If you want to use our [Events API][events-docs] and Interactivity features, please check the [Bolt for Python][bolt-python] library. Details on the Tokens and Authentication can be found in our [Auth Guide](https://tools.slack.dev/python-slack-sdk/installation/). +If you want to use our [Events API][events-docs] and Interactivity features, please check the [Bolt for Python][bolt-python] library. Details on the Tokens and Authentication can be found in our [Auth Guide](https://docs.slack.dev/tools/python-slack-sdk/installation/). ## slackclient is in maintenance mode -Are you looking for [slackclient](https://pypi.org/project/slackclient/)? The website is live [here](https://tools.slack.dev/python-slackclient/) just like before. However, the slackclient project is in maintenance mode now and this [`slack_sdk`](https://pypi.org/project/slack-sdk/) is the successor. If you have time to make a migration to slack_sdk v3, please follow [our migration guide](https://tools.slack.dev/python-slack-sdk/v3-migration/) to ensure your app continues working after updating. +Are you looking for [slackclient](https://pypi.org/project/slackclient/)? The slackclient project is in maintenance mode now and this [`slack_sdk`](https://pypi.org/project/slack-sdk/) is the successor. If you have time to make a migration to slack_sdk v3, please follow [our migration guide](https://docs.slack.dev/tools/python-slack-sdk/v3-migration/) to ensure your app continues working after updating. ## Table of contents @@ -66,7 +66,7 @@ Are you looking for [slackclient](https://pypi.org/project/slackclient/)? The we --- -This library requires Python 3.6 and above. If you require Python 2, please use our [SlackClient - v1.x][slackclientv1]. If you're unsure how to check what version of Python you're on, you can check it using the following: +This library requires Python 3.7 and above. If you're unsure how to check what version of Python you're on, you can check it using the following: > **Note:** You may need to use `python3` before your commands to ensure you use the correct Python path. e.g. `python3 --version` @@ -98,7 +98,7 @@ We've created this [tutorial](https://github.com/slackapi/python-slack-sdk/tree/ --- -Slack provide a Web API that gives you the ability to build applications that interact with Slack in a variety of ways. This Development Kit is a module based wrapper that makes interaction with that API easier. We have a basic example here with some of the more common uses but a full list of the available methods are available [here][api-methods]. More detailed examples can be found in [our guide](https://tools.slack.dev/python-slack-sdk/web/). +Slack provide a Web API that gives you the ability to build applications that interact with Slack in a variety of ways. This Development Kit is a module based wrapper that makes interaction with that API easier. We have a basic example here with some of the more common uses but a full list of the available methods are available [here][api-methods]. More detailed examples can be found in [our guide](https://docs.slack.dev/tools/python-slack-sdk/web/). #### Sending a message to Slack @@ -267,7 +267,7 @@ print(response) If you're migrating from slackclient v2.x of slack_sdk to v3.x, Please follow our migration guide to ensure your app continues working after updating. -**[Check out the Migration Guide here!](https://tools.slack.dev/python-slack-sdk/v3-migration/)** +**[Check out the Migration Guide here!](https://docs.slack.dev/tools/python-slack-sdk/v3-migration/)** ### Migrating from v1 @@ -293,12 +293,13 @@ helpful and collaborative way. [slackclientv1]: https://github.com/slackapi/python-slackclient/tree/v1 -[api-methods]: https://api.slack.com/methods -[rtm-docs]: https://api.slack.com/rtm -[events-docs]: https://api.slack.com/events-api +[api-methods]: https://docs.slack.dev/reference/methods +[rtm-docs]: https://docs.slack.dev/legacy/legacy-rtm-api/ +[events-docs]: https://docs.slack.dev/apis/events-api/ [bolt-python]: https://github.com/slackapi/bolt-python [pypi]: https://pypi.org/ [gh-issues]: https://github.com/slackapi/python-slack-sdk/issues [slack-community]: https://slackcommunity.com/ [files_upload_v2]: https://github.com/slackapi/python-slack-sdk/releases/tag/v3.19.0 [aiohttp]: https://aiohttp.readthedocs.io/ + diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 53a1610fd..000000000 --- a/docs/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -.docusaurus -build \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index ddfb095c0..000000000 --- a/docs/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# tools.slack.dev/python-slack-sdk - -This website is built using [Docusaurus](https://docusaurus.io/). 'Tis cool. - -Each Bolt/SDK has its own Docusaurus website, with matching CSS and nav/footer. There is also be a Docusaurus website of just the homepage and community tools. - -``` -docs/ -β”œβ”€β”€ content/ (the good stuff. md/mdx files supported) -β”‚ β”œβ”€β”€ rtm.md -β”‚ └── oauth.md -β”œβ”€β”€ static/ -β”‚ β”œβ”€β”€ api_docs/ (generated reference docs) -β”‚ β”‚ └── slack_sdk/ -β”‚ β”‚ β”‚ └── index.html -β”‚ β”œβ”€β”€ css/ -β”‚ β”‚ └── custom.css (the css for everything!) -β”‚ └── img/ (the pictures for the site) -β”‚ β”œβ”€β”€ rory.png -β”‚ └── oslo.svg -β”œβ”€β”€ src/ -β”‚ └── theme (only contains the 404 page) -β”œβ”€β”€ docusaurus.config.js (main config file) -β”œβ”€β”€ footerConfig.js (footer. go to main repo to change) -β”œβ”€β”€ navbarConfig.js (navbar. go to main repo to change) -└── sidebar.js (manually set where the content docs are in the sidebar.) -``` - -A cheat-sheet: -* _I want to edit a doc._ `docs/*/*.md` -* _I want to change the docs sidebar._ `sidebar.js` -* _I want to change the css._ Don't use this repo, use the home repo and the changes will propagate here. -* _I want to change anything else._ `docusaurus.config.js` - ----- - -## Adding a doc - -1. Make a markdown file. Add a `# Title` or use [front matter](https://docusaurus.io/docs/next/create-doc) with `title:`. -2. Save it in `docs/folder/title.md` or `docs/title.md`, depending on if it's in a sidebar category. The nuance is just for internal organization. -3. Add the doc's path to the sidebar within `docusaurus.config.js`. Where ever makes most sense for you. -4. Test the changes ↓ - ---- - -## Running locally - -Docusaurus requires at least Node 18. You can update Node however you want. `nvm` is one way. - -Install `nvm` if you don't have it: - -``` -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash -``` - -Then grab the latest version of Node. - -``` -nvm install node -``` - - -If you are running this project locally for the first time, you'll need to install the packages with the following command: - -``` -npm install -``` - -The following command starts a local development server and opens up a browser window. - -``` -npm run start -``` - -Edits to pages are reflected live β€” no restarting the server or reloading the page. (I'd say... 95% of the time, and 100% time if you're just editing a markdown file). FYI: The generated reference docs only load on build! - -Remember β€” you're only viewing the Python Slack SDK docs right now. ---- - -## Deploying - -The following command generates static content into the `build` directory. - -``` -$ npm run build -``` - -Then you can test out with the following command: - -``` -npm run serve -``` - -If it looks good, make a PR request! - -### Deployment to GitHub pages - -There is a GitHub action workflow set up in each repo. - -* On PR, it tests a site build. -* On Merge, it builds the site and deploys it. Site should update in a minute or two. - ---- - -## Something's broken - -Luke goofed. Open an issue please! `:bufo-appreciates-the-insight:` \ No newline at end of file diff --git a/docs/babel.config.js b/docs/babel.config.js deleted file mode 100644 index e00595dae..000000000 --- a/docs/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/docs/content/index.md b/docs/content/index.md deleted file mode 100644 index 94b8de33b..000000000 --- a/docs/content/index.md +++ /dev/null @@ -1,36 +0,0 @@ -# Python Slack SDK - -The Slack Python SDK has corresponding package for Slack APIs. They are small and powerful when used independently, and work seamlessly when used together, too. - -The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit for your needs. - -## Features - -| Feature | Use | Package | -|--------------------------------|----------|-------| -| Web API | Send data to or query data from Slack using any of over 200 methods. | ``slack_sdk.web``, ``slack_sdk.web.async_client`` | -| Webhooks / `response_url` | Send a message using Incoming Webhooks or `response_url` | ``slack_sdk.webhook``, ``slack_sdk.webhook.async_client`` | -| Socket Mode | Receive and send messages over Socket Mode connections. | ``slack_sdk.socket_mode`` | -| OAuth | Setup the authentication flow using V2 OAuth, OpenID Connect for Slack apps. | ``slack_sdk.oauth`` | -| Audit Logs API | Receive audit logs API data. | ``slack_sdk.audit_logs`` | -| SCIM API | Utilize the SCIM APIs for provisioning and managing user accounts and groups. | ``slack_sdk.scim`` | -| RTM API | Listen for incoming messages and a limited set of events happening in Slack, using WebSocket. | ``slack_sdk.rtm_v2`` | -| Request Signature Verification | Verify incoming requests from the Slack API servers. | ``slack_sdk.signature`` | -| UI Builders | Construct UI components using easy-to-use builders. | ``slack_sdk.models`` | - -You can also view the [Python module documents](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/)! - -## Getting help - -These docs have lots of information on the Python Slack SDK. There's also an in-depth Reference section. Please explore! - -If you otherwise get stuck, we're here to help. The following are the best ways to get assistance working through your issue: - -* [Issue Tracker](http://github.com/slackapi/python-slack-sdk/issues) for questions, bug reports, feature requests, and general discussion related to the Python Slack SDK. Try searching for an existing issue before creating a new one. -* [Email](mailto:support@slack.com) our developer support team: `support@slack.com`. - -## Contributing - -These docs live within the [Python Slack SDK](https://github.com/slackapi/python-slack-sdk) repository and are open source. - -We welcome contributions from everyone! Please check out our [Contributor's Guide](https://github.com/slackapi/python-slack-sdk/blob/main/.github/contributing.md) for how to contribute in a helpful and collaborative way. \ No newline at end of file diff --git a/docs/content/installation.md b/docs/content/installation.md deleted file mode 100644 index 6c6b41e2b..000000000 --- a/docs/content/installation.md +++ /dev/null @@ -1,250 +0,0 @@ -# Installation - -This package supports Python 3.6 and higher. We recommend using [PyPI](https://pypi.python.org/pypi) to install. Run the following command: - -``` bash -pip install slack_sdk -``` - -Alternatively, you can always pull the source code directly into your -project: - -``` bash -git clone https://github.com/slackapi/python-slack-sdk.git -cd python-slack-sdk -python3 -m venv .venv -source .venv/bin/activate -pip install -U pip -pip install -e . # install the SDK project into the virtual env -``` - -Create a `./test.py` file with the following: - -``` python title="test.py" -# test.py -import sys -# Enable debug logging -import logging -logging.basicConfig(level=logging.DEBUG) -# Verify it works -from slack_sdk import WebClient -client = WebClient() -api_response = client.api_test() -``` - -Then, run the script: - -``` bash -python test.py -``` - -It's also good to try on the Python REPL. - -## Access Tokens {#handling-tokens} - -**Always keep your access tokens safe.** - -The OAuth token you use to call the Slack API has access to the data on -the workspace where it is installed. - -Depending on the scopes granted to the token, it potentially has the -ability to read and write data. Treat these tokens just as you would a -password β€” don't publish them, don't check them into source code, and -don't share them with others. - - -:::danger - -Never do the following: - -``` python -token = 'xoxb-111-222-xxxxx' -``` - -::: - -We recommend you pass tokens in as environment variables, or persist -them in a database that is accessed at runtime. You can add a token to -the environment by starting your app as: - -``` python -SLACK_BOT_TOKEN="xoxb-111-222-xxxxx" python myapp.py -``` - -Then retrieve the key with: - -``` python -import os -SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] -``` - -For additional information, please see the [Safely Storing -Credentials](https://api.slack.com/authentication/best-practices) page within the Slack API docs. - -## Workspace Installations - -### Single Workspace Install - -If you're building an application for a single Slack workspace, -there's no need to build out the entire OAuth flow. - -Once you've setup your features, click on the **Install App to Team** -button found on the **Install App** page. If you add new permission -scopes or Slack app features after an app has been installed, you must -reinstall the app to your workspace for changes to take effect. - -## Multiple Workspace Install - -If you intend for an app to be installed on multiple Slack workspaces, -you will need to handle this installation via the industry-standard -OAuth protocol. You can read more about [how Slack handles -Oauth](https://api.slack.com/authentication/oauth-v2). - -(The OAuth exchange is facilitated via HTTP and requires a webserver; in -this example, we'll use [Flask](https://flask.palletsprojects.com/).) - -To configure your app for OAuth, you'll need a client ID, a client -secret, and a set of one or more scopes that will be applied to the -token once it is granted. The client ID and client secret are available -from your [app's configuration page](https://api.slack.com/apps). The -scopes are determined by the functionality of the app β€” every method -you wish to access has a corresponding scope and your app will need to -request that scope in order to be able to access the method. Review the [full list of Slack OAuth scopes](https://api.slack.com/scopes). - -``` python -import os -from slack_sdk import WebClient -from flask import Flask, request - -client_id = os.environ["SLACK_CLIENT_ID"] -client_secret = os.environ["SLACK_CLIENT_SECRET"] -oauth_scope = os.environ["SLACK_SCOPES"] - -app = Flask(__name__) -``` - -### The OAuth initiation link - -To begin the OAuth flow that will install your app on a workspace, -you'll need to provide the user with a link to the Slack OAuth page. -This can be a simple link to `https://slack.com/oauth/v2/authorize` with -`scope` and `client_id` query parameters, or you can use our pre-built -[Add to Slack button](https://api.slack.com/docs/slack-button) to do all -the work for you. - -This link directs the user to the Slack OAuth acceptance page, where the -user will review and accept or refuse the permissions your app is -requesting as defined by the scope(s). - -``` python -@app.route("/slack/install", methods=["GET"]) -def pre_install(): - state = "randomly-generated-one-time-value" - return '' \ - 'Add to Slack' -``` - -### The OAuth completion page - -Once the user has agreed to the permissions you've requested, Slack -will redirect the user to your auth completion page, which includes a -`code` query string param. You'll use the `code` param to call the -`oauth.v2.access` -[endpoint](https://api.slack.com/methods/oauth.v2.access) that will -finally grant you the token. - -``` python -@app.route("/slack/oauth_redirect", methods=["GET"]) -def post_install(): - # Verify the "state" parameter - - # Retrieve the auth code from the request params - code_param = request.args['code'] - - # An empty string is a valid token for this request - client = WebClient() - - # Request the auth tokens from Slack - response = client.oauth_v2_access( - client_id=client_id, - client_secret=client_secret, - code=code_param - ) -``` - -A successful request to `oauth.v2.access` will yield a JSON payload with -at least one token, a bot token that begins with `xoxb`. - -``` python -@app.route("/slack/oauth_redirect", methods=["GET"]) -def post_install(): - # Verify the "state" parameter - - # Retrieve the auth code from the request params - code_param = request.args['code'] - - # An empty string is a valid token for this request - client = WebClient() - - # Request the auth tokens from Slack - response = client.oauth_v2_access( - client_id=client_id, - client_secret=client_secret, - code=code_param - ) - print(response) - - # Save the bot token to an environmental variable or to your data store - # for later use - os.environ["SLACK_BOT_TOKEN"] = response['access_token'] - - # Don't forget to let the user know that OAuth has succeeded! - return "Installation is completed!" - -if __name__ == "__main__": - app.run("localhost", 3000) -``` - -Once your user has completed the OAuth flow, you'll be able to use the -provided tokens to call any of the Slack API methods that require an -access token. - -## Installation Troubleshooting - -We recommend using [virtualenv -(venv)](https://docs.python.org/3/tutorial/venv.html) to set up your -Python runtime. - -``` bash -# Create a dedicated virtual env for running your Python scripts -python -m venv .venv - -# Run .venv\Scripts\activate on Windows OS -source .venv/bin/activate - -# Install slack_sdk PyPI package -pip install "slack_sdk>=3.0" - -# Set your token as an env variable (`set` command for Windows OS) -export SLACK_BOT_TOKEN=xoxb-*** -``` - -Then, verify the following code works on the Python REPL (you can start -it by just `python`). - -``` python -import os -import logging -from slack_sdk import WebClient -logging.basicConfig(level=logging.DEBUG) -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -res = client.api_test() -``` - -As the `slack` package is deprecated, we recommend switching to `slack_sdk` -package. That being said, the code you're working on may be still using -the old package. If you encounter an error saying -`AttributeError: module 'slack' has no attribute 'WebClient'`, run -`pip list`. If you find both `slack_sdk` and `slack` in the output, try -removing `slack` by `pip uninstall slack` and reinstalling `slack_sdk`. \ No newline at end of file diff --git a/docs/content/legacy/auth.md b/docs/content/legacy/auth.md deleted file mode 100644 index 567fd6a38..000000000 --- a/docs/content/legacy/auth.md +++ /dev/null @@ -1,174 +0,0 @@ -# Tokens & Installation - -:::danger - -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. - -::: - -## Keeping tokens safe {#handling-tokens} - -The OAuth token you use to call the Slack API has access to the data on -the workspace where it is installed. Depending on the scopes granted to -the token, it potentially has the ability to read and write data. Treat -these tokens just as you would a password β€” don't publish them, -don't check them into source code, don't share them with others. - -🚫Avoid this: - -``` python -token = 'xoxb-111-222-xxxxx' -``` - -We recommend you pass tokens in as environment variables, or persist -them in a database that is accessed at runtime. You can add a token to -the environment by starting your app as: - -``` python -SLACK_BOT_TOKEN="xoxb-111-222-xxxxx" python myapp.py -``` - -Then retrieve the key with: - -``` python -import os -SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] -``` - -For additional information, please see our [Safely Storing -Credentials](https://api.slack.com/authentication/best-practices) page. - -## Single Workspace Install - -If you're building an application for a single Slack workspace, -there's no need to build out the entire OAuth flow. - -Once you've setup your features, click on the **Install App to Team** -button found on the **Install App** page. If you add new permission -scopes or Slack app features after an app has been installed, you must -reinstall the app to your workspace for changes to take effect. - -For additional information, see the [Installing -Apps](https://api.slack.com/start/overview#installing_distributing) of -our [Building Slack apps](https://api.slack.com/start) page. - -## Multiple Workspace Install - -If you intend for an app to be installed on multiple Slack workspaces, -you will need to handle this installation via the industry-standard -OAuth protocol. You can read more about [how Slack handles -Oauth](https://api.slack.com/authentication/oauth-v2). - -(The OAuth exchange is facilitated via HTTP and requires a webserver; in -this example, we'll use [Flask](https://flask.palletsprojects.com/).) - -To configure your app for OAuth, you'll need a client ID, a client -secret, and a set of one or more scopes that will be applied to the -token once it is granted. The client ID and client secret are available -from your [app's configuration page](https://api.slack.com/apps). The -scopes are determined by the functionality of the app β€” every method -you wish to access has a corresponding scope and your app will need to -request that scope in order to be able to access the method. Review -the [full list of Slack OAuth scopes](https://api.slack.com/scopes). - -``` python -import os -from slack import WebClient -from flask import Flask, request - -client_id = os.environ["SLACK_CLIENT_ID"] -client_secret = os.environ["SLACK_CLIENT_SECRET"] -oauth_scope = os.environ["SLACK_SCOPES"] - -app = Flask(__name__) -``` - -**The OAuth initiation link** - -To begin the OAuth flow that will install your app on a workspace, -you'll need to provide the user with a link to the Slack OAuth page. -This can be a simple link to `https://slack.com/oauth/v2/authorize` with -`scope` and `client_id` query parameters, or you can use our pre-built -[Add to Slack button](https://api.slack.com/docs/slack-button) to do all -the work for you. - -This link directs the user to the Slack OAuth acceptance page, where the -user will review and accept or refuse the permissions your app is -requesting as defined by the scope(s). - -``` python -@app.route("/slack/install", methods=["GET"]) -def pre_install(): - state = "randomly-generated-one-time-value" - return '' \ - 'Add to Slack' -``` - -**The OAuth completion page** - -Once the user has agreed to the permissions you've requested, Slack -will redirect the user to your auth completion page, which includes a -`code` query string param. You'll use the `code` param to call the -`oauth.v2.access` -[endpoint](https://api.slack.com/methods/oauth.v2.access) that will -finally grant you the token. - -``` python -@app.route("/slack/oauth_redirect", methods=["GET"]) -def post_install(): - # Verify the "state" parameter - - # Retrieve the auth code from the request params - code_param = request.args['code'] - - # An empty string is a valid token for this request - client = WebClient() - - # Request the auth tokens from Slack - response = client.oauth_v2_access( - client_id=client_id, - client_secret=client_secret, - code=code_param - ) -``` - -A successful request to `oauth.v2.access` will yield a JSON payload with -at least one token, a bot token that begins with `xoxb`. - -``` python -@app.route("/slack/oauth_redirect", methods=["GET"]) -def post_install(): - # Verify the "state" parameter - - # Retrieve the auth code from the request params - code_param = request.args['code'] - - # An empty string is a valid token for this request - client = WebClient() - - # Request the auth tokens from Slack - response = client.oauth_v2_access( - client_id=client_id, - client_secret=client_secret, - code=code_param - ) - print(response) - - # Save the bot token to an environmental variable or to your data store - # for later use - os.environ["SLACK_BOT_TOKEN"] = response['access_token'] - - # Don't forget to let the user know that OAuth has succeeded! - return "Installation is completed!" - -if __name__ == "__main__": - app.run("localhost", 3000) -``` - -Once your user has completed the OAuth flow, you'll be able to use the -provided tokens to call any of the Slack API methods that require an -access token. - -See the [Basic Usage](/legacy/basic_usage) section of the documentation -for usage examples. diff --git a/docs/content/legacy/changelog.md b/docs/content/legacy/changelog.md deleted file mode 100644 index a063bc01a..000000000 --- a/docs/content/legacy/changelog.md +++ /dev/null @@ -1,553 +0,0 @@ -# Changelog - -## v3.0.0 (2020-11-09) - -This is the first stable version of [slack_sdk](https://pypi.org/project/slack-sdk/) v3. The remarkable updates in this major version are: - -- Newly added OAuth flow support -- Better Async/sync separation for `WebClient` and `WebhookClient` -- Renamed packages (from `slack` to `slack_sdk`) with deprecation - warnings - -Refer to [v3.0.0 milestone](https://github.com/slackapi/python-slack-sdk/milestone/10?closed=1) -and [the website](https://tools.slack.dev/python-slack-sdk/) for details. If you're a `slackclient` user, the migration guide for `slackclient` v2.x users is available at https://tools.slack.dev/python-slack-sdk/v3-migration/ - -## v2.9.3 (2020-10-20) - -Refer to [v2.9.3 -milestone](https://github.com/slackapi/python-slackclient/milestone/20?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[Block Kit\] #851 #852 Set default_type for HeaderBlock text - - Thanks \@fwump38 -2. \[Block Kit\] #853 #854 Enable to use input blocks in Home tab - views - Thanks \@fwump38 -3. \[RTMClient\] #857 #846 RTMClient does not pass timeout value to - WebClient - Thanks \@Luden \@seratch - -## v2.9.2 (2020-10-09) - -Refer to [v2.9.2 -milestone](https://github.com/slackapi/python-slackclient/milestone/19?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[Block Kit\] #841 Dispatch Action in Input blocks - Thanks - \@seratch -2. \[WebClient\] #838 Add apps.event.authorizations.list and other - APIs - Thanks \@seratch -3. \[WebClient\]\[WebhookClient\] #829 Improve error body parser to - handle no charset responses - Thanks \@adamchainz \@seratch -4. \[Block Kit\] #824 Correct text field validation in Header blocks - - Thanks \@seratch - -## v2.9.1 (2020-09-23) - -Refer to [v2.9.1 -milestone](https://github.com/slackapi/python-slackclient/milestone/18?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[WebClient\]\[WebhookClient\] #820 #821 #822 The proxy option in - WebClient/WebhookClient no longer works - Thanks \@seratch - -## v2.9.0 (2020-09-17) - -Refer to [v2.9.0 -milestone](https://github.com/slackapi/python-slackclient/milestone/17?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[WebClient\] #811 Add workflows.\* API support - Thanks \@misscoded -2. \[WebClient\] #810 #809 Only set default filename in files_upload if - file is an instance of str - Thanks \@csaska - -## v2.8.2 (2020-09-04) - -Refer to [v2.8.2 -milestone](https://github.com/slackapi/python-slackclient/milestone/16?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[WebClient\] #795 #794 Add admin.conversations.\* API methods in - WebClient/AsyncWebClient - Thanks \@ruberVulpes -2. \[WebClient\] #796 Fix a link to the Static options documentation - - Thanks \@Jamim - -## v2.8.1 (2020-08-28) - -Refer to [v2.8.1 -milestone](https://github.com/slackapi/python-slackclient/milestone/15?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[WebClient\] #778 #779 Adding support for View objects for - views.push/update/publish - Thanks \@ruberVulpes -2. \[WebClient\] #786 Fix admin.conversations.restrictAccess.\* methods - to match documentation - Thanks \@ruberVulpes - -## v2.8.0 (2020-08-06) - -Refer to [v2.8.0 -milestone](https://github.com/slackapi/python-slackclient/milestone/14?closed=1) -to know the complete list of the issues resolved by this release. - -**New Features** - -1. \[WebClient\] #765 #766 Introduce AsyncWebClient/AsyncWebhookClient - providing coroutines - Thanks \@seratch -2. \[Block Kit\] #767 #768 Add \"header\" block support - Thanks - \@mwbrooks - -**Updates** - -1. \[WebClient\] #738 Add HTTP_PROXY, HTTPS_PROXY env variable support - in async WebClient - Thanks \@iamtofr \@seratch -2. \[WebClient\] #769 #773 Enable User-Agent to have additional info - part - Thanks \@seratch -3. \[WebClient\] #770 #771 Fix a bug where `files.upload`\'s file param - doesn\'t accept bytes data - Thanks \@seratch - -## v2.7.3 (2020-07-20) - -Refer to [v2.7.3 -milestone](https://github.com/slackapi/python-slackclient/milestone/13?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[WebClient\] #754 Fix #729 Add - admin.conversations.restrictAccess.\*, conversations.mark API - - Thanks \@ruberVulpes \@kian2attari -2. \[WebClient\] #758 Fix #757 Add admin.usergroups.addTeams, - calls.participants.remove API - Thanks \@seratch -3. \[WebClient\] #727 Fix #645 Unclosed client session - Thanks - \@NoAnyLove \@jourdanrodrigues -4. \[WebClient\] #745 Fix #744 a validation logic bug in - DatePickerElement - Thanks \@dzudi941 -5. \[WebClient\] #752 Fix #733 Better error handling when getting - TimeoutError in RTMClient#start() - Thanks \@liorblob \@seratch -6. \[WebClient\] #751 Fix #718 by handling unexpected response body - format - Thanks \@jeffbuswell \@seratch - -## v2.7.2 (2020-06-23) - -Refer to [v2.7.2 -milestone](https://github.com/slackapi/python-slackclient/milestone/12?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[WebClient\] Fix #728 by adding bytearray support in files_upload - (sync mode) - Thanks \@sofya-salmanova \@seratch -2. \[WebClient\] #726 Fix InputBlock.hint validation failure - Thanks - \@jourdanrodrigues -3. \[WebClient\] #723 Correct the default value of InputBlock.label, - hint - Thanks \@jourdanrodrigues - -## v2.7.1 (2020-06-04) - -This release includes the fixes for regression bugs in -`WebClient` since v2.6.0. Refer to [v2.7.1 -milestone](https://github.com/slackapi/python-slackclient/milestone/11?closed=1) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[WebClient\] #716 #712 Support timeout in sync sync web clients - - Thanks \@DanialErfanian \@seratch -2. \[WebClient\] #713 Support custom SSL context in sync sync web - clients - Thanks \@austinbutler -3. \[WebClient\] #715 #714 Support proxy in sync sync web clients - - Thanks \@austinbutler \@seratch - -## v2.7.0 (2020-06-02) - -Refer to [v2.7.0 -milestone](https://github.com/slackapi/python-slackclient/milestone/6?closed=1) -to know the complete list of the issues resolved by this release. - -**New Features** - -1. \[WebhookClient\] #707 #270 #531 Add `WebhookClient` for - Incoming Webhooks & response_url - Thanks \@seratch \@chubz - \@Ambro17 - -**Updates** - -1. \[WebClient\] #704 #695 Add `calls\_\*` methods to - `WebClient` and `CallBlock` in Block Kit - classes - Thanks \@seratch -2. \[WebClient\] #710 #536 Allow Tokens to be specified per request - - Thanks \@seratch -3. \[WebClient\] #709 #708 Add default_to_current_conversation in - conversations_select elements - Thanks \@seratch - -## v2.6.2 (2020-05-28) - -Refer to [v2.6.2 -milestone](https://github.com/slackapi/python-slackclient/milestone/9?closed=1) -to know the complete details of this release. - -**Updates** - -1. \[WebClient\] #705 WebClient\'s paginated API calls may fail with no - params - Thanks \@seratch - -## v2.6.1 (2020-05-24) - -This patch release is a quick fix for #701, a major issue that affected -RTMClient users in v2.6.0. The malfunction was introduced by #667 trying -to address #558 #619. Those issues were reopened and will be resolved by -another approach. Refer to [v2.6.1 -milestone](https://github.com/slackapi/python-slackclient/milestone/8) -to know the complete list of the issues resolved by this release. - -**Updates** - -1. \[RTMClient\] #701 RTMClient drops some messages when they come in - rapid succession - Thanks \@pbrackin \@seratch - -## v2.6.0 (2020-05-21) - -Refer to [v2.6.0 -milestone](https://github.com/slackapi/python-slackclient/milestone/5?closed=1) -to know the complete list of the issues resolved by this release. - -**New Features** - -1. \[Block Kit\] #659 Add complete supports for Block Kit components - and fixed a few existing bugs as well (#500 #519 #623 #632 #635 #639 - #676 #699) - Thanks \@seratch \@diurnalist \@ruberVulpes - \@jeremyschulman \@e271828- \@RodneyU215 -2. \[Signature\] #686 Add slack.signature.SignatureVerifier for request - verification - Thanks \@seratch -3. \[WebClient\] #682 Add missing Grid admin APIs - (`admin.usergroups.\*`, `admin.users.\*`, - `admin.apps.\*`) - Thanks \@stevengill \@seratch - -**Updates** - -1. \[WebClient\]\[RTMClient\] Fixed a bunch of the currency issues this - SDK had (#429 #463 #492 #497 #530 #569 #605 #613 #626 #630 #631 #633 - #669) - Thanks \@seratch \@aaguilartablada \@aoberoi \@stevengill - \@marshallino16 -2. \[WebClient\] #681 #560 Enable using bool values for request - parameters - Thanks \@roman-kachanovsky \@seratch -3. \[WebClient\] #661 #678 Improve handling of required \"ids\" - parameters (e.g., channel_ids, users) - Thanks \@seratch -4. \[WebClient\] #680 Add non-conversation API deprecation warnings - - Thanks \@seratch -5. \[WebClient\] #671 #670 Enable passing None values for request - parameters (they used to result in errors) - Thanks \@yuji38kwmt - \@seratch -6. \[WebClient\] #673 Fix #672 files.upload fails with a filepath - containing multi byte chars - Thanks \@yuji38kwmt \@seratch -7. \[WebClient\] #656 Fix #594 preview_image for files.remote.add API - method is not properly supported - Thanks \@Eothred \@seratch -8. \[Maintenance\] #618 Add py.typed file to package distribution - - Thanks \@JKillian -9. \[WebClient\] #599 Strip token string parameters of whitespace - - Thanks \@TheFrozenFire -10. \[WebClient\] #692 Fix superfluous_charset warnings since v2.4.0 - - Thanks \@seratch -11. \[WebClient\] #652 Update oauth_v2_access to include redirect_uri - (as optional) - Thanks \@tomasreimers - -## v2.5.0 (2019-12-09) - -**New Features** - -1. \[WebClient\] Adding new oauth.v2.access Web API method. #577 - -## v2.4.0 (2019-11-27) - -**New Features** - -1. \[WebClient\] Adding new admin.\* Web API methods. #571 - -**Updates** 1. \[WebClient\] We\'re no longer validating token types for -Web API methods. Improves compatibility with granular bot permissions. -#568 (Thanks \@Smotko) 2. \[WebClient\] Correcting typos in descriptions -#554 (Thanks \@phamk) 3. \[WebClient\] Fixed \'iteracting\' typo in -library file headers #564 (Thanks \@acabey) 4. \[Message Builders\] -Remove value from LinkButtonElement #563 (Thanks \@pedroma) - -## v2.3.1 (2019-10-29) - -**Updates** - -1. \[WebClient\] Fixing a regression that causes the client to close - sessions prematurely. #544 (Thanks \@fatih-acar!) -2. \[WebClient\] Adding required missing view param to - views.update Web API method. #542 - -## v2.3.0 (2019-10-22) - -**New Features** - -1. \[WebClient\] Adding new views.publish Web API method. #540 - -**Updates** - -1. \[WebClient\] Some server responses don\'t return json. Correcting - initial assumption. #540 -2. \[Maintenance\] Add `py.typed` to mark the library to - support type hinting #524s - -## v2.2.1 (2019-10-08) - -**Updates** - -1. \[Docs\] Fix Indentation of Code Snippets in README.md #525 (Thanks - \@abhishekjiitr) -2. \[WebClient\] Fix Web Client custom iterator #521 (Thanks - \@smaeda-ks) -3. \[WebClient\] Oauth previously failed to pass along credentials - properly. This is fixed now. #527 -4. \[WebClient\] When a SlackApiError occurs we\'re now passing the - entire SlackResponse into the exception. #527 - -## v2.2.0 (2019-09-25) - -**New Features** - -1. \[WebClient\] Adding new admin and remote files API methods. #501 -2. \[WebClient\] Adding new view API methods. #517 - -**Updates** - -1. \[Message Builders\] Update BlockAttachment to not send invalid JSON - due to fields attribute #473 (Thanks \@paul-griffith) -2. \[Docs\] Add RTM section for docs v2 #477 (Thanks \@shanedewael) -3. \[Docs\] Fix typo; recieved -\> received #478 (Thanks - \@joakimnordling) -4. \[Docs\] Fix block kit link & update docs #484 (Thanks \@clavin) -5. \[RTMClient\] Return callback from `RTMClient.run_on` - #490 (Thanks \@clavin) -6. \[Docs\] Fix link to Auth Guide in readme #498 (Thanks \@asherf) -7. \[Docs\] Fix missing word and typo #512 (Thanks \@marks) -8. \[Message Builders\] bugfix for value length in button elements #514 - (Thanks \@avanderm) -9. \[Docs\] Fixes formatting #515 (Thanks \@vpetersson) -10. \[Docs\] Improve a code snippet on README #516 (Thanks \@seratch) -11. \[WebClient\] Fixed an OAuth Headers bug and made the - `token` param optional. #517 - -## v2.1.0 (2019-07-01) - -**New Features** - -1. Type-hinted helper classes for building messages in v2 #400 (Thanks - \@paul-griffith) - -**Breaking Changes** - -1. \[RTMClient\] Converted the `RTMClient#typing()` - function to async #446 - -**Updates** - -1. \[RTMClient\] Handle case in which aiohttp closes the websocket due - to lack of ping responses. #453 (Thanks \@flyte) -2. Modify package identifier in user agent to match v1.x identifier - #418 (Thanks \@aoberoi) -3. \[WebClient\] Fixed typo in Scheduled message #428 & #435 (Thanks - \@splinterific) -4. Transform install_requires of \'aiodns\' into extras_require. #440 - (Thanks \@staticdev) - -**Thank you!!** To everyone who\'s opened, commented or reacted to an -issue; this project is better because of you! Thank you for helping the -Slack community! - -## v2.0.0 (2019-04-29) - -[Original -RFC](https://github.com/slackapi/python-slackclient/issues/384) - -[v2 PR](https://github.com/slackapi/python-slackclient/pull/394) - -**New Features** - -1. Client Decomposition: We've split the client into two. - -> a. WebClient: A HTTP client focused on Slack\'s Web API. -> b. RTMClient: A websocket client focused on Slack\'s RTM API. - -2. RTMClient: Completely redesigned, this client allows you to link - your application\'s callbacks to corresponding Slack events. -3. WebClient: The WebClient now provides built-in methods for Slack\'s - Web API. These methods act as helpers enabling you to focus less on - how the request is constructed. Here are a few things that this - provides: - -> a. Basic information about each method through the docstring. -> b. Easy File Uploads: You can now pass in the location of a file and -> the library will handle opening and retrieving the file object to -> be transmitted. -> c. Token type validation: This gives you better error messaging when -> you\'re attempting to consume an api method that your token -> doesn\'t have access to. -> d. Constructs requests using Slack\'s preferred HTTP methods and -> content-types. - -**Breaking Changes:** If you\'re migrating from v1.x of slackclient to -v2.x, Please follow our migration guide to ensure your app continues -working after updating. - -[Check out the Migration Guide -here!](https://github.com/slackapi/python-slackclient/wiki/Migrating-to-2.x) - -**Thank you!** This release would not have been possible without the -support of our community. Thank you to everyone who's contributed to -this release. - -## v1.3.1 (2019-02-28) - -- Lock websocket-client version to \< 0.55.0: temp fix for #385 - -## v1.3.0 (2018-09-11) - -\## New Features - Adds support for short lived tokens and automatic -token refresh #347 (Thanks \@roach!) - -\## Other - update RTM rate limiting comment and error message #308 -(Thanks \@benoitlavigne!) - Use logging instead of traceback #309 -(Thanks \@harlowja!) - Remove Python 3.3 from test environments #346 -(Thanks \@roach!) - Enforced linting when using VSCode. #347 (Thanks -\@roach!) - -## v1.2.1 (2018-03-26) - -- Added rate limit handling for rtm connections (thanks \@jayalane!) - -## v1.2.0 (2018-03-20) - -- You can now tell the RTM client to automatically reconnect by - passing `auto_reconnect=True` - -## v1.1.3 (2018-03-01) - -- Fixed another API param encoding bug. It encodes things properly - now. - -## v1.1.2 (2018-01-31) - -- Fixed an encoding issue which was encoding some Web API params - incorrectly (sorry) - -## v1.1.1 (2018-01-30) - -> - Adds HTTP response headers to `api_call` responses to -> expose things like rate limit info -> - Moves `token` into auth header rather than request -> params - -## v1.1.0 (2017-11-21) - -> - Aadds new SlackClientError and ResponseParseError types to -> describe errors - thanks \@aoberoi! -> - Fix Build Error (#245) - thanks \@stasfilin! -> - include email as user property (#173) - thanks \@acaire! -> - Add http reply into slack login and slack connection error -> (#216) - thanks \@harlowja! -> - Removed unused exception class (#233) -> - Fix rtm_send_message bug (#225) - thanks \@kt5356! -> - Allow use of custom parameters on rtm_connect() (#210) - thanks -> \@kamushadenes! -> - Fix link to rtm.connect docs (#223) - \@sampart! - -## v1.0.9 (2017-08-31) - -> - Fixed rtm_send_message ID bug introduced in 1.0.8 - -## v1.0.8 (2017-08-31) - -> - Added rtm.connect support - -## v1.0.7 (2017-08-02) - -> - Fixes an issue where connecting over RTM to large teams may result -> in "Websocket URL expired" errors -> - A load of packaging improvements - -## v1.0.6 (2017-06-12) - -> - Added proxy support (thanks \@timfeirg!) -> - Tidied up docs (thanks \@schlueter!) -> - Added tox settings for Python 3 testing (thanks \@cclauss!) - -## v1.0.5 (2017-01-23) - -> - Allow RTM Channel.send_message to reply to a thread -> - Index users by ID instead of Name (non-breaking change) -> - Added timeout to api calls. -> - Fixed a typo about token access in auth.rst, thanks \@kelvintaywl! -> - Added Message Threads to the docs - -## v1.0.4 (2016-12-15) - -> - fixed the ability to search for a user by ID - -## v1.0.3 (2016-12-13) - -> - fixed an issue causing RTM connections to fail for large teams - -## v1.0.2 (2016-09-22) - -> - removed unused ping counter -> - fixed contributor guidelines links -> - updated documentation -> - Fix bug preventing API calls requiring a file ID -> - Removes files from api_calls before JSON encoding, so the request -> is properly formatted - -## v1.0.1 (2016-03-25) - -> - fix for \_\_eq\_\_ comparison in channels using \'#\' in channel -> name -> - added copyright info to the LICENSE file - -## v1.0.0 (2016-02-28) - -> - the `api_call` function now returns a decoded JSON object, rather -> than a JSON encoded string -> - some `api_call` calls now call actions on the parent server -> object: -> - `im.open` -> - `mpim.open`, `groups.create`, `groups.createChild` -> - `channels.create`, `channels.join` - -## v0.18.0 (2016-02-21) - -> - Moves to use semver for versioning -> - Adds support for private groups and MPDMs -> - Switches to use requests instead of urllib -> - Gets Travis CI integration working -> - Fixes some formatting issues so the code will work for python 2.6 -> - Cleans up some unused imports, some PEP-8 fixes and a couple bad -> default args fixes - -## v0.17.0 (2016-02-15) - -> - Fixes the server so that it doesn\'t add duplicate users or -> channels to its internal lists, -> https://github.com/slackapi/python-slackclient/commit/0cb4bcd6e887b428e27e8059b6278b86ee661aaa -> - README updates: -> - Updates the URLs pointing to Slack docs for configuring -> authentication, -> https://github.com/slackapi/python-slackclient/commit/7d01515cebc80918a29100b0e4793790eb83e7b9 -> - s/channnels/channels, -> https://github.com/slackapi/python-slackclient/commit/d45285d2f1025899dcd65e259624ee73771f94bb -> - Adds users to the local cache when they join the team, -> https://github.com/slackapi/python-slackclient/commit/f7bb8889580cc34471ba1ddc05afc34d1a5efa23 -> - Fixes urllib py 2/3 compatibility, -> https://github.com/slackapi/python-slackclient/commit/1046cc2375a85a22e94573e2aad954ba7287c886 diff --git a/docs/content/legacy/conversations.md b/docs/content/legacy/conversations.md deleted file mode 100644 index f24652709..000000000 --- a/docs/content/legacy/conversations.md +++ /dev/null @@ -1,172 +0,0 @@ -# Conversations API {#conversations_api} - -:::danger - -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. - -::: - -The Slack Conversations API provides your app with a unified interface to work with all the channel-like things encountered in Slack; public channels, private channels, direct messages, group direct messages, and our newest channel type, Shared Channels. - -See [Conversations API](https://api.slack.com/docs/conversations-api) docs for more info. - ------------------------------------------------------------------------- - -## Direct messages - -The `conversations_open` method opens either a 1:1 direct message with a -single user or a a multi-person direct message, depending on the number -of users supplied to the `users` parameter. - -*For public or private channels, use the \`\`conversations_create\`\` -method.* - -Provide a `users` parameter as an array with 1 to 8 user IDs to open or -resume a conversation. Providing only 1 ID will create a direct message. -Providing more will create a new multi-party DM or resume an existing -conversation. - -Subsequent calls to `conversations_open` with the same set of users will -return the already existing conversation. - -``` python -import os -from slack import WebClient - -client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -response = client.conversations_open(users=["W123456789", "U987654321"]) -``` - -See -[conversations.open](https://api.slack.com/methods/conversations.open) -additional info. - ------------------------------------------------------------------------- - -## Creating channels - -Creates a new channel, either public or private. The `name` parameter is -required, may contain numbers, letters, hyphens, and underscores, and -must contain fewer than 80 characters. To make the channel private, set -the option `is_private` parameter to `True`. - -``` python -import os -from slack import WebClient -from time import time - -client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -channel_name = f"my-private-channel-{round(time())}" -response = client.conversations_create( - name=channel_name, - is_private=True -) -channel_id = response["channel"]["id"] -response = client.conversations_archive(channel=channel_id) -``` - -See -[conversations.create](https://api.slack.com/methods/conversations.create) -additional info. - ------------------------------------------------------------------------- - -## Getting more information - -To retrieve a set of metadata about a channel (public, private, DM, or -multi-party DM), use `conversations_info`. The `channel` parameter is -required and must be a valid channel ID. The optional `include_locale` -boolean parameter will return locale data, which may be useful if you -wish to return localized responses. The `include_num_members` boolean -parameter will return the number of people in a channel. - -``` python -import os -from slack import WebClient - -client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -response = client.conversations_info( - channel="C031415926", - include_num_members=1 -) -``` - -See -[conversations.info](https://api.slack.com/methods/conversations.info) -for more info. - ------------------------------------------------------------------------- - -## Listing conversations - -To get a list of all the conversations in a workspace, use -`conversations_list`. By default, only public conversations are -returned; use the `types` parameter specify which types of conversations -you're interested in (Note: `types` is a string of comma-separated -values) - -``` python -import os -from slack import WebClient - -client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -response = client.conversations_list() -conversations = response["channels"] -``` - -Use the `types` parameter to request additional channels, including -`public_channel`, `private_channel`, `mpim`, and `im`. This parameter is -a string of comma-separated values. - -``` python -import os -from slack import WebClient - -client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -response = client.conversations_list( - types="public_channel, private_channel" -) -``` - -See -[conversations.list](https://api.slack.com/methods/conversations.list) -for more info. - ------------------------------------------------------------------------- - -## Leaving a conversation - -To leave a conversation, use `conversations_leave` with the required -`channel` param containing the ID of the channel to leave. - -``` python -import os -from slack import WebClient - -client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -response = client.conversations_leave(channel="C27182818") -``` - -See -[conversations.leave](https://api.slack.com/methods/conversations.leave) -for more info. - ------------------------------------------------------------------------- - -## Getting members - -To get a list of the members of a conversation, use -`conversations_members` with the required `channel` parameter. - -``` python -import os -from slack import WebClient - -client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -response = client.conversations_members(channel="C16180339") -user_ids = response["members"] -``` - -See -[conversations.members](https://api.slack.com/methods/conversations.members) -for more info. diff --git a/docs/content/legacy/faq.md b/docs/content/legacy/faq.md deleted file mode 100644 index 99ebb8757..000000000 --- a/docs/content/legacy/faq.md +++ /dev/null @@ -1,96 +0,0 @@ -# Frequently Asked Questions - -:::danger - -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. - -::: - -## I cannot install `slackclient` - -We recommend using [virtualenv (venv)](https://docs.python.org/3/tutorial/venv.html) to set up your -Python runtime. - -``` bash -# Create a dedicated virtual env for running your Python scripts -python -m venv env - -# Run env\Scripts\activate on Windows OS -source env/bin/activate - -# Install slackclient PyPI package -pip install "slackclient>=2.0" - -# Set your token as an env variable (`set` command for Windows OS) -export SLACK_API_TOKEN=xoxb-*** -``` - -Then, verify the following code works on the Python REPL (you can start -it by just `python`). - -``` python -import os -import logging -from slack import WebClient -logging.basicConfig(level=logging.DEBUG) -client = WebClient(token=os.environ["SLACK_API_TOKEN"]) -res = client.api_test() -``` - -If you encounter an error saying -`AttributeError: module 'slack' has no attribute 'WebClient'`, run -`pip list`. If you find both `slackclient` and `slack` in the output, -try removing `slack` by `pip uninstall slack` and reinstalling -`slackclient`. - -## Should I go with `run_async`? - -For most cases, we recommend going with `run_async=False` mode. So, the -default is `False`. - -If your application turns `run_async` on, the app should follow right -and efficient ways to use -[asyncio](https://docs.python.org/3/library/asyncio.html)'s -non-blocking event loops and -[aiohttp](https://docs.aiohttp.org/en/stable/). Also, consider using -async frameworks and their appropriate runtime. Running event loops -along with Flask or similar may not be a good fit. - -If you have to simultaneously run `WebClient` with `run_async=True` -outside an event loop for some reason, sharing a single `WebClient` -instance doesn't work for you. Create an instance every time you run -the code. The `run_async=False` mode doesn't have such issues. - -## I found a bug! - -That's great! Thank you. Let us know on the Issue Tracker. If -you're feeling particularly ambitious, why not submit a pull request with a bug fix? - -## There's a feature missing! - -There's always something more that could be added! You can let us know -in the Issue Tracker to start a discussion around the proposed -feature, that's a good start. If you're feeling particularly -ambitious, why not write the feature yourself, and submit a pull request! We love feedback and we love help and we don't bite. Much. - -## How do I contribute? - -What an excellent question. First of all, please have a look at our -general contributing guidelines. - -All done? Great! While we're super excited to incorporate your new -feature, there are a couple of things we want to make sure you've given -thought to. - -- Please write unit tests for your new code. But don't **just** aim - to increase the test coverage, rather, we expect you to have written - **thoughtful** tests that ensure your new feature will continue to - work as expected, and to help future contributors to ensure they - don't break it! -- Please document your new feature. Think about **concrete use cases** - for your feature, and add a section to the appropriate document, - including a **complete** sample program that demonstrates your - feature. Don't forget to update the changelog in `changelog.rst`! - -Including these two items with your pull request will totally make our -day---and, more importantly, your future users' days! diff --git a/docs/content/legacy/index.md b/docs/content/legacy/index.md deleted file mode 100644 index 1040eeefa..000000000 --- a/docs/content/legacy/index.md +++ /dev/null @@ -1,70 +0,0 @@ -# Overview - -:::danger - -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, and retry handlers. - -::: - -Refer to [the migration guide](https://tools.slack.dev/python-slack-sdk/v3-migration/index.html#from-slackclient-2-x) to learn how to smoothly migrate your existing code. - -Slack APIs allow anyone to build full featured integrations that extend and expand the capabilities of your Slack workspace. These APIs allow you to build applications that interact with Slack just like the people on your team β€” they can post messages, respond to events that happen β€” as well as build complex UIs for getting work done. - -To make it easier for Python programmers to build Slack applications, we've provided this open source SDK. will let you get started building Python apps as quickly as possible. The current version is built for Python 3.6 and higher β€” if you need to target Python 2.x, you might consider using v1 of the SDK. - -## Slack Platform Basics - -If you're new to the Slack platform, we have a general purpose [guide -for building apps](https://api.slack.com/start) that isn't specific to -any language or framework. Its a great place to learn all about the -concepts that go into building a great Slack app. - -Before you get started building on the Slack platform, you need to [set -up your app's configuration](https://api.slack.com/apps/new). This is -where you define things like your apps permissions and the endpoints -that Slack should use for interacting with the backend you will build -with Python. - -The app configuration page is also where you will acquire the OAuth -token you will use to call Slack APIs. Treat this token with care, -just like you would a password, because it has access to workspace and -can potentially read and write data to and from it. - -## Installation - -We recommend using [PyPI](https://pypi.python.org/pypi) to install - -``` bash -pip install slackclient -``` - -Of course, you can always pull the source code directly into your -project: - -``` bash -git clone https://github.com/slackapi/python-slackclient.git -``` - -And then, save a few lines of code as `./test.py`. - -``` python -# test.py -import sys -# Load the local source directly -sys.path.insert(1, "./python-slackclient") -# Enable debug logging -import logging -logging.basicConfig(level=logging.DEBUG) -# Verify it works -from slack import WebClient -client = WebClient() -api_response = client.api_test() -``` - -You can run the code this way. - -``` bash -python test.py -``` - -It's also good to try on the Python REPL. \ No newline at end of file diff --git a/docs/content/legacy/real_time_messaging.md b/docs/content/legacy/real_time_messaging.md deleted file mode 100644 index e9b53d577..000000000 --- a/docs/content/legacy/real_time_messaging.md +++ /dev/null @@ -1,116 +0,0 @@ -# Real Time Messaging (RTM) {#real-time-messaging} - -:::danger - -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. - -::: - -The [Real Time Messaging (RTM) API](https://api.slack.com/rtm) is a WebSocket-based API that allows you to receive events from Slack in real time and send messages as users. - -If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](https://api.slack.com/events-api) instead. The Events API contains some events that aren't supported in the RTM API (like [app_home_opened event](https://api.slack.com/events/app_home_opened)), and it supports most of the event types in the RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). - -The RTMClient allows apps to communicate with the Slack RTM API. - -The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. - -In our example below, we watch for a [message event](https://api.slack.com/events/message) that contains \"Hello\" and if its received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. - -## Configuring the RTM API - -Events using the RTM API **must** use a classic Slack app (with a plain -`bot` scope). - -If you already have a classic Slack app, you can use those credentials. -If you don't and need to use the RTM API, you can [create a classic -Slack app](https://api.slack.com/apps?new_classic_app=1). You can learn -more in the [API -documentation](https://api.slack.com/authentication/basics#soon). - -Also, even if the Slack app configuration pages encourage you to upgrade -to the newer permission model, don't upgrade it and keep using the -\"classic\" bot permission. - -## Connecting to the RTM API - -``` python -import os -from slack import RTMClient - -@RTMClient.run_on(event="message") -def say_hello(**payload): - data = payload['data'] - web_client = payload['web_client'] - - if 'Hello' in data['text']: - channel_id = data['channel'] - thread_ts = data['ts'] - user = data['user'] # This is not username but user ID (the format is either U*** or W***) - - web_client.chat_postMessage( - channel=channel_id, - text=f"Hi <@{user}>!", - thread_ts=thread_ts - ) - -slack_token = os.environ["SLACK_API_TOKEN"] -rtm_client = RTMClient(token=slack_token) -rtm_client.start() -``` - -## rtm.start vs rtm.connect - -By default, the RTM client uses `rtm.connect` to establish a WebSocket -connection with Slack. The response contains basic information about the -team and WebSocket url. - -If you'd rather use `rtm.start` to establish the connection, which -provides more information about the conversations and users on the team, -you can set the `connect_method` option to `rtm.start` when -instantiating the RTM Client. Note that on larger teams, use of -`rtm.start` can be slow and unreliable. - -``` python -import os -from slack import RTMClient - -@RTMClient.run_on(event="message") -def say_hello(**payload): - data = payload['data'] - web_client = payload['web_client'] - if 'text' in data and 'Hello' in data['text']: - channel_id = data['channel'] - thread_ts = data['ts'] - user = data['user'] # This is not username but user ID (the format is either U*** or W***) - - web_client.chat_postMessage( - channel=channel_id, - text=f"Hi <@{user}>!", - thread_ts=thread_ts - ) - -slack_token = os.environ["SLACK_API_TOKEN"] -rtm_client = RTMClient( - token=slack_token, - connect_method='rtm.start' -) -rtm_client.start() -``` - -Read the [rtm.connect docs](https://api.slack.com/methods/rtm.connect) -and the [rtm.start docs](https://api.slack.com/methods/rtm.start) for -more details. - -## RTM Events - -``` javascript -{ - 'type': 'message', - 'ts': '1358878749.000002', - 'user': 'U023BECGF', - 'text': 'Hello' -} -``` - -See [RTM Events](https://api.slack.com/rtm#events) for a complete list -of events. diff --git a/docs/content/rtm.md b/docs/content/rtm.md deleted file mode 100644 index 7aba8c74b..000000000 --- a/docs/content/rtm.md +++ /dev/null @@ -1,113 +0,0 @@ -# RTM API Client {#real-time-messaging} - -The [Real Time Messaging (RTM) API](https://api.slack.com/rtm) is a WebSocket-based API that allows you to receive events from Slack in real time and send messages as users. - -If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](https://api.slack.com/events-api) along with [Socket Mode](https://api.slack.com/socket-mode) instead. The Events API contains some events that aren't supported in the RTM API (like [app_home_opened event](https://api.slack.com/events/app_home_opened)), and it supports most of the event types in the RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). - -The RTMClient allows apps to communicate with the Slack Platform's RTM API. - -The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. - -In our example below, we watch for a [message event](https://api.slack.com/events/message) that contains \"Hello\" and if its received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. - -## Configuring the RTM API - -Events using the RTM API **must** use a classic Slack app (with a plain -`bot` scope). - -If you already have a classic Slack app, you can use those credentials. -If you don't and need to use the RTM API, you can [create a classic -Slack app](https://api.slack.com/apps?new_classic_app=1). You can learn -more in the [API -documentation](https://api.slack.com/authentication/basics#soon). - -Also, even if the Slack app configuration pages encourage you to upgrade -to the newer permission model, don't upgrade it and keep using the -\"classic\" bot permission. - -## Connecting to the RTM API - -Note that the import here is not `from slack_sdk.rtm import RTMClient` -but `from slack_sdk.rtm_v2 import RTMClient` (`_v2` is added in the -latter one). If you would like to use the legacy version of the client, -go to the next section. - -``` python -import os -from slack_sdk.rtm_v2 import RTMClient - -rtm = RTMClient(token=os.environ["SLACK_BOT_TOKEN"]) - -@rtm.on("message") -def handle(client: RTMClient, event: dict): - if 'Hello' in event['text']: - channel_id = event['channel'] - thread_ts = event['ts'] - user = event['user'] # This is not username but user ID (the format is either U*** or W***) - - client.web_client.chat_postMessage( - channel=channel_id, - text=f"Hi <@{user}>!", - thread_ts=thread_ts - ) - -rtm.start() -``` - -## Connecting to the RTM API (v1 client) - -Below is a code snippet that uses the legacy version of `RTMClient`. For -new app development, we **do not recommend** using it as it contains -issues that have been resolved in v2. Please refer to the [list of these -issues](https://github.com/slackapi/python-slack-sdk/issues?q=is%3Aissue+is%3Aclosed+milestone%3A3.3.0+label%3Artm-client) -for more details. - -``` python -import os -from slack_sdk.rtm import RTMClient - -@RTMClient.run_on(event="message") -def say_hello(**payload): - data = payload['data'] - web_client = payload['web_client'] - - if 'Hello' in data['text']: - channel_id = data['channel'] - thread_ts = data['ts'] - user = data['user'] # This is not username but user ID (the format is either U*** or W***) - - web_client.chat_postMessage( - channel=channel_id, - text=f"Hi <@{user}>!", - thread_ts=thread_ts - ) - -slack_token = os.environ["SLACK_BOT_TOKEN"] -rtm_client = RTMClient(token=slack_token) -rtm_client.start() -``` - -## rtm.start vs rtm.connect (v1 client) - -By default, the RTM client uses `rtm.connect` to establish a WebSocket -connection with Slack. The response contains basic information about the -team and WebSocket url. - -Read the [rtm.connect docs](https://api.slack.com/methods/rtm.connect) -and the [rtm.start docs](https://api.slack.com/methods/rtm.start) for -more details. Also, note that `slack.rtm_v2.RTMClient` does not support -`rtm.start`. - -## RTM Events - -``` javascript -{ - 'type': 'message', - 'ts': '1358878749.000002', - 'user': 'U023BECGF', - 'text': 'Hello' -} -``` - -See [RTM Events](https://api.slack.com/rtm#events) for a complete list -of events. diff --git a/docs/content/v3-migration.md b/docs/content/v3-migration.md deleted file mode 100644 index 08a579264..000000000 --- a/docs/content/v3-migration.md +++ /dev/null @@ -1,247 +0,0 @@ ---- -sidebar_label: Migrating from slackclient ---- - -# Migrating from v2.x to v3.x - -You may still view the legacy `slackclient` v2 [documentation](/legacy/). However, the **slackclient** project is in maintenance mode now and this **slack_sdk** project is the successor. - -## From slackclient 2.x - -There are a few changes introduced in v3.0: - -- The PyPI project is renamed from `slackclient` to `slack_sdk` -- Importing `slack_sdk.*` is recommended. You can still use `slack.*` - with deprecation warnings for a while. -- `slack_sdk` has no required dependencies. This means `aiohttp` is no - longer automatically resolved. -- `WebClient` no longer has `run_async` and `aiohttp` specific - options. If you still need the option or other `aiohttp` specific - options, use `LegacyWebClient` (`slackclient` v2 compatible) or - `AsyncWebClient`. - -We're sorry for the inconvenience. - ------------------------------------------------------------------------- - -**Change:** The PyPI project is renamed from `slackclient` to -`slack_sdk` - -**Action**: Remove `slackclient`, add `slack_sdk` in `requirements.txt` - -Since v3, the PyPI project name is -[slack_sdk](https://pypi.org/project/slack_sdk/) (technically -`slack-sdk` also works). - -The biggest reason for the renaming is the feature coverage in v3 and -newer. The SDK v3 provides not only API clients but also other modules. -As the first step, it starts supporting OAuth flow out-of-the-box. The -secondary reason is to make the names more consistent. The renaming -addresses the long-lived confusion between the PyPI project and package -names. - ------------------------------------------------------------------------- - -**Change:** Importing `slack_sdk.*` is recommended. You can still use -`slack.*` with deprecation warnings for a while. - -**Action**: Replace `from slack import`, `import slack`, and so on in -your source code. - -Most imports can be simply replaced by -`find your_app -name '*.py' | xargs sed -i '' 's/from slack /from slack_sdk /g'` -or something similar. If you use `slack.web.classes.*`, the conversion -is not so simple that we recommend manually replacing imports for those. - -That said, all existing code can be migrated to v3 without any code -changes. If you don't have time for it, you can use `slack` package -with deprecation warnings saying -`UserWarning: slack package is deprecated. Please use slack_sdk.web/webhook/rtm package instead. For more info, go to https://tools.slack.dev/python-slack-sdk/v3-migration/` -for a while. We won't remove the compatibility in the short term. - ------------------------------------------------------------------------- - -**Change:** `slack_sdk` has no required dependencies. This means -`aiohttp` is no longer automatically resolved. - -**Action**: Add `aiohttp` to `requirements.txt` if you use any of -`AsyncWebClient`, `AsyncWebhookClient`, and `LegacyWebClient` - -If you use some modules that require `aiohttp`, your `requirements.txt` -needs to explicitly have `aiohttp`. The `slack_sdk` dependency doesn't -resolve it for you, unlike `slackclient` v2. - ------------------------------------------------------------------------- - -**Change:** `WebClient` no longer has `run_async` and `aiohttp` specific -options. - -**Action:** If you still need the option or other `aiohttp` specific -options, use `LegacyWebClient` (`slackclient` v2 compatible) or -`AsyncWebClient`. - -The new `slack_sdk.web.WebClient` doesn't rely on `aiohttp` internally -at all. The class provides only the synchronous way to call Web APIs. If -you need a v2 compatible one, you can use `LegacyWebClient`. Apart from -the name, there is no breaking change in the class. - -If you're using `run_async=True` option, we highly recommend switching -to `AsyncWebClient`. `AsyncWebClient` is a straight-forward async HTTP -client. You can expect the class properly works in the nature of -`async/await` provided by the standard `asyncio` library. - ---- - -## Migration from v1.x to v2.x - -If you're migrating from v1.x of slackclient to v2.x, here's what you need to change to ensure your app continues working after updating. - -**NOTE**: We have completely rewritten this library and you should only upgrade once you have fully tested it in your development environment. If you don't wish to upgrade yet, be sure to pin your module for the Python slackclient to `1.3.1`. - -### Minimum Python versions -slackclient v2.x requires Python 3.6 (or higher). Support for Python 2.7 will be maintained in the existing slackclient v1.x. - -Client v1 Support Plan: -- Python 2 Timeline: Python 2.7 will continue to be supported in the 1.x version of the client until Dec 31st, 2019. After this time we will immediately end of life our support. -- New Slack features: We’ll continue to add support for any new Slack features that are released as they become available on the Platform. Support for Token Rotation is an example of a Slack feature. -- Client-specific features: We will NOT be adding any new client specific functionality to v1. Support for β€œasynchronous programming” is an example of of a client feature. Another example is storing additional data on the client. -- Bug and security fixes: We’ll be continuing to address bug fixes throughout the remaining lifetime of v1. -- Github Branching: `master` branch is used for v2 code. `v1` branch will be used for v1 code. - -### Import changes ---- - The goal of this project is to provide a set of tools that ease the creation of Python Slack apps. To better align with this goal we’re renaming the main module to `slack`. From `slack` developers can import various tools. -```Python -# Before: -# import slackclient - -# After: -from slack import WebClient -``` - -### RTM API Changes: ---- -An RTMClient allows apps to communicate with the Slack Platform's RTM API. This client allows you to simply link callbacks to their corresponding events. When an event occurs this client executes your callback while passing along any information it receives. - -Example App in v1: -Here's a simple example app that replies "Hi \<@userid\>!" in a thread if you send it a message containing "Hello". -```Python -from slackclient import SlackClient - -slack_token = os.environ["SLACK_API_TOKEN"] -client = SlackClient(slack_token) - -def say_hello(data): - if 'Hello' in data['text']: - channel_id = data['channel'] - thread_ts = data['ts'] - user = data['user'] - - client.api_call('chat.postMessage', - channel=channel_id, - text="Hi <@{}>!".format(user), - thread_ts=thread_ts - ) - -if client.rtm_connect(): - while client.server.connected is True: - for data in client.rtm_read(): - if "type" in data and data["type"] == "message": - say_hello(data) -else: - print "Connection Failed" -``` - -Example App in v2: -Here's that same simple example app that replies "Hi \<\@userid\>!" in a thread if you send it a message containing "Hello". -```Python -import slack - -slack_token = os.environ["SLACK_API_TOKEN"] -rtmclient = slack.RTMClient(token=slack_token) - -@slack.RTMClient.run_on(event='message') -def say_hello(**payload): - data = payload['data'] - if 'Hello' in data['text']: - channel_id = data['channel'] - thread_ts = data['ts'] - user = data['user'] - - webclient = payload['web_client'] - webclient.chat_postMessage( - channel=channel_id, - text="Hi <@{}>!".format(user), - thread_ts=thread_ts - ) - -rtmclient.start() -``` - -**We no longer store any team data.**: In the current 1.x version of the client we store some channel and user information internally on [`Server.py`](https://github.com/slackapi/python-slackclient/blob/master/slackclient/server.py) in `client`. This data will now be available in the open event for consumption. Developers are then free to store any information they choose. Here's an example: -```Python -# Retrieving the team domain. -# Before: -# team_domain = client.server.login_data["team"]["domain"] - -# After: -@slack.RTMClient.run_on(event='open') -def get_team_data(**payload): - team_domain = payload['data']['team']['domain'] -``` - -RTM usage has been completely redesigned. - -For new projects, we recommend using [Events API](https://api.slack.com/events). This package `slackclient` v2 doesn't have any supports for Events API but you can try https://github.com/slackapi/python-slack-events-api that works as an enhancement of Flask web framework. - -In the near future, we'll be providing better supports for Events API in the official SDK. - -### Web Client API Changes: ---- -**Token refresh removed**: - -This feature originally shipped as a part of Workspace Tokens. Since we're [heading in a new direction](https://medium.com/slack-developer-blog/the-latest-with-app-tokens-fe878d44130c) it's safe to remove this, along with any related attributes stored on the client. -- ~refresh_token~ -- ~token_update_callback~ -- ~client_id~ -- ~client_secret~ - -**`#api_call()`**: - -- `timeout` param has been removed. Timeout is passed at the client level now. -- `kwargs` param has been removed. You must specify where the data you pass belongs in the request. e.g. 'data' vs 'params' vs 'files'...etc -```Python -# Before: -# from slackclient import SlackClient -# -# client = SlackClient(os.environ["SLACK_API_TOKEN"]) -# client.api_call('chat.postMessage', -# timeout=30, -# channel='C0123456', -# text="Hi!") - -# After: - -import slack - -client = slack.WebClient(os.environ["SLACK_API_TOKEN"], timeout=30) -client.api_call('chat.postMessage', json={ - 'channel': 'C0123456', - 'text': 'Hi!'}) - -# Note: That while the above is allowed, the more efficient way to call that API is like this: -client.chat_postMessage( - channel='C0123456', - text='Hi!') -``` - -The WebClient provides built-in methods for the Slack Web API. These methods act as helpers enabling you to focus less on how the request is constructed. Here are a few things that this provides: -- Basic information about each method through the docstring. -- Easy File Uploads: You can now pass in the location of a file and the library will handle opening and retrieving the file object to be transmitted. -- Token type validation: This gives you better error messaging when you're attempting to consume an api method that your token doesn't have access to. -- Constructs requests using Slack preferred HTTP methods and content-types. - -### Error Handling Changes: ---- - -In 1.x, a failed api call would return the error payload to you and have you handle the error. In 2.x, a failed api call will throw an exception. To handle this in your code, you will have to wrap api calls with a `try except` block. \ No newline at end of file diff --git a/docs/content/web.md b/docs/content/web.md deleted file mode 100644 index 81232576c..000000000 --- a/docs/content/web.md +++ /dev/null @@ -1,852 +0,0 @@ -# Web Client - -The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box. - -Access the Slack API methods requires an OAuth token β€” see the [Tokens & Authentication](/installation#handling-tokens) section for more on how Slack uses OAuth tokens as well as best practices. - -[Each of these API methods](https://api.slack.com/methods) is fully documented in our [API documentation site](https://api.slack.com). - ---- - -## Messaging - -### Sending a message - -One of the primary uses of Slack is posting messages to a channel using -the channel ID or as a DM to another person using their user ID. This -method will handle either a channel ID or a user ID passed to the -`channel` parameter. - -Note that your app's bot user needs to be in the channel (otherwise, -you will get either `not_in_channel` or `channel_not_found` error code). -If your app has -[chat:write.public](https://api.slack.com/scopes/chat:write.public) -scope, your app can post messages without joining a channel as long as -the channel is public. See -[chat.postMessage](https://api.slack.com/methods/chat.postMessage) for -more info. - -``` python -import logging -logging.basicConfig(level=logging.DEBUG) - -import os -from slack_sdk import WebClient -from slack_sdk.errors import SlackApiError - -slack_token = os.environ["SLACK_BOT_TOKEN"] -client = WebClient(token=slack_token) - -try: - response = client.chat_postMessage( - channel="C0XXXXXX", - text="Hello from your app! :tada:" - ) -except SlackApiError as e: - # You will get a SlackApiError if "ok" is False - assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' -``` - -Sending an ephemeral message, which is only visible to an assigned user -in a specified channel, is nearly the same as sending a regular message, -but with an additional `user` parameter. - -``` python -import os -from slack_sdk import WebClient - -slack_token = os.environ["SLACK_BOT_TOKEN"] -client = WebClient(token=slack_token) - -response = client.chat_postEphemeral( - channel="C0XXXXXX", - text="Hello silently from your app! :tada:", - user="U0XXXXXXX" -) -``` - -See -[chat.postEphemeral](https://api.slack.com/methods/chat.postEphemeral) -for more info. - -#### Formatting with Block Kit - -Messages posted from apps can contain more than just text, though. They -can include full user interfaces composed of -[blocks](https://api.slack.com/block-kit). - -The chat.postMessage method takes an optional `blocks` argument that -allows you to customize the layout of a message. Blocks can be specified -in a single array of either dict values or -[slack_sdk.models.blocks.Block](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/models/blocks/index.html) -objects. - -To send a message to a channel, use the channel's ID. For IMs, use the -user's ID. - -``` python -client.chat_postMessage( - channel="C0XXXXXX", - blocks=[ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Danny Torrence left the following review for your property:" - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": " \n :star: \n Doors had too many axe holes, guest in room " + - "237 was far too rowdy, whole place felt stuck in the 1920s." - }, - "accessory": { - "type": "image", - "image_url": "https://images.pexels.com/photos/750319/pexels-photo-750319.jpeg", - "alt_text": "Haunted hotel image" - } - }, - { - "type": "section", - "fields": [ - { - "type": "mrkdwn", - "text": "*Average Rating*\n1.0" - } - ] - } - ] -) -``` - -:::tip - -You can use the [Block Kit -Builder](https://api.slack.com/tools/block-kit-builder) to prototype -your message's look and feel. - -::: - -### Threading Messages - -Threaded messages are a way of grouping messages together to provide -greater context. You can reply to a thread or start a new threaded -conversation by simply passing the original message's `ts` ID in the -`thread_ts` attribute when posting a message. If you're replying to a -threaded message, you'll pass the `thread_ts` ID of the -message you're replying to. - -A channel or DM conversation is a nearly linear timeline of messages -exchanged between people, bots, and apps. When one of these messages is -replied to, it becomes the parent of a thread. By default, threaded -replies do not appear directly in the channel, instead relegated to a -kind of forked timeline descending from the parent message. - -``` python -response = client.chat_postMessage( - channel="C0XXXXXX", - thread_ts="1476746830.000003", - text="Hello from your app! :tada:" -) -``` - -By default, `reply_broadcast` is set to `False`. To indicate your reply -is germane to all members of a channel, and therefore a notification of -the reply should be posted in-channel, set the `reply_broadcast` to -`True`. - -``` python -response = client.chat_postMessage( - channel="C0XXXXXX", - thread_ts="1476746830.000003", - text="Hello from your app! :tada:", - reply_broadcast=True -) -``` - -While threaded messages may contain attachments and message -buttons, when your reply is broadcast to the channel, it'll actually be -a reference to your reply, not the reply itself. So, when appearing in -the channel, it won't contain any attachments or message buttons. Also -note that updates and deletion of threaded replies works the same as -regular messages. - -See the [Threading messages -together](https://api.slack.com/docs/message-threading#forking_conversations) -article for more information. - -### Updating a message - -Let's say you have a bot which posts the status of a request. When that -request changes, you'll want to update the message to reflect it's -state. - -``` python -response = client.chat_update( - channel="C0XXXXXX", - ts="1476746830.000003", - text="updates from your app! :tada:" -) -``` - -See [chat.update](https://api.slack.com/methods/chat.update) for -formatting options and some special considerations when calling this -with a bot user. - -### Deleting a message - -Sometimes you need to delete things. - -``` python -response = client.chat_delete( - channel="C0XXXXXX", - ts="1476745373.000002" -) -``` - -See [chat.delete](https://api.slack.com/methods/chat.delete) for more -info. - -### Emoji reactions - -You can quickly respond to any message on Slack with an emoji reaction. -Reactions can be used for any purpose: voting, checking off to-do items, -showing excitement ---- or just for fun. - -This method adds a reaction (emoji) to an item (`file`, `file comment`, -`channel message`, `group message`, or `direct message`). One of file, -file_comment, or the combination of channel and timestamp must be -specified. Also, note that your app's bot user needs to be in the -channel (otherwise, you will get either `not_in_channel` or -`channel_not_found` error code). - -``` python -response = client.reactions_add( - channel="C0XXXXXXX", - name="thumbsup", - timestamp="1234567890.123456" -) -``` - -Removing an emoji reaction is basically the same format, but you'll use -`reactions.remove` instead of `reactions.add` - -``` python -response = client.reactions_remove( - channel="C0XXXXXXX", - name="thumbsup", - timestamp="1234567890.123456" -) -``` - -See [reactions.add](https://api.slack.com/methods/reactions.add) and -[reactions.remove](https://api.slack.com/methods/reactions.remove) for -more info. - -## Files - -### Uploading files - -You can upload files onto Slack and share the file with people in -channels. Note that your app's bot user needs to be in the channel -(otherwise, you will get either `not_in_channel` or `channel_not_found` -error code). - -``` python -response = client.files_upload_v2( - file="test.pdf", - title="Test upload", - channel="C3UKJTQAC", - initial_comment="Here is the latest version of the file!", -) -``` - -If you want to share files within a thread, you can pass "thread_ts" in addition to "channel_id" as shown below: - -``` python -response = client.files_upload_v2( - file="test.pdf", - title="Test upload", - channel="C3UKJTQAC", - thread_ts="1731398999.934122", - initial_comment="Here is the latest version of the file!", -) -``` - -See [files_upload_v2 method release -notes](https://github.com/slackapi/python-slack-sdk/releases/tag/v3.19.0) -for more info. - -### Adding a remote file - -You can add a file information that is stored in an external storage, -not in Slack. - -``` python -response = client.files_remote_add( - external_id="the-all-hands-deck-12345", - external_url="https://{your domain}/files/the-all-hands-deck-12345", - title="The All-hands Deck", - preview_image="./preview.png" # will be displayed in channels -) -``` - -See [files.remote.add](https://api.slack.com/methods/files.remote.add) -for more info. - -## Conversations - -The Slack Conversations API provides your app with a unified interface -to work with all the channel-like things encountered in Slack; public -channels, private channels, direct messages, group direct messages, and -our newest channel type, Shared Channels. - -See [Conversations API](https://api.slack.com/docs/conversations-api) -docs for more info. - -### Start a direct message - -The `conversations_open` method opens either a 1:1 direct message with a -single user or a a multi-person direct message, depending on the number -of users supplied to the `users` parameter. - -*For public or private channels, use the conversations_create method.* - -Provide a `users` parameter as an array with 1 to 8 user IDs to open or -resume a conversation. Providing only 1 ID will create a direct message. -Providing more will create a new multi-party DM or resume an existing -conversation. - -Subsequent calls to `conversations_open` with the same set of users will -return the already existing conversation. - -``` python -import os -from slack_sdk import WebClient - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -response = client.conversations_open(users=["W123456789", "U987654321"]) -``` - -See -[conversations.open](https://api.slack.com/methods/conversations.open) -additional info. - -### Creating channels - -Creates a new channel, either public or private. The `name` parameter is -required, may contain numbers, letters, hyphens, and underscores, and -must contain fewer than 80 characters. To make the channel private, set -the option `is_private` parameter to `True`. - -``` python -import os -from slack_sdk import WebClient -from time import time - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -channel_name = f"my-private-channel-{round(time())}" -response = client.conversations_create( - name=channel_name, - is_private=True -) -channel_id = response["channel"]["id"] -response = client.conversations_archive(channel=channel_id) -``` - -See -[conversations.create](https://api.slack.com/methods/conversations.create) -additional info. - -### Listing conversations - -To get a list of all the conversations in a workspace, use -`conversations_list`. By default, only public conversations are -returned; use the `types` parameter specify which types of conversations -you're interested in (Note: `types` is a string of comma-separated -values) - -``` python -import os -from slack_sdk import WebClient - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -response = client.conversations_list() -conversations = response["channels"] -``` - -Use the `types` parameter to request additional channels, including -`public_channel`, `private_channel`, `mpim`, and `im`. This parameter is -a string of comma-separated values. - -``` python -import os -from slack_sdk import WebClient - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -response = client.conversations_list( - types="public_channel, private_channel" -) -``` - -See -[conversations.list](https://api.slack.com/methods/conversations.list) -for more info. - -Archived channels are included by default. You can exclude them by -passing `exclude_archived=True` to your request. - -``` python -response = client.conversations_list(exclude_archived=True) -``` - -See -[conversations.list](https://api.slack.com/methods/conversations.list) -for more info. - -### Getting a conversation information - -To retrieve a set of metadata about a channel (public, private, DM, or -multi-party DM), use `conversations_info`. The `channel` parameter is -required and must be a valid channel ID. The optional `include_locale` -boolean parameter will return locale data, which may be useful if you -wish to return localized responses. The `include_num_members` boolean -parameter will return the number of people in a channel. - -``` python -import os -from slack_sdk import WebClient - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -response = client.conversations_info( - channel="C031415926", - include_num_members=1 -) -``` - -See -[conversations.info](https://api.slack.com/methods/conversations.info) -for more info. - -### Getting members of a conversation - -To get a list of the members of a conversation, use -`conversations_members` with the required `channel` parameter. - -``` python -import os -from slack_sdk import WebClient - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -response = client.conversations_members(channel="C16180339") -user_ids = response["members"] -``` - -See -[conversations.members](https://api.slack.com/methods/conversations.members) -for more info. - -### Joining a conversation - -Channels are the social hub of most Slack teams. Here's how you hop -into one: - -``` python -response = client.conversations_join(channel="C0XXXXXXY") -``` - -If you are already in the channel, the response is slightly different. -`already_in_channel` will be true, and a limited `channel` object will -be returned. Bot users cannot join a channel on their own, they need to -be invited by another user. - -See -[conversations.join](https://api.slack.com/methods/conversations.join) -for more info. - -### Leaving a conversation - -To leave a conversation, use `conversations_leave` with the required -`channel` param containing the ID of the channel to leave. - -``` python -import os -from slack_sdk import WebClient - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) -response = client.conversations_leave(channel="C27182818") -``` - -See -[conversations.leave](https://api.slack.com/methods/conversations.leave) -for more info. - -## Modals - -### Opening a modal - -Modals allow you to collect data from users and display dynamic -information in a focused surface. - -Modals use the same `blocks` that compose messages with the addition of -an `input` block. - -``` python -from slack_sdk.signature import SignatureVerifier -signature_verifier = SignatureVerifier(os.environ["SLACK_SIGNING_SECRET"]) - -from flask import Flask, request, make_response, jsonify -app = Flask(__name__) - -@app.route("/slack/events", methods=["POST"]) -def slack_app(): - if not signature_verifier.is_valid_request(request.get_data(), request.headers): - return make_response("invalid request", 403) - - if "payload" in request.form: - payload = json.loads(request.form["payload"]) - if payload["type"] == "shortcut" and payload["callback_id"] == "test-shortcut": - # Open a new modal by a global shortcut - try: - api_response = client.views_open( - trigger_id=payload["trigger_id"], - view={ - "type": "modal", - "callback_id": "modal-id", - "title": { - "type": "plain_text", - "text": "Awesome Modal" - }, - "submit": { - "type": "plain_text", - "text": "Submit" - }, - "blocks": [ - { - "type": "input", - "block_id": "b-id", - "label": { - "type": "plain_text", - "text": "Input label", - }, - "element": { - "action_id": "a-id", - "type": "plain_text_input", - } - } - ] - } - ) - return make_response("", 200) - except SlackApiError as e: - code = e.response["error"] - return make_response(f"Failed to open a modal due to {code}", 200) - - if ( - payload["type"] == "view_submission" - and payload["view"]["callback_id"] == "modal-id" - ): - # Handle a data submission request from the modal - submitted_data = payload["view"]["state"]["values"] - print(submitted_data) # {'b-id': {'a-id': {'type': 'plain_text_input', 'value': 'your input'}}} - - # Close this modal with an empty response body - return make_response("", 200) - - return make_response("", 404) - -if __name__ == "__main__": - # export SLACK_SIGNING_SECRET=*** - # export SLACK_BOT_TOKEN=xoxb-*** - # export FLASK_ENV=development - # python3 app.py - app.run("localhost", 3000) -``` - -See [views.open](https://api.slack.com/methods/views.open) more details -and additional parameters. - -Also, to run the above example, the following [Slack app -configurations](https://api.slack.com/apps) are required. - -- Enable **Interactivity** with a valid Request URL: - `https://{your-public-domain}/slack/events` -- Add a global shortcut with the Callback ID: `open-modal-shortcut` - -### Updating and pushing modals - -In response to `view_submission` requests, you can tell Slack to update the current modal view by having `"response_action": update` and an updated view. Also, there are other `response_action` types such as `errors` and `push`. Refer to [the API docs](https://api.slack.com/surfaces/modals/using#updating_response) for more details. - -``` python -if ( - payload["type"] == "view_submission" - and payload["view"]["callback_id"] == "modal-id" -): - # Handle a data submission request from the modal - submitted_data = payload["view"]["state"]["values"] - print(submitted_data) # {'b-id': {'a-id': {'type': 'plain_text_input', 'value': 'your input'}}} - - # Update the modal with a new view - return make_response( - jsonify( - { - "response_action": "update", - "view": { - "type": "modal", - "title": {"type": "plain_text", "text": "Accepted"}, - "close": {"type": "plain_text", "text": "Close"}, - "blocks": [ - { - "type": "section", - "text": { - "type": "plain_text", - "text": "Thanks for submitting the data!", - }, - } - ], - }, - } - ), - 200, - ) -``` - -If your app modify the current modal view when receiving -`block_actions` requests from Slack, you can call the -`views.update` API method with the given view ID. - -``` python -private_metadata = "any str data you want to store" -response = client.views_update( - view_id=payload["view"]["id"], - hash=payload["view"]["hash"], - view={ - "type": "modal", - "callback_id": "modal-id", - "private_metadata": private_metadata, - "title": { - "type": "plain_text", - "text": "Awesome Modal" - }, - "submit": { - "type": "plain_text", - "text": "Submit" - }, - "close": { - "type": "plain_text", - "text": "Cancel" - }, - "blocks": [ - { - "type": "input", - "block_id": "b-id", - "label": { - "type": "plain_text", - "text": "Input label", - }, - "element": { - "action_id": "a-id", - "type": "plain_text_input", - } - } - ] - } -) -``` - -See [views.update](https://api.slack.com/methods/views.update) for more -info. - -If you want to push a new view onto the modal instead of updating an -existing view, reference the -[views.push](https://api.slack.com/methods/views.push) documentation. - -## Rate Limits - -When posting messages to a channel, Slack allows applications to send no -more than one message per channel per second. We allow bursts over that -limit for short periods. However, if your app continues to exceed the -limit over a longer period of time it will be rate limited. Different -API methods have other rate limits β€” be sure to [check the -limits](https://api.slack.com/docs/rate-limits) and test that your -application has a graceful fallback if it should hit those limits. - -If you go over these limits, Slack will start returning a HTTP 429 Too -Many Requests error, a JSON object containing the number of calls you -have been making, and a Retry-After header containing the number of -seconds until you can retry. - -Here's a very basic example of how one might deal with rate limited -requests. - -``` python -import os -import time -from slack_sdk import WebClient -from slack_sdk.errors import SlackApiError - -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) - -# Simple wrapper for sending a Slack message -def send_slack_message(channel, message): - return client.chat_postMessage( - channel=channel, - text=message - ) - -# Make the API call and save results to `response` -channel = "#random" -message = "Hello, from Python!" -# Do until being rate limited -while True: - try: - response = send_slack_message(channel, message) - except SlackApiError as e: - if e.response.status_code == 429: - # The `Retry-After` header will tell you how long to wait before retrying - delay = int(e.response.headers['Retry-After']) - print(f"Rate limited. Retrying in {delay} seconds") - time.sleep(delay) - response = send_slack_message(channel, message) - else: - # other errors - raise e -``` - -Since v3.9.0, the built-in `RateLimitErrorRetryHandler` is available as -an easier way to do the retries for rate limited errors. Refer to the -RetryHandler section in this page for more details. - -To learn the Slack rate limits in general, see the documentation on -[Rate Limiting](https://api.slack.com/docs/rate-limits). - -## Calling API methods - -This library covers all the public endpoints as the methods in -`WebClient`. That said, you may see a bit delay of the library release. -When you're in a hurry, you can directly use `api_call` method as -below. - -``` python -import os -from slack_sdk import WebClient - -client = WebClient(token=os.environ['SLACK_BOT_TOKEN']) -response = client.api_call( - api_method='chat.postMessage', - params={'channel': '#random','text': "Hello world!"} -) -assert response["message"]["text"] == "Hello world!" -``` - -## AsyncWebClient - -All the API methods are available in asynchronous programming using the -standard [asyncio](https://docs.python.org/3/library/asyncio.html) -library. You use `AsyncWebClient` instead for it. - -`AsyncWebClient` internally relies on -[AIOHTTP](https://docs.aiohttp.org/en/stable/) library but it is an -optional dependency. So, to use this class, run `pip install aiohttp` -beforehand. - -``` python -import asyncio -import os -# requires: pip install aiohttp -from slack_sdk.web.async_client import AsyncWebClient -from slack_sdk.errors import SlackApiError - -client = AsyncWebClient(token=os.environ['SLACK_API_TOKEN']) - -# This must be an async method -async def post_message(): - try: - # Don't forget `await` keyword here - response = await client.chat_postMessage( - channel='#random', - text="Hello world!" - ) - assert response["message"]["text"] == "Hello world!" - except SlackApiError as e: - assert e.response["ok"] is False - assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' - print(f"Got an error: {e.response['error']}") - -# This is the simplest way to run the async method -# but you can go with any ways to run it -asyncio.run(post_message()) -``` - -## RetryHandler - -With the default settings, only `ConnectionErrorRetryHandler` with its -default configuration (=only one retry in the manner of [exponential -backoff and -jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) -is enabled. The retry handler retries if an API client encounters a -connectivity-related failure (e.g., Connection reset by peer). - -To use other retry handlers, you can pass a list of `RetryHandler` to -the client constructor. For instance, you can add the built-in -`RateLimitErrorRetryHandler` this way: - -``` python -import os -from slack_sdk.web import WebClient -client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) - -# This handler does retries when HTTP status 429 is returned -from slack_sdk.http_retry.builtin_handlers import RateLimitErrorRetryHandler -rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) - -# Enable rate limited error retries as well -client.retry_handlers.append(rate_limit_handler) -``` - -Creating your own ones is also quite simple. Defining a new class that -inherits `slack_sdk.http_retry.RetryHandler` (`AsyncRetryHandler` for -asyncio apps) and implements required methods (internals of `can_retry` -/ `prepare_for_next_retry`). Check the built-in ones' source code for -learning how to properly implement. - -``` python -import socket -from typing import Optional -from slack_sdk.http_retry import (RetryHandler, RetryState, HttpRequest, HttpResponse) -from slack_sdk.http_retry.builtin_interval_calculators import BackoffRetryIntervalCalculator -from slack_sdk.http_retry.jitter import RandomJitter - -class MyRetryHandler(RetryHandler): - def _can_retry( - self, - *, - state: RetryState, - request: HttpRequest, - response: Optional[HttpResponse] = None, - error: Optional[Exception] = None - ) -> bool: - # [Errno 104] Connection reset by peer - return error is not None and isinstance(error, socket.error) and error.errno == 104 - -client = WebClient( - token=os.environ["SLACK_BOT_TOKEN"], - retry_handlers=[MyRetryHandler( - max_retry_count=1, - interval_calculator=BackoffRetryIntervalCalculator( - backoff_factor=0.5, - jitter=RandomJitter(), - ), - )], -) -``` - -For asyncio apps, `Async` prefixed corresponding modules are available. -All the methods in those methods are async/await compatible. Check [the -source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) -and -[tests](https://github.com/slackapi/python-slack-sdk/blob/main/tests/slack_sdk_async/web/test_async_web_client_http_retry.py) -for more details. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js deleted file mode 100644 index 3664238bd..000000000 --- a/docs/docusaurus.config.js +++ /dev/null @@ -1,84 +0,0 @@ -import { themes as prismThemes } from "prism-react-renderer"; -const footer = require("./footerConfig"); -const navbar = require("./navbarConfig"); - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Python Slack SDK", - tagline: "Official frameworks, libraries, and SDKs for Slack developers", - favicon: "img/favicon.ico", - url: "https://tools.slack.dev", - baseUrl: "/python-slack-sdk/", - organizationName: "slackapi", - projectName: "python-slack-sdk", - - onBrokenLinks: "warn", - onBrokenAnchors: "warn", - onBrokenMarkdownLinks: "warn", - - i18n: { - defaultLocale: "en", - locales: ["en"], - }, - - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - path: "content", - breadcrumbs: false, - routeBasePath: "/", // Serve the docs at the site's root - sidebarPath: "./sidebars.js", - editUrl: - "https://github.com/slackapi/python-slack-sdk/tree/main/docs", - }, - blog: false, - theme: { - customCss: "./src/css/custom.css", - }, - }), - ], - ], - - plugins: [ - "docusaurus-theme-github-codeblock", - [ - "@docusaurus/plugin-client-redirects", - { - redirects: [], - }, - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - colorMode: { - respectPrefersColorScheme: true, - }, - docs: { - sidebar: { - autoCollapseCategories: true, - }, - }, - navbar, - footer, - prism: { - // switch to alucard when available in prism? - theme: prismThemes.github, - darkTheme: prismThemes.dracula, - }, - codeblock: { - showGithubLink: true, - githubLinkLabel: "View on GitHub", - }, - // announcementBar: { - // id: `announcementBar`, - // content: `πŸŽ‰οΈ Version 2.26.0 of developer tools for the Slack automations platform is here! πŸŽ‰οΈ `, - // }, - }), -}; - -export default config; diff --git a/docs/english/_sidebar.json b/docs/english/_sidebar.json new file mode 100644 index 000000000..6e5aa7358 --- /dev/null +++ b/docs/english/_sidebar.json @@ -0,0 +1,66 @@ +[ + { + "type": "doc", + "id": "tools/python-slack-sdk/index", + "label": "Python Slack SDK", + "className": "sidebar-title" + }, + { + "type": "html", + "value": "
" + }, + "tools/python-slack-sdk/installation", + "tools/python-slack-sdk/web", + "tools/python-slack-sdk/webhook", + "tools/python-slack-sdk/socket-mode", + "tools/python-slack-sdk/oauth", + "tools/python-slack-sdk/audit-logs", + "tools/python-slack-sdk/rtm", + "tools/python-slack-sdk/scim", + { "type": "html", "value": "
" }, + { + "type": "category", + "label": "Legacy slackclient v2", + "items": [ + "tools/python-slack-sdk/legacy/index", + "tools/python-slack-sdk/legacy/auth", + "tools/python-slack-sdk/legacy/basic_usage", + "tools/python-slack-sdk/legacy/conversations", + "tools/python-slack-sdk/legacy/real_time_messaging", + "tools/python-slack-sdk/legacy/faq", + "tools/python-slack-sdk/legacy/changelog" + ] + }, + "tools/python-slack-sdk/v3-migration", + { "type": "html", "value": "
" }, + { + "type": "category", + "label": "Tutorials", + "items": [ + "tools/python-slack-sdk/tutorial/uploading-files", + "tools/python-slack-sdk/tutorial/understanding-oauth-scopes" + ] + }, + { "type": "html", "value": "
" }, + { + "type": "link", + "label": "Reference", + "href": "https://docs.slack.dev/tools/python-slack-sdk/reference/index.html" + }, + { "type": "html", "value": "
" }, + { + "type": "link", + "label": "Release notes", + "href": "https://github.com/slackapi/python-slack-sdk/releases" + }, + { + "type": "link", + "label": "Code on GitHub", + "href": "https://github.com/SlackAPI/python-slack-sdk" + }, + { + "type": "link", + "label": "Contributors Guide", + "href": "https://github.com/SlackAPI/python-slack-sdk/blob/main/.github/contributing.md" + } +] diff --git a/docs/content/audit-logs.md b/docs/english/audit-logs.md similarity index 50% rename from docs/content/audit-logs.md rename to docs/english/audit-logs.md index c2b6769d8..1d8b930ce 100644 --- a/docs/content/audit-logs.md +++ b/docs/english/audit-logs.md @@ -1,28 +1,20 @@ -# Audit Logs API Client +# Audit Logs API client -[Audit Logs API](https://api.slack.com/admins/audit-logs) is a set of APIs for monitoring what's happening in your [Enterprise Grid](https://api.slack.com/enterprise/grid) organization. +The [Audit Logs API](/admins/audit-logs-api) is a set of APIs that you can use to monitor what's happening in your [Enterprise Grid](/enterprise) organization. -The Audit Logs API can be used by security information and event management (SIEM) tools to provide an analysis of how your Slack organization is being accessed. You can also use this API to write your own applications to see how members of your organization are using Slack. +The Audit Logs API can be used by Security Information and Event Management (SIEM) tools to provide an analysis of how your Slack organization is being accessed. You can also use this API to write your own apps to see how members of your organization are using Slack. -Follow the instructions in [the API document](https://api.slack.com/admins/audit-logs) to get a valid token for using Audit Logs API. The Slack app using the Audit Logs API needs to be installed in the Enterprise Grid Organization, not an individual workspace within the organization. +You'll need a valid token in order to use the Audit Logs API. In addition, the Slack app using the Audit Logs API needs to be installed in the Enterprise Grid organization, not an individual workspace within the organization. --- -## AuditLogsClient +## AuditLogsClient {#auditlogsclient} -An OAuth token with [the admin -scope](https://api.slack.com/scopes/admin) is required to access this -API. +An OAuth token with [the admin scope](/reference/scopes/admin) is required to access this API. -You will likely use the `/logs` endpoint as it's the essential part of -this API. +You'll likely use the `/logs` endpoint as it's the essential part of this API. -To learn about the available parameters for this endpoint, check out -[this -guide](https://api.slack.com/admins/audit-logs#how_to_call_the_audit_logs_api). -You can also learn more about the data structure of -`api_response.typed_body` from [the class source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/audit_logs/v1/logs.py). +To learn about the available parameters for this endpoint, check out [using the Audit Logs API](/admins/audit-logs-api). You can also learn more about the data structure of `api_response.typed_body` from [the class source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/audit_logs/v1/logs.py). ``` python import os @@ -42,10 +34,9 @@ api_response = client.schemas() api_response = client.actions() ``` -## AsyncAuditLogsClient +## AsyncAuditLogsClient {#asyncauditlogsclient} -If you are keen to use asyncio for SCIM API calls, we offer -AsyncSCIMClient for it. This client relies on aiohttp library. +If you are keen to use asyncio for SCIM API calls, we offer AsyncSCIMClient for it. This client relies on aiohttp library. ``` python from slack_sdk.audit_logs.async_client import AsyncAuditLogsClient @@ -57,18 +48,11 @@ api_response.typed_body # slack_sdk.audit_logs.v1.LogsResponse --- -## RetryHandler +## RetryHandler {#retryhandler} -With the default settings, only `ConnectionErrorRetryHandler` with its -default configuration (=only one retry in the manner of [exponential -backoff and -jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) -is enabled. The retry handler retries if an API client encounters a -connectivity-related failure (e.g., Connection reset by peer). +With the default settings, only `ConnectionErrorRetryHandler` with its default configuration (=only one retry in the manner of [exponential backoff and jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) is enabled. The retry handler retries if an API client encounters a connectivity-related failure (e.g., connection reset by peer). -To use other retry handlers, you can pass a list of `RetryHandler` to -the client constructor. For instance, you can add the built-in -`RateLimitErrorRetryHandler` this way: +To use other retry handlers, you can pass a list of `RetryHandler` to the client constructor. For instance, you can add the built-in `RateLimitErrorRetryHandler` this way: ``` python import os @@ -83,11 +67,7 @@ rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) client.retry_handlers.append(rate_limit_handler) ``` -Creating your own ones is also quite simple. Defining a new class that -inherits `slack_sdk.http_retry.RetryHandler` (`AsyncRetryHandler` for -asyncio apps) and implements required methods (internals of `can_retry` -/ `prepare_for_next_retry`). Check the built-in ones' source code for -learning how to properly implement. +You can also create one on your own by defining a new class that inherits `slack_sdk.http_retry RetryHandler` (`AsyncRetryHandler` for asyncio apps) and implements required methods (internals of `can_retry` / `prepare_for_next_retry`). Check out the source code for the ones that are built in to learn how to properly implement them. ``` python import socket @@ -120,10 +100,4 @@ client = AuditLogsClient( ) ``` -For asyncio apps, `Async` prefixed corresponding modules are available. -All the methods in those methods are async/await compatible. Check [the -source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) -and -[tests](https://github.com/slackapi/python-slack-sdk/blob/main/tests/slack_sdk_async/web/test_async_web_client_http_retry.py) -for more details. +For asyncio apps, `Async` prefixed corresponding modules are available. All the methods in those methods are async/await compatible. Check [the source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) for more details. diff --git a/docs/english/index.md b/docs/english/index.md new file mode 100644 index 000000000..7fdbcd6e4 --- /dev/null +++ b/docs/english/index.md @@ -0,0 +1,36 @@ +# Python Slack SDK + +The Slack Python SDK has corresponding packages for Slack APIs. They are small and powerful when used independently, and work seamlessly when used together, too. + +The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you can pick just those that fit your needs. + +## Features {#features} + +| Feature | Use | Package | +|---|---|---| +| [Web API](/tools/python-slack-sdk/web) | Send data to or query data from Slack using any of over 200 methods. | `slack_sdk.web`, `slack_sdk.web.async_client` | +| [Webhooks](/tools/python-slack-sdk/webhook) / `response_url` | Send a message using Incoming Webhooks or `response_url` | `slack_sdk.webhook`, `slack_sdk.webhook.async_client` | +| [Socket Mode](/tools/python-slack-sdk/socket-mode) | Receive and send messages over Socket Mode connections. | `slack_sdk.socket_mode` | +| [OAuth](/tools/python-slack-sdk/oauth) | Setup the authentication flow using V2 OAuth, OpenID Connect for Slack apps. | `slack_sdk.oauth` | +| [Audit Logs API](/tools/python-slack-sdk/audit-logs) | Receive audit logs API data. | `slack_sdk.audit_logs` | +| [SCIM API](/tools/python-slack-sdk/scim) | Utilize the SCIM APIs for provisioning and managing user accounts and groups. | `slack_sdk.scim` | +| [RTM API](/tools/python-slack-sdk/rtm) | Listen for incoming messages and a limited set of events happening in Slack, using WebSocket. | `slack_sdk.rtm_v2` | +| Request Signature Verification | Verify incoming requests from the Slack API servers. | `slack_sdk.signature` | +| UI Builders | Construct UI components using easy-to-use builders. | `slack_sdk.models` | + +You can also view the [Python module documents](https://docs.slack.dev/tools/python-slack-sdk/reference)! + +## Getting help {#getting-help} + +These docs have lots of information on the Python Slack SDK. There's also an in-depth Reference section. Please explore! + +If you get stuck, we're here to help. The following are the best ways to get assistance working through your issue: + +* [Issue Tracker](http://github.com/slackapi/python-slack-sdk/issues) for questions, bug reports, feature requests, and general discussion related to the Python Slack SDK. Try searching for an existing issue before creating a new one. +* [Email](mailto:support@slack.com) our developer support team: `support@slack.com`. + +## Contributing {#contributing} + +These docs live within the [Python Slack SDK](https://github.com/slackapi/python-slack-sdk) repository and are open source. + +We welcome contributions from everyone! Please check out our [Contributor's Guide](https://github.com/slackapi/python-slack-sdk/blob/main/.github/contributing.md) for how to contribute in a helpful and collaborative way. diff --git a/docs/english/installation.md b/docs/english/installation.md new file mode 100644 index 000000000..17bae95d2 --- /dev/null +++ b/docs/english/installation.md @@ -0,0 +1,205 @@ +# Installation + +This package supports Python 3.7 and higher. We recommend using [PyPI](https://pypi.python.org/pypi) for installation. Run the following command: + +```bash +pip install slack-sdk +``` + +Alternatively, you can always pull the source code directly into your project: + +```bash +git clone https://github.com/slackapi/python-slack-sdk.git +cd python-slack-sdk +python3 -m venv .venv +source .venv/bin/activate +pip install -U pip +pip install -e . # install the SDK project into the virtual env +``` + +Create a `./test.py` file with the following: + +```python title="test.py" +# test.py +import sys +# Enable debug logging +import logging +logging.basicConfig(level=logging.DEBUG) +# Verify it works +from slack_sdk import WebClient +client = WebClient() +api_response = client.api_test() +``` + +Then, run the script: + +```bash +python test.py +``` + +It's also good to try on the Python REPL. + +## Access tokens {#handling-tokens} + +Making calls to the Slack API often requires a [token](/authentication/tokens) with associated scopes that grant access to resources. Collecting a token can be done from app settings or with an OAuth installation depending on your app's requirements. + +**Always keep your access tokens safe.** + +The OAuth token you use to call the Slack Web API has access to the data on the workspace where it is installed. Depending on the scopes granted to the token, it potentially has the ability to read and write data. Treat these tokens just as you would a password β€” don't publish them, don't check them into source code, and don't share them with others. + +:::danger[Never do the following] + +```python +# don't do this! +token = 'xoxb-111-222-xxxxx' +``` + +::: + +We recommend you pass tokens in as environment variables, or store them in a database that is accessed at runtime. You can add a token to the environment by starting your app as follows: + +```python +SLACK_BOT_TOKEN="xoxb-111-222-xxxxx" python myapp.py +``` + +Then, retrieve the key as follows: + +```python +import os +SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] +``` + +Refer to our [best practices for security](/security) page for more information. + +## Installing on a single workspace {#single-workspace} + +If you're building an application for a single Slack workspace, there's no need to build out the entire OAuth flow. Once you've set up your features, click the **Install App to Team** button on the **Install App** page. If you add new permission scopes or Slack app features after an app has been installed, you must reinstall the app to your workspace for the changes to take effect. + +Refer to the [Slack quickstart](/quickstart) guide for more details. + +## Installing on multiple workspaces {#multi-workspace} + +If you intend for an app to be installed on multiple Slack workspaces, you will need to handle this installation via the industry-standard OAuth protocol. Read more about [installing with OAuth](/authentication/installing-with-oauth). + +The OAuth exchange is facilitated via HTTP and requires a webserver; in this example, we'll use [Flask](https://flask.palletsprojects.com/). + +To configure your app for OAuth, you'll need a client ID, a client secret, and a set of one or more scopes that will be applied to the token once it is granted. The client ID and client secret are available from the [app page](https://api.slack.com/apps). The scopes are determined by the functionality of the app β€” every method you wish to access has a corresponding scope, and your app will need to request that scope in order to be able to access the method. Review the full list of [OAuth scopes](/reference/scopes). + +```python +import os +from slack_sdk import WebClient +from flask import Flask, request + +client_id = os.environ["SLACK_CLIENT_ID"] +client_secret = os.environ["SLACK_CLIENT_SECRET"] +oauth_scope = os.environ["SLACK_SCOPES"] + +app = Flask(__name__) +``` + +### The OAuth initiation link {#oauth-link} + +To begin the OAuth flow that will install your app on a workspace, you'll need to provide the user with a link to the Slack OAuth page. This can be a simple link to `https://slack.com/oauth/v2/authorize` with the +`scope` and `client_id` query parameters. + +This link directs the user to the OAuth acceptance page, where the user will review and accept or decline the permissions your app is requesting as defined by the scope(s). + +```python +@app.route("/slack/install", methods=["GET"]) +def pre_install(): + state = "randomly-generated-one-time-value" + return '' \ + 'Add to Slack' +``` + +### The OAuth completion page {#oauth-completion} + +Once the user has agreed to the permissions you've requested, Slack will redirect the user to your auth completion page, which includes a `code` query string parameter. You'll use the `code` parameter to call the [`oauth.v2.access`](/reference/methods/oauth.v2.access) API method that will grant you the token. + +```python +@app.route("/slack/oauth_redirect", methods=["GET"]) +def post_install(): + # Verify the "state" parameter + + # Retrieve the auth code from the request params + code_param = request.args['code'] + + # An empty string is a valid token for this request + client = WebClient() + + # Request the auth tokens from Slack + response = client.oauth_v2_access( + client_id=client_id, + client_secret=client_secret, + code=code_param + ) +``` + +A successful request to the `oauth.v2.access` API method will yield a JSON payload with at least one token: a bot token that begins with `xoxb`. + +```python +@app.route("/slack/oauth_redirect", methods=["GET"]) +def post_install(): + # Verify the "state" parameter + + # Retrieve the auth code from the request params + code_param = request.args['code'] + + # An empty string is a valid token for this request + client = WebClient() + + # Request the auth tokens from Slack + response = client.oauth_v2_access( + client_id=client_id, + client_secret=client_secret, + code=code_param + ) + print(response) + + # Save the bot token to an environmental variable or to your data store + # for later use + os.environ["SLACK_BOT_TOKEN"] = response['access_token'] + + # Don't forget to let the user know that OAuth has succeeded! + return "Installation is completed!" + +if __name__ == "__main__": + app.run("localhost", 3000) +``` + +Once your user has completed the OAuth flow, you'll be able to use the provided tokens to call any of the Slack Web API methods that require an access token. + +Refer to the [basic usage](/tools/python-slack-sdk/legacy/basic_usage) page for more examples. + +## Installation troubleshooting {#troubleshooting} + +We recommend using [virtualenv (venv)](https://docs.python.org/3/tutorial/venv.html) to set up your +Python runtime. + +```bash +# Create a dedicated virtual env for running your Python scripts +python -m venv .venv + +# Run .venv\Scripts\activate on Windows OS +source .venv/bin/activate + +# Install slack_sdk PyPI package +pip install "slack_sdk>=3.0" + +# Set your token as an env variable (`set` command for Windows OS) +export SLACK_BOT_TOKEN=xoxb-*** +``` + +Then, verify the following code works on the Python REPL: + +```python +import os +import logging +from slack_sdk import WebClient +logging.basicConfig(level=logging.DEBUG) +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +res = client.api_test() +``` + +As the `slack` package is deprecated, we recommend switching to `slack_sdk` package. That being said, the code you're working on may be still using the old package. If you encounter an error saying `AttributeError: module 'slack' has no attribute 'WebClient'`, run `pip list`. If you find both `slack_sdk` and `slack` in the output, try removing `slack` by `pip uninstall slack` and reinstalling `slack_sdk`. diff --git a/docs/english/legacy/auth.md b/docs/english/legacy/auth.md new file mode 100644 index 000000000..23fe0aa23 --- /dev/null +++ b/docs/english/legacy/auth.md @@ -0,0 +1,135 @@ +# Tokens & installation + +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] + +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better asyncio support, retry handlers, and more. + +::: + +## Access tokens {#handling-tokens} + +**Always keep your access tokens safe.** + +The OAuth token you use to call the Slack Web API has access to the data on the workspace where it is installed. Depending on the scopes granted to the token, it potentially has the ability to read and write data. Treat these tokens just as you would a password β€” don't publish them, don't check them into source code, and don't share them with others. + +Never do the following: + +``` python +token = 'xoxb-111-222-xxxxx' +``` + +We recommend you pass tokens in as environment variables, or store them in a database that is accessed at runtime. You can add a token to the environment by starting your app as follows: + +``` python +SLACK_BOT_TOKEN="xoxb-111-222-xxxxx" python myapp.py +``` + +Then, retrieve the key as follows: + +``` python +import os +SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"] +``` + +Refer to our [best practices for security](/security) page for more information. + +## Installing on a single workspace {#single-workspace} + +If you're building an application for a single Slack workspace, there's no need to build out the entire OAuth flow. Once you've set up your features, click the **Install App to Team** button on the **Install App** page. If you add new permission scopes or Slack app features after an app has been installed, you must reinstall the app to your workspace for the changes to take effect. + +Refer to the [quickstart](/quickstart) guide for more details. + +## Installing on multiple workspaces {#multi-workspace} + +If you intend for an app to be installed on multiple Slack workspaces, you will need to handle this installation via the industry-standard OAuth protocol. Read more about [installing with OAuth](/authentication/installing-with-oauth). + +The OAuth exchange is facilitated via HTTP and requires a webserver; in this example, we'll use [Flask](https://flask.palletsprojects.com/). + +To configure your app for OAuth, you'll need a client ID, a client secret, and a set of one or more scopes that will be applied to the token once it is granted. The client ID and client secret are available from the [app page](https://api.slack.com/apps). The scopes are determined by the functionality of the app β€” every method you wish to access has a corresponding scope, and your app will need to request that scope in order to be able to access the method. Review the full list of [OAuth scopes](/reference/scopes). + +``` python +import os +from slack import WebClient +from flask import Flask, request + +client_id = os.environ["SLACK_CLIENT_ID"] +client_secret = os.environ["SLACK_CLIENT_SECRET"] +oauth_scope = os.environ["SLACK_SCOPES"] + +app = Flask(__name__) +``` + +### The OAuth initiation link {#oauth-link} + +To begin the OAuth flow that will install your app on a workspace, you'll need to provide the user with a link to the Slack OAuth page. This can be a simple link to `https://slack.com/oauth/v2/authorize` with the +`scope` and `client_id` query parameters. + +This link directs the user to the OAuth acceptance page, where the user will review and accept or decline the permissions your app is requesting as defined by the scope(s). + +``` python +@app.route("/slack/install", methods=["GET"]) +def pre_install(): + state = "randomly-generated-one-time-value" + return '' \ + 'Add to Slack' +``` + +### The OAuth completion page {#oauth-completion} + +Once the user has agreed to the permissions you've requested, Slack will redirect the user to your auth completion page, which includes a `code` query string parameter. You'll use the `code` parameter to call the [`oauth.v2.access`](/reference/methods/oauth.v2.access) API method that will grant you the token. + +``` python +@app.route("/slack/oauth_redirect", methods=["GET"]) +def post_install(): + # Verify the "state" parameter + + # Retrieve the auth code from the request params + code_param = request.args['code'] + + # An empty string is a valid token for this request + client = WebClient() + + # Request the auth tokens from Slack + response = client.oauth_v2_access( + client_id=client_id, + client_secret=client_secret, + code=code_param + ) +``` + +A successful request to the `oauth.v2.access` API method will yield a JSON payload with at least one token: a bot token that begins with `xoxb`. + +``` python +@app.route("/slack/oauth_redirect", methods=["GET"]) +def post_install(): + # Verify the "state" parameter + + # Retrieve the auth code from the request params + code_param = request.args['code'] + + # An empty string is a valid token for this request + client = WebClient() + + # Request the auth tokens from Slack + response = client.oauth_v2_access( + client_id=client_id, + client_secret=client_secret, + code=code_param + ) + print(response) + + # Save the bot token to an environmental variable or to your data store + # for later use + os.environ["SLACK_BOT_TOKEN"] = response['access_token'] + + # Don't forget to let the user know that OAuth has succeeded! + return "Installation is completed!" + +if __name__ == "__main__": + app.run("localhost", 3000) +``` + +Once your user has completed the OAuth flow, you'll be able to use the provided tokens to call any of the Slack Web API methods that require an access token. + +Refer to the [basic usage](/tools/python-slack-sdk/legacy/basic_usage) page for more examples. diff --git a/docs/content/legacy/basic_usage.md b/docs/english/legacy/basic_usage.md similarity index 51% rename from docs/content/legacy/basic_usage.md rename to docs/english/legacy/basic_usage.md index 4fcac16e7..75094dd9f 100644 --- a/docs/content/legacy/basic_usage.md +++ b/docs/english/legacy/basic_usage.md @@ -1,26 +1,20 @@ -# Basic Usage {#web-api-examples} +# Basic usage -:::danger +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] -The [slackclient](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode now and [slack-sdk](https://pypi.org/project/slack-sdk/) project is the successor. The v3 SDK provides more functionalities such as Socket Mode, OAuth flow module, SCIM API, Audit Logs API, better asyncio support, retry handlers, and many more. +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. ::: The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box. -Accessing Slack API methods requires an OAuth token β€” see the [Tokens -& Authentication](auth) section for more on how Slack uses OAuth tokens -as well as best practices. +Accessing Slack API methods requires an OAuth token β€” read more about [installing with OAuth](/authentication/installing-with-oauth). -[Each of these API methods](https://api.slack.com/methods) is fully -documented on our developer site at api.slack.com +Each of these [API methods](/reference/methods) is fully documented on our developer site at [docs.slack.dev](/). -## Sending a message +## Sending a message {#sending-messages} -One of the primary uses of Slack is posting messages to a channel using -the channel ID or as a DM to another person using their user ID. This -method will handle either a channel ID or a user ID passed to the -`channel` parameter. +One of the primary uses of Slack is posting messages to a channel using the channel ID, or as a DM to another person using their user ID. This method will handle either a channel ID or a user ID passed to the `channel` parameter. ``` python import logging @@ -43,9 +37,7 @@ except SlackApiError as e: assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' ``` -Sending an ephemeral message, which is only visible to an assigned user -in a specified channel, is nearly the same as sending a regular message, -but with an additional `user` parameter. +Sending an ephemeral message, which is only visible to an assigned user in a specified channel, is nearly the same as sending a regular message but with an additional `user` parameter. ``` python import os @@ -61,25 +53,15 @@ response = client.chat_postEphemeral( ) ``` -See -[chat.postEphemeral](https://api.slack.com/methods/chat.postEphemeral) -for more info. +See the [`chat.postEphemeral`](/reference/methods/chat.postEphemeral) API method for more details. ------------------------------------------------------------------------- - -## Formatting with Block Kit +## Formatting messages with Block Kit {#block-kit} -Messages posted from apps can contain more than just text, though. They -can include full user interfaces composed of -[blocks](https://api.slack.com/block-kit). +Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](/block-kit). -The chat.postMessage method takes an optional blocks argument that -allows you to customize the layout of a message. Blocks specified in a -single object literal, so just add additional keys for any optional -argument. +The [`chat.postMessage method`](/reference/methods/chat.postMessage) takes an optional blocks argument that allows you to customize the layout of a message. Blocks are specified in a single object literal, so just add additional keys for any optional argument. -To send a message to a channel, use the channel's ID. For IMs, use the -user's ID. +To send a message to a channel, use the channel's ID. For DMs, use the user's ID. ``` python client.chat_postMessage( @@ -118,26 +100,15 @@ client.chat_postMessage( ) ``` -**Note:** You can use the [Block Kit -Builder](https://api.slack.com/tools/block-kit-builder) to prototype -your message's look and feel. +:::tip[You can use [Block Kit Builder](https://app.slack.com/block-kit-builder/) to prototype your message's look and feel.] ------------------------------------------------------------------------- +::: -## Threading Messages +## Threading messages {#threading-messages} -Threaded messages are a way of grouping messages together to provide -greater context. You can reply to a thread or start a new threaded -conversation by simply passing the original message's `ts` ID in the -`thread_ts` attribute when posting a message. If you're replying to a -threaded message, you'll pass the `thread_ts` ID of the -message you're replying to. +Threaded messages are a way of grouping messages together to provide greater context. You can reply to a thread or start a new threaded conversation by simply passing the original message's `ts` ID in the `thread_ts` attribute when posting a message. If you're replying to a threaded message, you'll pass the `thread_ts` ID of the message you're replying to. -A channel or DM conversation is a nearly linear timeline of messages -exchanged between people, bots, and apps. When one of these messages is -replied to, it becomes the parent of a thread. By default, threaded -replies do not appear directly in the channel, instead relegated to a -kind of forked timeline descending from the parent message. +A channel or DM conversation is a nearly linear timeline of messages exchanged between people, bots, and apps. When one of these messages is replied to, it becomes the parent of a thread. By default, threaded replies do not appear directly in the channel, but are instead relegated to a kind of forked timeline descending from the parent message. ``` python response = client.chat_postMessage( @@ -147,10 +118,7 @@ response = client.chat_postMessage( ) ``` -By default, `reply_broadcast` is set to `False`. To indicate your reply -is germane to all members of a channel, and therefore a notification of -the reply should be posted in-channel, set the `reply_broadcast` to -`True`. +By default, the `reply_broadcast` parameter is set to `False`. To indicate your reply is germane to all members of a channel and therefore a notification of the reply should be posted in-channel, set the `reply_broadcast` parameter to `True`. ``` python response = client.chat_postMessage( @@ -161,24 +129,17 @@ response = client.chat_postMessage( ) ``` -**Note:** While threaded messages may contain attachments and message -buttons, when your reply is broadcast to the channel, it'll actually be -a reference to your reply, not the reply itself. So, when appearing in -the channel, it won't contain any attachments or message buttons. Also -note that updates and deletion of threaded replies works the same as -regular messages. +:::info[While threaded messages may contain attachments and message buttons, when your reply is broadcast to the channel, it'll actually be a reference to your reply and not the reply itself.] -See the [Threading messages -together](https://api.slack.com/docs/message-threading#forking_conversations) -article for more information. +When appearing in the channel, it won't contain any attachments or message buttons. Updates and deletion of threaded replies works the same as regular messages. ------------------------------------------------------------------------- +::: -## Updating a message +Refer to the [threading messages](/messaging#threading) page for more information. -Let's say you have a bot which posts the status of a request. When that -request changes, you'll want to update the message to reflect it's -state. +## Updating a message {#updating-messages} + +Let's say you have a bot that posts the status of a request. When that request changes, you'll want to update the message to reflect it's state. ``` python response = client.chat_update( @@ -188,13 +149,9 @@ response = client.chat_update( ) ``` -See [chat.update](https://api.slack.com/methods/chat.update) for -formatting options and some special considerations when calling this -with a bot user. +See the [`chat.update`](/reference/methods/chat.update) API method for formatting options and some special considerations when calling this with a bot user. ------------------------------------------------------------------------- - -## Deleting a message +## Deleting a message {#deleting-messages} Sometimes you need to delete things. @@ -205,18 +162,12 @@ response = client.chat_delete( ) ``` -See [chat.delete](https://api.slack.com/methods/chat.delete) for more -info. - ------------------------------------------------------------------------- - -## Opening a modal +See the [`chat.delete`](/reference/methods/chat.delete) API method for more +details. -Modals allow you to collect data from users and display dynamic -information in a focused surface. +## Opening a modal {#opening-modals} -Modals use the same blocks that compose messages with the addition of an -`input` block. +Modals allow you to collect data from users and display dynamic information in a focused surface. Modals use the same blocks that compose messages, with the addition of an `input` block. ``` python # This module is available since v2.6 @@ -293,23 +244,16 @@ if __name__ == "__main__": app.run("localhost", 3000) ``` -See [views.open](https://api.slack.com/methods/views.open) more details -and additional parameters. +See the [`views.open`](/reference/methods/views.open) API method more details and additional parameters. -Also, to run the above example, the following [Slack app -configurations](https://api.slack.com/apps) are required. +To run the above example, the following [app configurations](https://api.slack.com/apps) are required: -- Enable **Interactivity** with a valid Request URL: - `https://{your-public-domain}/slack/events` -- Add a global shortcut with the Callback ID: `open-modal-shortcut` +* Enable **Interactivity** with a valid Request URL: `https://{your-public-domain}/slack/events` +* Add a global shortcut with the callback ID: `open-modal-shortcut` ------------------------------------------------------------------------- - -## Updating and pushing modals +## Updating and pushing modals {#updating-pushing-modals} -You can dynamically update a view inside of a modal by calling -`views.update` and passing the view ID returned in the -previous `views.open` call. +You can dynamically update a view inside of a modal by calling the `views.update` API method and passing the view ID returned in the previous `views.open` API method call. ``` python private_metadata = "any str data you want to store" @@ -350,25 +294,15 @@ response = client.views_update( ) ``` -See [views.update](https://api.slack.com/methods/views.update) for more -info. - -If you want to push a new view onto the modal instead of updating an -existing view, reference the -[views.push](https://api.slack.com/methods/views.push) documentation. +See the [`views.update`](/reference/methods/views.update) API method for more details. ------------------------------------------------------------------------- +If you want to push a new view onto the modal instead of updating an existing view, see the [`views.push`](/reference/methods/views.push) API method. -## Emoji reactions +## Emoji reactions {#emoji} -You can quickly respond to any message on Slack with an emoji reaction. -Reactions can be used for any purpose: voting, checking off to-do items, -showing excitement ---- or just for fun. +You can quickly respond to any message on Slack with an emoji reaction. Reactions can be used for any purpose: voting, checking off to-do items, showing excitement, or just for fun. -This method adds a reaction (emoji) to an item (`file`, `file comment`, -`channel message`, `group message`, or `direct message`). One of file, -file_comment, or the combination of channel and timestamp must be -specified. +This method adds a reaction (emoji) to an item (`file`, `file comment`, `channel message`, `group message`, or `direct message`). One of `file`, `file_comment`, or the combination of `channel` and `timestamp` must be specified. ``` python response = client.reactions_add( @@ -378,8 +312,7 @@ response = client.reactions_add( ) ``` -Removing an emoji reaction is basically the same format, but you'll use -`reactions.remove` instead of `reactions.add` +Removing an emoji reaction is basically the same format, but you'll use the `reactions.remove` API method instead of the `reactions.add` API method. ``` python response = client.reactions_remove( @@ -389,85 +322,59 @@ response = client.reactions_remove( ) ``` -See [reactions.add](https://api.slack.com/methods/reactions.add) and -[reactions.remove](https://api.slack.com/methods/reactions.remove) for -more info. - ------------------------------------------------------------------------- +See the [`reactions.add`](/reference/methods/reactions.add) and [`reactions.remove`](/reference/methods/reactions.remove) API methods for more details. -## Listing public channels +## Listing public channels {#listing-public-channels} -At some point, you'll want to find out what channels are available to -your app. This is how you get that list. +At some point, you'll want to find out what channels are available to your app. This is how you get that list. ``` python response = client.conversations_list(types="public_channel") ``` -Archived channels are included by default. You can exclude them by -passing `exclude_archived=1` to your request. +Archived channels are included by default. You can exclude them by passing `exclude_archived=1` to your request. ``` python response = client.conversations_list(exclude_archived=1) ``` -See -[conversations.list](https://api.slack.com/methods/conversations.list) -for more info. - ------------------------------------------------------------------------- +See the [`conversations.list`](/reference/methods/conversations.list) API method for more details. -## Getting a channel's info +## Getting a channel's info {#get-channel-info} -Once you have the ID for a specific channel, you can fetch information -about that channel. +Once you have the ID for a specific channel, you can fetch information about that channel. ``` python response = client.conversations_info(channel="C0XXXXXXX") ``` -See -[conversations.info](https://api.slack.com/methods/conversations.info) -for more info. - ------------------------------------------------------------------------- +See the [`conversations.info`](/reference/methods/conversations.info) API method for more details. -## Joining a channel +## Joining a channel {#join-channel} -Channels are the social hub of most Slack teams. Here's how you hop -into one: +Channels are the social hub of most Slack teams. Here's how you hop into one: ``` python response = client.conversations_join(channel="C0XXXXXXY") ``` -If you are already in the channel, the response is slightly different. -`already_in_channel` will be true, and a limited `channel` object will -be returned. Bot users cannot join a channel on their own, they need to -be invited by another user. +If you are already in the channel, the response is slightly different. The `already_in_channel` attribute will be true, and a limited `channel` object will be returned. Bot users cannot join a channel on their own, they need to be invited by another user. -See -[conversations.join](https://api.slack.com/methods/conversations.join) -for more info. +See the [`conversations.join`](/reference/methods/conversations.join) API method for more details. ------------------------------------------------------------------------ -## Leaving a channel +## Leaving a channel {#leave-channel} -Maybe you've finished up all the business you had in a channel, or -maybe you joined one by accident. This is how you leave a channel. +Maybe you've finished up all the business you had in a channel, or maybe you joined one by accident. This is how you leave a channel. ``` python response = client.conversations_leave(channel="C0XXXXXXX") ``` -See -[conversations.leave](https://api.slack.com/methods/conversations.leave) -for more info. +See the [`conversations.leave`](/reference/methods/conversations.leave) API method for more details. ------------------------------------------------------------------------- - -## Listing team members +## Listing team members {#list-team-members} ``` python response = client.users_list() @@ -475,12 +382,9 @@ users = response["members"] user_ids = list(map(lambda u: u["id"], users)) ``` -See [users.list](https://api.slack.com/methods/users.list) for more -info. - ------------------------------------------------------------------------- +See the [`users.list`](/reference/methods/users.list) API method for more details. -## Uploading files +## Uploading files {#uploading-files} ``` python response = client.files_upload_v2( @@ -490,17 +394,11 @@ response = client.files_upload_v2( ) ``` -See [files.upload](https://api.slack.com/methods/files.upload) for more -info. +See the [`files.upload`](/reference/methods/files.upload) API method for more details. ------------------------------------------------------------------------- +## Calling API methods {#calling-API-methods} -## Calling any API methods - -This library covers all the public endpoints as the methods in -`WebClient`. That said, you may see a bit delay of the library release. -When you're in a hurry, you can directly use `api_call` method as -below. +This library covers all the public endpoints as the methods in `WebClient`. That said, you may see a bit of a delay with the library release. When you're in a hurry, you can directly use the `api_call` method as below. ``` python import os @@ -514,25 +412,13 @@ response = client.api_call( assert response["message"]["text"] == "Hello world!" ``` ------------------------------------------------------------------------- - -## Web API Rate Limits +## Rate limits {#rate-limits} -When posting messages to a channel, Slack allows applications to send no -more than one message per channel per second. We allow bursts over that -limit for short periods. However, if your app continues to exceed the -limit over a longer period of time it will be rate limited. Different -API methods have other rate limits β€” be sure to [check the -limits](https://api.slack.com/docs/rate-limits) and test that your -application has a graceful fallback if it should hit those limits. +When posting messages to a channel, Slack allows apps to send no more than one message per channel per second. We allow bursts over that limit for short periods; however, if your app continues to exceed the limit over a longer period of time, it will be rate limited. Different API methods have other limits β€” be sure to check the [rate limits](/apis/web-api/rate-limits) and test that your app has a graceful fallback if it should hit those limits. -If you go over these limits, Slack will start returning a HTTP 429 Too -Many Requests error, a JSON object containing the number of calls you -have been making, and a Retry-After header containing the number of -seconds until you can retry. +If you go over these limits, Slack will begin returning *HTTP 429 Too Many Requests* errors, a JSON object containing the number of calls you have been making, and a *Retry-After* header containing the number of seconds until you can retry. -Here's a very basic example of how one might deal with rate limited -requests. +Here's an example of how you might handle rate limited requests: ``` python import os @@ -568,5 +454,4 @@ while True: raise e ``` -See the documentation on [Rate -Limiting](https://api.slack.com/docs/rate-limits) for more info. +Refer to the [rate limits](/apis/web-api/rate-limits) page for more information. diff --git a/docs/english/legacy/changelog.md b/docs/english/legacy/changelog.md new file mode 100644 index 000000000..d58f0bf42 --- /dev/null +++ b/docs/english/legacy/changelog.md @@ -0,0 +1,399 @@ +# Changelog + +## v3.0.0 (2020-11-09) + +This is the first stable version of [slack_sdk](https://pypi.org/project/slack-sdk/) v3. The remarkable updates in this major version are: +- Newly added OAuth flow support +- Better async/sync separation for `WebClient` and `WebhookClient` +- Renamed packages (from `slack` to `slack_sdk`) with deprecation warnings + +Refer to [v3.0.0 milestone](https://github.com/slackapi/python-slack-sdk/milestone/10?closed=1) and [the docs website](/tools/python-slack-sdk/) for details. If you're a `slackclient` user, the migration guide for `slackclient` v2.x users is available at http://localhost:3000/python-slack-sdk/v3-migration. + +## v2.9.3 (2020-10-20) + +Refer to [v2.9.3 milestone](https://github.com/slackapi/python-slackclient/milestone/20?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[Block Kit\] #851 #852 Set default_type for HeaderBlock text - Thanks \@fwump38 +- \[Block Kit\] #853 #854 Enable to use input blocks in Home tab views - Thanks \@fwump38 +- \[RTMClient\] #857 #846 RTMClient does not pass timeout value to WebClient - Thanks \@Luden \@seratch + +## v2.9.2 (2020-10-09) + +Refer to [v2.9.2 milestone](https://github.com/slackapi/python-slackclient/milestone/19?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[Block Kit\] #841 Dispatch Action in Input blocks - Thanks \@seratch +- \[WebClient\] #838 Add apps.event.authorizations.list and other APIs - Thanks \@seratch +- \[WebClient\]\[WebhookClient\] #829 Improve error body parser to handle no charset responses - Thanks \@adamchainz \@seratch +- \[Block Kit\] #824 Correct text field validation in Header blocks - Thanks \@seratch + +## v2.9.1 (2020-09-23) + +Refer to [v2.9.1 milestone](https://github.com/slackapi/python-slackclient/milestone/18?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[WebClient\]\[WebhookClient\] #820 #821 #822 The proxy option in WebClient/WebhookClient no longer works - Thanks \@seratch + +## v2.9.0 (2020-09-17) + +Refer to [v2.9.0 milestone](https://github.com/slackapi/python-slackclient/milestone/17?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[WebClient\] #811 Add workflows.\* API support - Thanks \@misscoded +- \[WebClient\] #810 #809 Only set default filename in files_upload if file is an instance of str - Thanks \@csaska + +## v2.8.2 (2020-09-04) + +Refer to [v2.8.2 milestone](https://github.com/slackapi/python-slackclient/milestone/16?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[WebClient\] #795 #794 Add admin.conversations.\* API methods in WebClient/AsyncWebClient - Thanks \@ruberVulpes +- \[WebClient\] #796 Fix a link to the Static options documentation - Thanks \@Jamim + +## v2.8.1 (2020-08-28) + +Refer to [v2.8.1 milestone](https://github.com/slackapi/python-slackclient/milestone/15?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[WebClient\] #778 #779 Adding support for View objects for views.push/update/publish - Thanks \@ruberVulpes +- \[WebClient\] #786 Fix admin.conversations.restrictAccess.\* methods to match documentation - Thanks \@ruberVulpes + +## v2.8.0 (2020-08-06) + +Refer to [v2.8.0 milestone](https://github.com/slackapi/python-slackclient/milestone/14?closed=1) to know the complete list of the issues resolved by this release. + +**New Features** + +- \[WebClient\] #765 #766 Introduce AsyncWebClient/AsyncWebhookClient providing coroutines - Thanks \@seratch +- \[Block Kit\] #767 #768 Add \"header\" block support - Thanks \@mwbrooks + +**Updates** + +- \[WebClient\] #738 Add HTTP_PROXY, HTTPS_PROXY env variable support in async WebClient - Thanks \@iamtofr \@seratch +- \[WebClient\] #769 #773 Enable User-Agent to have additional info part - Thanks \@seratch +- \[WebClient\] #770 #771 Fix a bug where `files.upload`\'s file param doesn\'t accept bytes data - Thanks \@seratch + +## v2.7.3 (2020-07-20) + +Refer to [v2.7.3 milestone](https://github.com/slackapi/python-slackclient/milestone/13?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[WebClient\] #754 Fix #729 Add admin.conversations.restrictAccess.\*, conversations.mark API - Thanks \@ruberVulpes \@kian2attari +- \[WebClient\] #758 Fix #757 Add admin.usergroups.addTeams, calls.participants.remove API - Thanks \@seratch +- \[WebClient\] #727 Fix #645 Unclosed client session - Thanks \@NoAnyLove \@jourdanrodrigues +- \[WebClient\] #745 Fix #744 a validation logic bug in DatePickerElement - Thanks \@dzudi941 +- \[WebClient\] #752 Fix #733 Better error handling when getting TimeoutError in RTMClient#start() - Thanks \@liorblob \@seratch +- \[WebClient\] #751 Fix #718 by handling unexpected response body format - Thanks \@jeffbuswell \@seratch + +## v2.7.2 (2020-06-23) + +Refer to [v2.7.2 milestone](https://github.com/slackapi/python-slackclient/milestone/12?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[WebClient\] Fix #728 by adding bytearray support in files_upload (sync mode) - Thanks \@sofya-salmanova \@seratch +- \[WebClient\] #726 Fix InputBlock.hint validation failure - Thanks \@jourdanrodrigues +- \[WebClient\] #723 Correct the default value of InputBlock.label, hint - Thanks \@jourdanrodrigues + +## v2.7.1 (2020-06-04) + +This release includes the fixes for regression bugs in `WebClient` since v2.6.0. Refer to [v2.7.1 milestone](https://github.com/slackapi/python-slackclient/milestone/11?closed=1) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[WebClient\] #716 #712 Support timeout in sync sync web clients - Thanks \@DanialErfanian \@seratch +- \[WebClient\] #713 Support custom SSL context in sync sync web clients - Thanks \@austinbutler +- \[WebClient\] #715 #714 Support proxy in sync sync web clients - Thanks \@austinbutler \@seratch + +## v2.7.0 (2020-06-02) + +Refer to [v2.7.0 milestone](https://github.com/slackapi/python-slackclient/milestone/6?closed=1) to know the complete list of the issues resolved by this release. + +**New Features** + +- \[WebhookClient\] #707 #270 #531 Add `WebhookClient` for Incoming Webhooks & response_url - Thanks \@seratch \@chubz \@Ambro17 + +**Updates** + +- \[WebClient\] #704 #695 Add `calls\_\*` methods to `WebClient` and `CallBlock` in Block Kit classes - Thanks \@seratch +- \[WebClient\] #710 #536 Allow Tokens to be specified per request - Thanks \@seratch +- \[WebClient\] #709 #708 Add default_to_current_conversation in conversations_select elements - Thanks \@seratch + +## v2.6.2 (2020-05-28) + +Refer to [v2.6.2 milestone](https://github.com/slackapi/python-slackclient/milestone/9?closed=1) to know the complete details of this release. + +**Updates** + +- \[WebClient\] #705 WebClient\'s paginated API calls may fail with no params - Thanks \@seratch + +## v2.6.1 (2020-05-24) + +This patch release is a quick fix for #701, a major issue that affected RTMClient users in v2.6.0. The malfunction was introduced by #667 trying to address #558 #619. Those issues were reopened and will be resolved by another approach. Refer to [v2.6.1 milestone](https://github.com/slackapi/python-slackclient/milestone/8) to know the complete list of the issues resolved by this release. + +**Updates** + +- \[RTMClient\] #701 RTMClient drops some messages when they come in rapid succession - Thanks \@pbrackin \@seratch + +## v2.6.0 (2020-05-21) + +Refer to [v2.6.0 milestone](https://github.com/slackapi/python-slackclient/milestone/5?closed=1) to know the complete list of the issues resolved by this release. + +**New Features** + +- \[Block Kit\] #659 Add complete supports for Block Kit components and fixed a few existing bugs as well (#500 #519 #623 #632 #635 #639 #676 #699) - Thanks \@seratch \@diurnalist \@ruberVulpes \@jeremyschulman \@e271828- \@RodneyU215 +- \[Signature\] #686 Add slack.signature.SignatureVerifier for request verification - Thanks \@seratch +- \[WebClient\] #682 Add missing Grid admin APIs (`admin.usergroups.\*`, `admin.users.\*`, `admin.apps.\*`) - Thanks \@stevengill \@seratch + +**Updates** + +- \[WebClient\]\[RTMClient\] Fixed a bunch of the currency issues this SDK had (#429 #463 #492 #497 #530 #569 #605 #613 #626 #630 #631 #633 #669) - Thanks \@seratch \@aaguilartablada \@aoberoi \@stevengill \@marshallino16 +- \[WebClient\] #681 #560 Enable using bool values for request parameters - Thanks \@roman-kachanovsky \@seratch +- \[WebClient\] #661 #678 Improve handling of required \"ids\" parameters (e.g., channel_ids, users) - Thanks \@seratch +- \[WebClient\] #680 Add non-conversation API deprecation warnings - Thanks \@seratch +- \[WebClient\] #671 #670 Enable passing None values for request parameters (they used to result in errors) - Thanks \@yuji38kwmt \@seratch +- \[WebClient\] #673 Fix #672 files.upload fails with a filepath containing multi byte chars - Thanks \@yuji38kwmt \@seratch +- \[WebClient\] #656 Fix #594 preview_image for files.remote.add API method is not properly supported - Thanks \@Eothred \@seratch +- \[Maintenance\] #618 Add py.typed file to package distribution - Thanks \@JKillian +- \[WebClient\] #599 Strip token string parameters of whitespace - Thanks \@TheFrozenFire +- \[WebClient\] #692 Fix superfluous_charset warnings since v2.4.0 - Thanks \@seratch +- \[WebClient\] #652 Update oauth_v2_access to include redirect_uri (as optional) - Thanks \@tomasreimers + +## v2.5.0 (2019-12-09) + +**New Features** + +- \[WebClient\] Adding new oauth.v2.access Web API method. #577 + +## v2.4.0 (2019-11-27) + +**New Features** + +- \[WebClient\] Adding new admin.\* Web API methods. #571 + +**Updates** + +- \[WebClient\] We\'re no longer validating token types for Web API methods. Improves compatibility with granular bot permissions. #568 (Thanks \@Smotko) +- \[WebClient\] Correcting typos in descriptions #554 (Thanks \@phamk) +- \[WebClient\] Fixed \'iteracting\' typo in library file headers #564 (Thanks \@acabey) +- \[Message Builders\] Remove value from LinkButtonElement #563 (Thanks \@pedroma) + +## v2.3.1 (2019-10-29) + +**Updates** + +- \[WebClient\] Fixing a regression that causes the client to close sessions prematurely. #544 (Thanks \@fatih-acar!) +- \[WebClient\] Adding required missing view param to views.update Web API method. #542 + +## v2.3.0 (2019-10-22) + +**New Features** + +- \[WebClient\] Adding new views.publish Web API method. #540 + +**Updates** + +- \[WebClient\] Some server responses don\'t return json. Correcting initial assumption. #540 +- \[Maintenance\] Add `py.typed` to mark the library to support type hinting #524s + +## v2.2.1 (2019-10-08) + +**Updates** + +- \[Docs\] Fix Indentation of Code Snippets in README.md #525 (Thanks \@abhishekjiitr) +- \[WebClient\] Fix Web Client custom iterator #521 (Thanks \@smaeda-ks) +- \[WebClient\] Oauth previously failed to pass along credentials properly. This is fixed now. #527 +- \[WebClient\] When a SlackApiError occurs we\'re now passing the entire SlackResponse into the exception. #527 + +## v2.2.0 (2019-09-25) + +**New Features** + +- \[WebClient\] Adding new admin and remote files API methods. #501 +- \[WebClient\] Adding new view API methods. #517 + +**Updates** + +- \[Message Builders\] Update BlockAttachment to not send invalid JSON due to fields attribute #473 (Thanks \@paul-griffith) +- \[Docs\] Add RTM section for docs v2 #477 (Thanks \@shanedewael) +- \[Docs\] Fix typo; recieved -\> received #478 (Thanks \@joakimnordling) +- \[Docs\] Fix block kit link & update docs #484 (Thanks \@clavin) +- \[RTMClient\] Return callback from `RTMClient.run_on` #490 (Thanks \@clavin) +- \[Docs\] Fix link to Auth Guide in readme #498 (Thanks \@asherf) +- \[Docs\] Fix missing word and typo #512 (Thanks \@marks) +- \[Message Builders\] bugfix for value length in button elements #514 (Thanks \@avanderm) +- \[Docs\] Fixes formatting #515 (Thanks \@vpetersson) +- \[Docs\] Improve a code snippet on README #516 (Thanks \@seratch) +- \[WebClient\] Fixed an OAuth Headers bug and made the `token` param optional. #517 + +## v2.1.0 (2019-07-01) + +**New Features** + +- Type-hinted helper classes for building messages in v2 #400 (Thanks \@paul-griffith) + +**Breaking Changes** + +- \[RTMClient\] Converted the `RTMClient#typing()` function to async #446 + +**Updates** + +- \[RTMClient\] Handle case in which aiohttp closes the websocket due to lack of ping responses. #453 (Thanks \@flyte) +- Modify package identifier in user agent to match v1.x identifier #418 (Thanks \@aoberoi) +- \[WebClient\] Fixed typo in Scheduled message #428 & #435 (Thanks \@splinterific) +- Transform install_requires of \'aiodns\' into extras_require. #440 (Thanks \@staticdev) + +**Thank you!** To everyone who has opened, commented or reacted to an issue; this project is better because of you! Thank you for helping the Slack community! + +## v2.0.0 (2019-04-29) + +[Original RFC](https://github.com/slackapi/python-slackclient/issues/384) + +[v2 PR](https://github.com/slackapi/python-slackclient/pull/394) + +**New Features** + +- Client Decomposition: We've split the client into two. + - WebClient: A HTTP client focused on Slack\'s Web API. + - RTMClient: A websocket client focused on Slack\'s RTM API. +- RTMClient: Completely redesigned, this client allows you to link your application\'s callbacks to corresponding Slack events. +- WebClient: The WebClient now provides built-in methods for Slack\'s Web API. These methods act as helpers enabling you to focus less on how the request is constructed. Here are a few things this provides: + - Basic information about each method through the docstring. + - Easy File Uploads: You can now pass in the location of a file and the library will handle opening and retrieving the file object to be transmitted. + - Token type validation: This gives you better error messaging when you\'re attempting to consume an API method that your token doesn\'t have access to. + - Constructs requests using Slack\'s preferred HTTP methods and content-types. + +**Breaking Changes:** If you\'re migrating from v1.x of slackclient to v2.x, Please follow our [migration guide](https://github.com/slackapi/python-slackclient/wiki/Migrating-to-2.x) to ensure your app continues working after updating. + +**Thank you!** This release would not have been possible without the support of our community. Thank you to everyone who has contributed to this release. + +## v1.3.1 (2019-02-28) + +- Lock websocket-client version to \< 0.55.0: temp fix for #385 + +## v1.3.0 (2018-09-11) + +**New Features** + +- Adds support for short lived tokens and automatic token refresh #347 (Thanks \@roach!) + +**Other** + +- Update RTM rate limiting comment and error message #308 (Thanks \@benoitlavigne!) +- Use logging instead of traceback #309 (Thanks \@harlowja!) +- Remove Python 3.3 from test environments #346 (Thanks \@roach!) +- Enforced linting when using VSCode. #347 (Thanks \@roach!) + +## v1.2.1 (2018-03-26) + +- Added rate limit handling for rtm connections (thanks \@jayalane!) + +## v1.2.0 (2018-03-20) + +- You can now tell the RTM client to automatically reconnect by passing `auto_reconnect=True` + +## v1.1.3 (2018-03-01) + +- Fixed another API param encoding bug. It encodes things properly now. + +## v1.1.2 (2018-01-31) + +- Fixed an encoding issue which was encoding some Web API params incorrectly + +## v1.1.1 (2018-01-30) + +- Adds HTTP response headers to `api_call` responses to expose things like rate limit info +- Moves `token` into auth header rather than request params + +## v1.1.0 (2017-11-21) + +- Adds new SlackClientError and ResponseParseError types to describe errors - thanks \@aoberoi! +- Fix Build Error (#245) - thanks \@stasfilin! +- Include email as user property (#173) - thanks \@acaire! +- Add http reply into slack login and slack connection error (#216) - thanks \@harlowja! +- Removed unused exception class (#233) +- Fix rtm_send_message bug (#225) - thanks \@kt5356! +- Allow use of custom parameters on rtm_connect() (#210) - thanks \@kamushadenes! +- Fix link to rtm.connect docs (#223) - \@sampart! + +## v1.0.9 (2017-08-31) + +- Fixed rtm_send_message ID bug introduced in 1.0.8 + +## v1.0.8 (2017-08-31) + +- Added rtm.connect support + +## v1.0.7 (2017-08-02) + +- Fixes an issue where connecting over RTM to large teams may result in "Websocket URL expired" errors +- A bunch of packaging improvements + +## v1.0.6 (2017-06-12) + +- Added proxy support (thanks \@timfeirg!) +- Tidied up docs (thanks \@schlueter!) +- Added tox settings for Python 3 testing (thanks \@cclauss!) + +## v1.0.5 (2017-01-23) + +- Allow RTM Channel.send_message to reply to a thread +- Index users by ID instead of Name (non-breaking change) +- Added timeout to api calls +- Fixed a typo about token access in auth.rst, thanks \@kelvintaywl! +- Added Message Threads to the docs + +## v1.0.4 (2016-12-15) + +- Fixed the ability to search for a user by ID + +## v1.0.3 (2016-12-13) + +- Fixed an issue causing RTM connections to fail for large teams + +## v1.0.2 (2016-09-22) + +- Removed unused ping counter +- Fixed contributor guidelines links +- Updated documentation +- Fix bug preventing API calls requiring a file ID +- Removes files from api_calls before JSON encoding, so the request is properly formatted + +## v1.0.1 (2016-03-25) + +- Fix for \_\_eq\_\_ comparison in channels using \'#\' in channel name +- Added copyright info to the LICENSE file + +## v1.0.0 (2016-02-28) + +- The `api_call` function now returns a decoded JSON object, rather than a JSON encoded string +- Some `api_call` calls now call actions on the parent server object: + - `dm.open` + - `mpdm.open`, `groups.create`, `groups.createChild` + - `channels.create`, `channels.join` + +## v0.18.0 (2016-02-21) + +- Moves to use semver for versioning +- Adds support for private groups and MPDMs +- Switches to use requests instead of urllib +- Gets Travis CI integration working +- Fixes some formatting issues so the code will work for python 2.6 +- Cleans up some unused imports, some PEP-8 fixes and a couple bad default args fixes + +## v0.17.0 (2016-02-15) + +- Fixes the server so that it doesn\'t add duplicate users or channels to its internal lists, https://github.com/slackapi/python-slackclient/commit/0cb4bcd6e887b428e27e8059b6278b86ee661aaa +- README updates: + - Updates the URLs pointing to Slack docs for configuring authentication, https://github.com/slackapi/python-slackclient/commit/7d01515cebc80918a29100b0e4793790eb83e7b9 + - s/channnels/channels, https://github.com/slackapi/python-slackclient/commit/d45285d2f1025899dcd65e259624ee73771f94bb + - Adds users to the local cache when they join the team, https://github.com/slackapi/python-slackclient/commit/f7bb8889580cc34471ba1ddc05afc34d1a5efa23 + - Fixes urllib py 2/3 compatibility, https://github.com/slackapi/python-slackclient/commit/1046cc2375a85a22e94573e2aad954ba7287c886 diff --git a/docs/english/legacy/conversations.md b/docs/english/legacy/conversations.md new file mode 100644 index 000000000..e617273ae --- /dev/null +++ b/docs/english/legacy/conversations.md @@ -0,0 +1,123 @@ +# Conversations API + +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] + +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. + +::: + +The Slack Conversations API provides your app with a unified interface to work with all the channel-like things encountered in Slack: public channels, private channels, direct messages, group direct messages, and shared channels. + +Refer to [using the Conversations API](/apis/web-api/using-the-conversations-api) for more information. + +## Direct messages {#direct-messages} + +The `conversations.open` API method opens either a 1:1 direct message with a single user or a multi-person direct message, depending on the number of users supplied to the `users` parameter. (For public or private channels, use the `conversations.create` API method.) + +Provide a `users` parameter as an array with 1-8 user IDs to open or resume a conversation. Providing only 1 ID will create a direct message. providing more IDs will create a new multi-party direct message or will resume an existing conversation. + +Subsequent calls with the same set of users will return the already existing conversation. + +``` python +import os +from slack import WebClient + +client = WebClient(token=os.environ["SLACK_API_TOKEN"]) +response = client.conversations_open(users=["W123456789", "U987654321"]) +``` + +See the [`conversations.open`](/reference/methods/conversations.open) API method for additional details. + +## Creating channels {#creating-channels} + +Creates a new channel, either public or private. The `name` parameter is required and may contain numbers, letters, hyphens, or underscores, and must contain fewer than 80 characters. To make the channel private, set the optional `is_private` parameter to `True`. + +``` python +import os +from slack import WebClient +from time import time + +client = WebClient(token=os.environ["SLACK_API_TOKEN"]) +channel_name = f"my-private-channel-{round(time())}" +response = client.conversations_create( + name=channel_name, + is_private=True +) +channel_id = response["channel"]["id"] +response = client.conversations_archive(channel=channel_id) +``` + +See the [`conversations.create`](/reference/methods/conversations.create) API method for additional details. + +## Getting conversation information {#more-information} + +To retrieve a set of metadata about a channel (public, private, DM, or multi-party DM), use the `conversations.info` API method. The `channel` parameter is required and must be a valid channel ID. The optional `include_locale` boolean parameter will return locale data, which may be useful if you wish to return localized responses. The `include_num_members` boolean parameter will return the number of people in a channel. + +``` python +import os +from slack import WebClient + +client = WebClient(token=os.environ["SLACK_API_TOKEN"]) +response = client.conversations_info( + channel="C031415926", + include_num_members=1 +) +``` + +See the [`conversations.info`](/reference/methods/conversations.info) API method for more details. + +## Listing conversations {#listing-conversations} + +To get a list of all the conversations in a workspace, use the `conversations.list` API method. By default, only public conversations are returned. Use the `types` parameter specify which types of conversations you're interested in. Note that `types` is a string of comma-separated values. + +``` python +import os +from slack import WebClient + +client = WebClient(token=os.environ["SLACK_API_TOKEN"]) +response = client.conversations_list() +conversations = response["channels"] +``` + +Use the `types` parameter to request additional channels, including `public_channel`, `private_channel`, `mpdm`, and `dm`. This parameter is a string of comma-separated values. + +``` python +import os +from slack import WebClient + +client = WebClient(token=os.environ["SLACK_API_TOKEN"]) +response = client.conversations_list( + types="public_channel, private_channel" +) +``` + +See the [`conversations.list`](/reference/methods/conversations.list) API method for more details. + +## Getting members of a conversation {#get-members} + +To get a list of members for a conversation, use the `conversations.members` API method with the required `channel` parameter. + +``` python +import os +from slack import WebClient + +client = WebClient(token=os.environ["SLACK_API_TOKEN"]) +response = client.conversations_members(channel="C16180339") +user_ids = response["members"] +``` + +See the [`conversations.members`](/reference/methods/conversations.members) API method for more details. + +## Leaving a conversation {#leave-conversations} + +To leave a conversation, use the `conversations.leave` API method with the required `channel` parameter containing the ID of the channel to leave. + +``` python +import os +from slack import WebClient + +client = WebClient(token=os.environ["SLACK_API_TOKEN"]) +response = client.conversations_leave(channel="C27182818") +``` + +See the [`conversations.leave`](/reference/methods/conversations.leave) API method for more details. diff --git a/docs/english/legacy/faq.md b/docs/english/legacy/faq.md new file mode 100644 index 000000000..bc2d70fa0 --- /dev/null +++ b/docs/english/legacy/faq.md @@ -0,0 +1,70 @@ +# FAQs + +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] + +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. + +::: + +## Why can't I install `slackclient`? + +We recommend using [virtualenv (venv)](https://docs.python.org/3/tutorial/venv.html) to set up your +Python runtime as follows: + +``` bash +# Create a dedicated virtual env for running your Python scripts +python -m venv env + +# Run env\Scripts\activate on Windows OS +source env/bin/activate + +# Install slackclient PyPI package +pip install "slackclient>=2.0" + +# Set your token as an env variable (`set` command for Windows OS) +export SLACK_API_TOKEN=xoxb-*** +``` + +Then, verify the following code works on the Python REPL (you can start it using just `python`): + +``` python +import os +import logging +from slack import WebClient +logging.basicConfig(level=logging.DEBUG) +client = WebClient(token=os.environ["SLACK_API_TOKEN"]) +res = client.api_test() +``` + +If you encounter an error saying +`AttributeError: module 'slack' has no attribute 'WebClient'`, run +`pip list`. If you find both `slackclient` and `slack` in the output, +try removing `slack` by `pip uninstall slack` and reinstalling +`slackclient`. + +## Should I go with `run_async`? + +For most cases, we recommend going with `run_async=False` mode. So, the default is `False`. + +If your application turns `run_async` on, the app should follow efficient ways to use [asyncio](https://docs.python.org/3/library/asyncio.html)'s non-blocking event loops and [aiohttp](https://docs.aiohttp.org/en/stable/). Also, consider using async frameworks and their appropriate runtime. Running event loops along with Flask or similar may not be a good fit. + +If you have to simultaneously run `WebClient` with `run_async=True` outside an event loop for some reason, sharing a single `WebClient` instance doesn't work for you. Create an instance every time you run the code. The `run_async=False` mode doesn't have such issues. + +## What if I found a bug? + +That's great! Thank you. Let us know by [creating an issue](https://github.com/slackapi/python-slack-sdk/issues/new/choose), or if you're feeling particularly ambitious, why not submit a pull request with a bug fix? Check out our contributor's guide [here](https://github.com/SlackAPI/python-slack-sdk/blob/main/.github/contributing.md). + +## What if I have a feature suggestion? + +There's always something more that could be added! Let us know by [creating an issue](https://github.com/slackapi/python-slack-sdk/issues/new/choose) to start a discussion around the proposed feature. If you're feeling particularly ambitious, why not write the feature yourself, and submit a pull request? We love feedback and we also love help from our amazing community of developers! + +## How do I contribute? + +What an excellent question. First of all, please have a look at our +contributor's guide [here](https://github.com/SlackAPI/python-slack-sdk/blob/main/.github/contributing.md). + +All done? Great! While we're super excited to incorporate your new feature, there are a couple of things we want to make sure you've given thought to: +* Please include unit tests for your new code. But don't just aim to increase the test coverage, rather, we expect you to have written thoughtful tests that ensure your new feature will continue to work as expected, and to help future contributors to ensure they don't break it! +* Please document your new feature. Think about concrete use cases for your feature, and add a section to the appropriate document, including a complete sample program that demonstrates your feature. + +Including these two items with your pull request will totally make our day - and, more importantly, your future users' days! diff --git a/docs/english/legacy/index.md b/docs/english/legacy/index.md new file mode 100644 index 000000000..e2ca20613 --- /dev/null +++ b/docs/english/legacy/index.md @@ -0,0 +1,57 @@ +# Overview + +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] + +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. + +::: + +Refer to the [migration guide](/tools/python-slack-sdk/v3-migration) to learn how to smoothly migrate your existing code. + +Slack APIs allow anyone to build full featured integrations that extend and expand the capabilities of your Slack workspace. These APIs allow you to build applications that interact with Slack just like the people on your team. They can post messages, respond to events that happen, and build complex UIs for getting work done. + +To make it easier for Python programmers to build Slack applications, we've provided this open source SDK that will help you get started building Python apps as quickly as possible. The current version is built for Python 3.7 and higher. + +## Slack platform basics {#platform-basics} + +If you're new to the Slack platform, we have a general purpose [quickstart guide](/quickstart) that isn't specific to any language or framework. Its a great place to learn all about the concepts that go into building a great Slack app. + +Before you get started building on the Slack platform, you need to set up [your app's configuration](https://api.slack.com/apps/new). This is where you define things like your apps permissions and the endpoints that Slack should use for interacting with the backend you'll build using Python. + +The app configuration page is also where you'll acquire the OAuth token you'll use to call Slack API methods. Treat this token with care, just like you would a password, because it has access to your workspace and can potentially read and write data to and from it. + +## Installation {#installation} + +We recommend using [PyPI](https://pypi.python.org/pypi) to install as follows: + +``` bash +pip install slackclient +``` + +Of course, you can always pull the source code directly into your project like this: + +``` bash +git clone https://github.com/slackapi/python-slackclient.git +``` + +And then, save a few lines of code as `./test.py` like so: + +``` python +# test.py +import sys +# Load the local source directly +sys.path.insert(1, "./python-slackclient") +# Enable debug logging +import logging +logging.basicConfig(level=logging.DEBUG) +# Verify it works +from slack import WebClient +client = WebClient() +api_response = client.api_test() +``` + +Run the code as follows: + +``` bash +python test.py +``` diff --git a/docs/english/legacy/real_time_messaging.md b/docs/english/legacy/real_time_messaging.md new file mode 100644 index 000000000..3b16e3ecd --- /dev/null +++ b/docs/english/legacy/real_time_messaging.md @@ -0,0 +1,98 @@ +# Real Time Messaging (RTM) + +:::danger[The [`slackclient`](https://pypi.org/project/slackclient/) PyPI project is in maintenance mode and the [slack-sdk](https://pypi.org/project/slack-sdk/) project is its successor.] + +The v3 SDK provides additional features such as Socket Mode, OAuth flow, SCIM API, Audit Logs API, better async support, retry handlers, and more. + +::: + +The [Legacy Real Time Messaging (RTM) API](/legacy/legacy-rtm-api) is a WebSocket-based API that allows you to receive events from Slack in real time and to send messages as users. + +If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](/apis/events-api) instead. The Events API contains some events that aren't supported in the Legacy RTM API (such as the [app_home_opened event](/reference/events/app_home_opened)), and it supports most of the event types in the Legacy RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). + +The RTMClient allows apps to communicate with the Legacy RTM API. + +The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs, this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. + +In our example below, we watch for a [message event](/reference/events/message) that contains \"Hello\" and if it's received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. + +## Configuring the RTM API {#configuration} + +Events using the Legacy RTM API **must** use a Slack app with a plain `bot` scope. + +If you already have a Slack app with a plain `bot` scope, you can use those credentials. If you don't and need to use the Legacy RTM API, you can create a Slack app [here](https://api.slack.com/apps?new_classic_app=1). Even if the Slack app configuration pages encourage you to upgrade to a newer permission model, don't upgrade it and continue using the \"classic\" bot permission. + +## Connecting to the RTM API {#connecting} + +``` python +import os +from slack import RTMClient + +@RTMClient.run_on(event="message") +def say_hello(**payload): + data = payload['data'] + web_client = payload['web_client'] + + if 'Hello' in data['text']: + channel_id = data['channel'] + thread_ts = data['ts'] + user = data['user'] # This is not username but user ID (the format is either U*** or W***) + + web_client.chat_postMessage( + channel=channel_id, + text=f"Hi <@{user}>!", + thread_ts=thread_ts + ) + +slack_token = os.environ["SLACK_API_TOKEN"] +rtm_client = RTMClient(token=slack_token) +rtm_client.start() +``` + +## The `rtm.start` vs. `rtm.connect` API methods {#rtm-methods} + +By default, the RTM client uses the [`rtm.connect`](/reference/methods/rtm.connect) API method to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket URL. + +If you'd rather use the [`rtm.start`](/reference/methods/rtm.start) API method to establish the connection, which provides more information about the conversations and users on the team, you can set the `connect_method` option to `rtm.start` when instantiating the RTM Client. Note that on larger teams, use of `rtm.start` can be slow and unreliable. + +``` python +import os +from slack import RTMClient + +@RTMClient.run_on(event="message") +def say_hello(**payload): + data = payload['data'] + web_client = payload['web_client'] + if 'text' in data and 'Hello' in data['text']: + channel_id = data['channel'] + thread_ts = data['ts'] + user = data['user'] # This is not username but user ID (the format is either U*** or W***) + + web_client.chat_postMessage( + channel=channel_id, + text=f"Hi <@{user}>!", + thread_ts=thread_ts + ) + +slack_token = os.environ["SLACK_API_TOKEN"] +rtm_client = RTMClient( + token=slack_token, + connect_method='rtm.start' +) +rtm_client.start() +``` + +See the [`rtm.connect`](/reference/methods/rtm.connect) and [`rtm.start`](/reference/methods/rtm.start) API methods for more details. + +## RTM events {#rtm-events} + +``` javascript +{ + 'type': 'message', + 'ts': '1358878749.000002', + 'user': 'U023BECGF', + 'text': 'Hello' +} +``` + +Refer to the [Legacy RTM API](/legacy/legacy-rtm-api) page for more information. diff --git a/docs/content/oauth.md b/docs/english/oauth.md similarity index 74% rename from docs/content/oauth.md rename to docs/english/oauth.md index 6ab518d0b..61b9af98f 100644 --- a/docs/content/oauth.md +++ b/docs/english/oauth.md @@ -1,21 +1,18 @@ -# OAuth Modules +# OAuth modules -This section explains the details about how to handle the Slack OAuth flow. +This page explains how to handle the Slack OAuth flow. If you're looking for a much easier way to do this, check out [Bolt for Python](https://github.com/slackapi/bolt-python), a full-stack Slack app framework. With Bolt, you won't need to implement most of the following code on your own. -If you're looking for a much easier way to do the same, check [Bolt for Python](https://github.com/slackapi/bolt-python), which is a full-stack Slack App framework. With Bolt, you don't need to implement most of the following code on your own. +Refer to the [Python document for this module](https://docs.slack.dev/tools/python-slack-sdk/reference) for more details. -View the [Python document for this module](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/) +## App installation flow {#app-installation} +OAuth allows a user in any Slack workspace to install your app. At the end of the OAuth flow, your app gains an access token. Refer to the [installing with OAuth](/authentication/installing-with-oauth) guide for details. -## App Installation Flow +The Python Slack SDK provides the necessary modules for building the OAuth flow. -OAuth lets a user in any Slack workspace install your app. At the end of OAuth, your app gains an access token. Refer to [Installing with OAuth](https://api.slack.com/authentication/oauth-v2) for details. +### Starting an OAuth flow {#oauth-flow} -Python Slack SDK provides the necessary modules for building the OAuth flow. - -### Starting an OAuth flow - -The first step of Slack OAuth flow is to redirect a Slack user to [authorize](https://slack.com/oauth/v2/authorize) with a valid `state` parameter. To implement this process, you can use the following modules. +The first step of the OAuth flow is to redirect a Slack user to [authorize](https://slack.com/oauth/v2/authorize) with a valid `state` parameter. To implement this process, you can use the following modules. Module | What its for | Default Implementation ----------------------|-----------------------------------------|------------------------- @@ -23,8 +20,7 @@ Module | What its for | Default Im `OAuthStateStore` | Issue and consume `state` parameter value on the server-side. | `FileOAuthStateStore` `AuthorizeUrlGenerator` | Build https://slack.com/oauth/v2/authorize with sufficient query parameters | (same) -The code snippet below demonstrates how to build it using -[Flask](https://flask.palletsprojects.com/). +The code snippet below demonstrates how to build it using [Flask](https://flask.palletsprojects.com/). ``` python import os @@ -58,20 +54,13 @@ def oauth_start(): f'' ``` -When accessing `https://(your domain)/slack/install`, you will see \"Add -to Slack\" button in the webpage. You can start the app's installation -flow by clicking the button. +When accessing `https://(your domain)/slack/install`, you will see an \"Add to Slack\" button on the page. You can start the app's installation flow by clicking the button. -### Handling a callback request from Slack +### Handling a callback request from Slack {#handling-callback-requests} -If all's well, a user goes through the Slack app installation UI and -okays your app with all the scopes that it requests. After that happens, -Slack redirects the user back to your specified Redirect URL. +If all is well, a user goes through the Slack app installation UI and accepts all the scopes your app requests. After that happens, Slack redirects the user back to your specified Redirect URL. -The redirection gives you a `code` parameter. You can exchange the value -for an access token by calling -[oauth.v2.access](https://api.slack.com/methods/oauth.v2.access) API -method. +The redirection gives you a `code` parameter. You can exchange the value for an access token by calling the [oauth.v2.access](/reference/methods/oauth.v2.access) API method. ``` python from slack_sdk.web import WebClient @@ -140,12 +129,9 @@ def oauth_callback(): return make_response(f"Something is wrong with the installation (error: {html.escape(error)})", 400) ``` -## Token Lookup +## Token lookup {#token-lookup} -Now that your Flask app can choose the right access token for incoming -event requests, let's add the Slack event handler endpoint. - -You can use the same `InstallationStore` in the Slack event handler. +Now that your Flask app can choose the right access token for incoming event requests, let's add the Slack event handler endpoint. You can use the same `InstallationStore` in the Slack event handler. ``` python import json @@ -158,7 +144,7 @@ signature_verifier = SignatureVerifier(signing_secret=signing_secret) @app.route("/slack/events", methods=["POST"]) def slack_app(): # Verify incoming requests from Slack - # https://api.slack.com/authentication/verifying-requests-from-slack + # https://docs.slack.dev/authentication/verifying-requests-from-slack if not signature_verifier.is_valid( body=request.get_data(), timestamp=request.headers.get("X-Slack-Request-Timestamp"), @@ -234,17 +220,9 @@ def slack_app(): return make_response("", 404) ``` -Again, if you're looking for an easier solution, take a look at [Bolt -for Python](https://github.com/slackapi/bolt-python). With Bolt, you -don't need to implement most of the above code on your own. - -## Sign in with Slack +## Sign in with Slack {#siws} -[Sign in with Slack](https://api.slack.com/authentication/sign-in-with-slack) helps -users log into your service using their Slack profile. The platform -feature was recently upgraded to be compatible with the standard [OpenID -Connect](https://openid.net/connect/) specification. With slack-sdk -v3.9+, implementing the auth flow is much easier. +[Sign in with Slack](/authentication/sign-in-with-slack) helps users log into your service using their Slack profile. The platform feature was upgraded to be compatible with the standard [OpenID Connect](https://openid.net/connect/) specification. With slack-sdk v3.9+, implementing the OAuth flow is much easier. When you create a new Slack app, set the following user scopes: @@ -259,23 +237,15 @@ oauth_config: - profile # optional ``` -Check [the Flask app -example](https://github.com/slackapi/python-slack-sdk/blob/main/integration_tests/samples/openid_connect/flask_example.py) -to learn how to implement your Web app that handles the OpenID Connect -flow with end-users. It does the following: +Check [the Flask app example](https://github.com/slackapi/python-slack-sdk/blob/main/integration_tests/samples/openid_connect/flask_example.py) to learn how to implement an app that handles the OpenID Connect flow with your end-users as follows: **Build the OpenID Connect authorize URL** -- `slack_sdk.oauth.OpenIDConnectAuthorizeUrlGenerator` helps you - easily do this -- `slack_sdk.oauth.OAuthStateStore` is still available for generating - `state` parameter value. It's available for `nonce` management too. +- `slack_sdk.oauth.OpenIDConnectAuthorizeUrlGenerator` helps you do this. +- `slack_sdk.oauth.OAuthStateStore` is still available for generating the `state` parameter value. It's available for `nonce` management, too. **openid.connect.\* API calls** -`WebClient` can perform `openid.connect.token` API calls with given -`code` parameter +- `WebClient` can perform `openid.connect.token` API calls with given `code` parameter. -If you want to know the way with asyncio, check [the Sanic app -example](https://github.com/slackapi/python-slack-sdk/blob/main/integration_tests/samples/openid_connect/sanic_example.py) -in the same directory. +If you want to know the way with asyncio, check [the Sanic app example](https://github.com/slackapi/python-slack-sdk/blob/main/integration_tests/samples/openid_connect/sanic_example.py) in the same directory. diff --git a/docs/english/rtm.md b/docs/english/rtm.md new file mode 100644 index 000000000..d609aab04 --- /dev/null +++ b/docs/english/rtm.md @@ -0,0 +1,91 @@ +# RTM API client + +The [Legacy Real Time Messaging (RTM) API](/legacy/legacy-rtm-api) is a WebSocket-based API that allows you to receive events from Slack in real time and to send messages as users. + +If you prefer events to be pushed to your app, we recommend using the HTTP-based [Events API](/apis/events-api) instead. The Events API contains some events that aren't supported in the Legacy RTM API (such as the [app_home_opened event](/reference/events/app_home_opened)), and it supports most of the event types in the Legacy RTM API. If you'd like to use the Events API, you can use the [Python Slack Events Adaptor](https://github.com/slackapi/python-slack-events-api). + +The RTMClient allows apps to communicate with the Legacy RTM API. + +The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs, this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks. + +In our example below, we watch for a [message event](/reference/events/message) that contains \"Hello\" and if it's received, we call the `say_hello()` function. We then issue a call to the web client to post back to the channel saying \"Hi\" to the user. + +## Configuring the RTM API {#configuration} + +Events using the Legacy RTM API **must** use a Slack app with a plain `bot` scope. + +If you already have a Slack app with a plain `bot` scope, you can use those credentials. If you don't and need to use the Legacy RTM API, you can create a Slack app [here](https://api.slack.com/apps?new_classic_app=1). Even if the Slack app configuration pages encourage you to upgrade to a newer permission model, don't upgrade it and continue using the \"classic\" bot permission. + +## Connecting to the RTM API {#connecting} + +Note that the import here is not `from slack_sdk.rtm import RTMClient` but `from slack_sdk.rtm_v2 import RTMClient` (`_v2` is added in the latter one). + +``` python +import os +from slack_sdk.rtm_v2 import RTMClient + +rtm = RTMClient(token=os.environ["SLACK_BOT_TOKEN"]) + +@rtm.on("message") +def handle(client: RTMClient, event: dict): + if 'Hello' in event['text']: + channel_id = event['channel'] + thread_ts = event['ts'] + user = event['user'] # This is not username but user ID (the format is either U*** or W***) + + client.web_client.chat_postMessage( + channel=channel_id, + text=f"Hi <@{user}>!", + thread_ts=thread_ts + ) + +rtm.start() +``` + +## Connecting to the RTM API (v1 client) {#connecting-v1} + +Below is a code snippet that uses the legacy version of `RTMClient`. For new app development, we **do not recommend** using it as it contains issues that have been resolved in v2. Please refer to the [list of these issues](https://github.com/slackapi/python-slack-sdk/issues?q=is%3Aissue+is%3Aclosed+milestone%3A3.3.0+label%3Artm-client) for more details. + +``` python +import os +from slack_sdk.rtm import RTMClient + +@RTMClient.run_on(event="message") +def say_hello(**payload): + data = payload['data'] + web_client = payload['web_client'] + + if 'Hello' in data['text']: + channel_id = data['channel'] + thread_ts = data['ts'] + user = data['user'] # This is not username but user ID (the format is either U*** or W***) + + web_client.chat_postMessage( + channel=channel_id, + text=f"Hi <@{user}>!", + thread_ts=thread_ts + ) + +slack_token = os.environ["SLACK_BOT_TOKEN"] +rtm_client = RTMClient(token=slack_token) +rtm_client.start() +``` + +## The `rtm.start` vs. `rtm.connect` API methods (v1 client) {#rtm-methods} + +By default, the RTM client uses the [`rtm.connect`](/reference/methods/rtm.connect) API method to establish a WebSocket connection with Slack. The response contains basic information about the team and WebSocket URL. + +See the [`rtm.connect`](/reference/methods/rtm.connect) and [`rtm.start`](/reference/methods/rtm.start) API methods for more details. Note that `slack.rtm_v2.RTMClient` does not support `rtm.start`. + +## RTM events {#rtm-events} + +``` javascript +{ + 'type': 'message', + 'ts': '1358878749.000002', + 'user': 'U023BECGF', + 'text': 'Hello' +} +``` + +Refer to the [Legacy RTM events](/legacy/legacy-rtm-api#events) section for a complete list of events. diff --git a/docs/content/scim.md b/docs/english/scim.md similarity index 63% rename from docs/content/scim.md rename to docs/english/scim.md index 5ee562501..78f696056 100644 --- a/docs/content/scim.md +++ b/docs/english/scim.md @@ -1,18 +1,14 @@ -# SCIM API Client +# SCIM API client -[SCIM API](https://api.slack.com/scim) is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. +[SCIM](http://www.simplecloud.info/) is supported by a myriad of services. The SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -[SCIM (System for Cross-domain Identity Management)](http://www.simplecloud.info/) is supported by a myriad of services. It behaves slightly differently from other Slack APIs. +Refer to [using the Slack SCIM API](/admins/scim-api) for more details. -Refer to [the API document](https://api.slack.com/scim) for more details. +View the [Python document for this module](https://docs.slack.dev/tools/python-slack-sdk/reference). -View the [Python document for this module](https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/) +## SCIMClient {#scimclient} -## SCIMClient - -An OAuth token with [the admin scope](https://api.slack.com/scopes/admin) is required to access the SCIM API. - -To fetch provisioned user data, you can use the `search_users` method in the client. +An OAuth token with [the admin scope](/reference/scopes/admin) is required to access the SCIM API. To fetch provisioned user data, you can use the `search_users` method in the client. ``` python import os @@ -30,9 +26,7 @@ response.users # List[User] Check out [the class source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/scim/v1/user.py) to learn more about the structure of the `user` in `response.users`. -Similarly, the `search_groups` method is available and the shape of the -`Group` object can be [found -here](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/scim/v1/group.py). +Similarly, the `search_groups` method is available and the shape of the `Group` object can be [found here](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/scim/v1/group.py). ``` python response = client.search_groups( @@ -42,7 +36,7 @@ response = client.search_groups( response.groups # List[Group] ``` -For creating, updating, and deleting users/groups: +For creating, updating, and deleting users or groups: ``` python from slack_sdk.scim.v1.user import User, UserName, UserEmail @@ -78,10 +72,9 @@ update_result = client.update_user(user=user_to_update) delete_result = client.delete_user(user_to_update.id) ``` -## AsyncSCIMClient +## AsyncSCIMClient {#asyncscimclient} -Lastly, if you are keen to use asyncio for SCIM API calls, we offer -`AsyncSCIMClient` for it. This client relies on aiohttp library. +If you are keen to use asyncio for SCIM API calls, we offer `AsyncSCIMClient`. This client relies on the aiohttp library. ``` python import asyncio @@ -99,18 +92,11 @@ asyncio.run(main()) ------------------------------------------------------------------------ -## RetryHandler +## RetryHandler {#retryhandler} -With the default settings, only `ConnectionErrorRetryHandler` with its -default configuration (=only one retry in the manner of [exponential -backoff and -jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) -is enabled. The retry handler retries if an API client encounters a -connectivity-related failure (e.g., Connection reset by peer). +With the default settings, only `ConnectionErrorRetryHandler` with its default configuration (=only one retry in the manner of [exponential backoff and jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) is enabled. The retry handler retries if an API client encounters a connectivity-related failure (e.g., connection reset by peer). -To use other retry handlers, you can pass a list of `RetryHandler` to -the client constructor. For instance, you can add the built-in -`RateLimitErrorRetryHandler` this way: +To use other retry handlers, you can pass a list of `RetryHandler` to the client constructor. For instance, you can add the built-in `RateLimitErrorRetryHandler` this way: ``` python import os @@ -125,11 +111,7 @@ rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) client.retry_handlers.append(rate_limit_handler) ``` -Creating your own ones is also quite simple. Defining a new class that -inherits `slack_sdk.http_retry.RetryHandler` (`AsyncRetryHandler` for -asyncio apps) and implements required methods (internals of `can_retry` -/ `prepare_for_next_retry`). Check the built-in ones' source code for -learning how to properly implement. +You can also create one on your own by defining a new class that inherits `slack_sdk.http_retry RetryHandler` (`AsyncRetryHandler` for asyncio apps) and implements required methods (internals of `can_retry` / `prepare_for_next_retry`). Check out the source code for the ones that are built in to learn how to properly implement them. ``` python import socket @@ -162,10 +144,4 @@ client = SCIMClient( ) ``` -For asyncio apps, `Async` prefixed corresponding modules are available. -All the methods in those methods are async/await compatible. Check [the -source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) -and -[tests](https://github.com/slackapi/python-slack-sdk/blob/main/tests/slack_sdk_async/web/test_async_web_client_http_retry.py) -for more details. +For asyncio apps, `Async` prefixed corresponding modules are available. All the methods in those methods are async/await compatible. Check [the source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) for more details. diff --git a/docs/content/socket-mode.md b/docs/english/socket-mode.md similarity index 78% rename from docs/content/socket-mode.md rename to docs/english/socket-mode.md index 64f0af110..a1bf9984e 100644 --- a/docs/content/socket-mode.md +++ b/docs/english/socket-mode.md @@ -1,46 +1,27 @@ -# Socket Mode Client +# Socket Mode client -Socket Mode is a method of connecting your app to the Slack APIs using WebSockets instead of HTTP. You can use `slack_sdk.socket_mode.SocketModeClient` for managing [Socket Mode](https://api.slack.com/apis/connections/socket) connections and performing interactions with Slack. +Socket Mode is a method of connecting your app to the Slack APIs using WebSockets instead of HTTP. You can use `slack_sdk.socket_mode.SocketModeClient` for managing [Socket Mode](/apis/events-api/using-socket-mode) connections and performing interactions with Slack. -## Using Socket Mode +## Using Socket Mode {#socket-mode} -First off, let's start with enabling Socket Mode. Visit [the Slack App configuration page](http://api.slack.com/apps), choose the app you're working on, and go to **Settings** on the left pane. There are a few things to do on the page. - -- Go to **Settings** \> **Basic Information**, then add a new - **App-Level Token** with the `connections:write` scope - -- Go to **Settings** \> **Socket Mode**, then turn on **Enable Socket - Mode** - -- Go to **Features** \> **App Home**, look under **Show Tabs** \> - **Messages Tab** then turn on **Allow users to send Slash commands - and messages from the messages tab** - -- Go to **Features** \> **Event Subscriptions**, then turn on **Enable - Events** - -- On the same page expand **Subscribe to bot events** click **Add Bot User Event** and select **message.im**. This will allow the bot to get events for messages that are sent in 1:1 direct messages with itself - -- Go to **Features** \> **Interactivity and Shortcuts**, look under - *Shortcuts*\* click **Create a New Shortcut** then create a new - Global shortcut with the following details +Let's start with enabling Socket Mode. Visit [app page](http://api.slack.com/apps), choose the app you're working on, and go to **Settings** on the left pane. There are a few things to do on this page. +- Go to **Settings** \> **Basic Information**, then add a new **App-Level Token** with the `connections:write` scope. +- Go to **Settings** \> **Socket Mode**, then toggle on **Enable Socket Mode**. +- Go to **Features** \> **App Home**, look under **Show Tabs** \> **Messages Tab**, then toggle on **Allow users to send Slash commands and messages from the messages tab**. +- Go to **Features** \> **Event Subscriptions**, then toggle on **Enable Events**. +- On the same page, expand **Subscribe to bot events**, click **Add Bot User Event**, and select **message.im**. This will allow the bot to get events for messages that are sent in 1:1 direct messages with itself. +- Go to **Features** \> **Interactivity and Shortcuts**, look under *Shortcuts*\*, click **Create a New Shortcut**, then create a new Global shortcut with the following details: > **Name**: Hello > **Short Description**: Receive a Greeting > **Callback ID**: hello-shortcut + +- Go to **Features** \> **OAuth & Permissions** under **Scopes** \> **Bot Token Scopes**, click **Add an OAuth Scope**, and select **reactions:write**. This will allow the bot to add emoji reactions (Reacjis) to messages. +- Go to **Features** \> **Oauth & Permissions** under **OAuth Tokens for Your Workspace** and click **Install to Workspace**. -- Go to **Features** \> **OAuth & Permissions** under **Scopes** \> - **Bot Token Scopes** click **Add an OAuth Scope** and select - **reactions:write**. This will allow the bot to add emoji reactions (Reacjis) to messages. - -- Go to **Features** \> **Oauth & Permissions** under **OAuth Tokens - for Your Workspace** click **Install to Workspace** - -You will be using the app-level token that starts with `xapp-` prefix. -Note that the token here is not the ones starting with either `xoxb-` or -`xoxp-`. +You will be using the app-level token that starts with `xapp-`. Note that the token here is not one that starts with either `xoxb-` or `xoxp-`. ``` python import os @@ -123,12 +104,9 @@ Event().wait() --- -## Supported Libraries +## Supported libraries {#supported-libraries} -This SDK offers its own simple WebSocket client covering only required -features for Socket Mode. In addition to that, `SocketModeClient` is -implemented with a few 3rd party open-source libraries. If you prefer -any of the following, you can use it over the built-in one. +This SDK offers its own WebSocket client covering only required features for Socket Mode. In addition, `SocketModeClient` is implemented with a few 3rd party open source libraries. If you prefer any of the following, you can use it over the built-in one. |PyPI Project | SocketModeClient |--------------|------------------ @@ -137,10 +115,7 @@ any of the following, you can use it over the built-in one. | [`aiohttp`](https://pypi.org/project/aiohttp/) (asyncio-based) | [`slack_sdk.socket_mode.aiohttp.SocketModeClient`](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/socket_mode/aiohttp) | [`websockets`](https://pypi.org/project/websockets/) (asyncio-based) | [`slack_sdk.socket_mode.websockets.SocketModeClient`](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/socket_mode/websockets) -To use the -[`websocket_client`](https://pypi.org/project/websocket_client/) based -one, add [`websocket_client`](https://pypi.org/project/websocket_client/) -dependency and to change the import as below. +To use the [`websocket_client`](https://pypi.org/project/websocket_client/) based-one, add the[`websocket_client`](https://pypi.org/project/websocket_client/) dependency and change the import as below. ``` python # Note that the pockage is different @@ -152,17 +127,13 @@ client = SocketModeClient( ) ``` -You can pass a few additional arguments that are specific to the -library. Apart from that, all the functionalities work in the same way -with the built-in version. +You can pass a few additional arguments that are specific to the library. Apart from that, all the functionalities work in the same way as the built-in version. --- -## Asyncio Based Libraries +## Asyncio-based libraries {#asyncio-libraries} -To use the asyncio-based ones such as aiohttp, your app needs to be -compatible with asyncio's async/await programming model. The -`SocketModeClient` only works with `AsyncWebClient` and async listeners. +To use the asyncio-based ones such as aiohttp, your app needs to be compatible with asyncio's async/await programming model. The `SocketModeClient` only works with `AsyncWebClient` and async listeners. ``` python import asyncio diff --git a/docs/static/img/understanding-oauth-approve.png b/docs/english/tutorial/understanding-oauth-approve.png similarity index 100% rename from docs/static/img/understanding-oauth-approve.png rename to docs/english/tutorial/understanding-oauth-approve.png diff --git a/docs/static/img/understanding-oauth-flow.png b/docs/english/tutorial/understanding-oauth-flow.png similarity index 100% rename from docs/static/img/understanding-oauth-flow.png rename to docs/english/tutorial/understanding-oauth-flow.png diff --git a/docs/content/tutorial/understanding-oauth-scopes.md b/docs/english/tutorial/understanding-oauth-scopes.md similarity index 87% rename from docs/content/tutorial/understanding-oauth-scopes.md rename to docs/english/tutorial/understanding-oauth-scopes.md index 92112ae6e..fc1c96f9f 100644 --- a/docs/content/tutorial/understanding-oauth-scopes.md +++ b/docs/english/tutorial/understanding-oauth-scopes.md @@ -2,10 +2,10 @@ In this tutorial, we'll: -* explore Slack app permissioning and distribution using OAuth, and along the way, you'll learn how to identify which scopes your app needs and how to use OAuth to request them. -* build an app that sends a direct message to users joining a specific channel. Once installed in a workspace, it will create a new channel named **#the-welcome-channel** if it doesn’t already exist. The channel will be used to thank users for joining the channel. We'll also share code snippets from the app, but you can view the full source code on [GitHub](https://github.com/stevengill/slack-python-oauth-example). The code and implementation of OAuth is general enough that you should be able to follow along, even if Python isn't your preferred language. +* explore Slack app permissions and distribution using OAuth, and along the way, learn how to identify which scopes apps need and how to use OAuth to request them. +* build an app that sends a direct message to users joining a specific channel. Once installed in a workspace, it will create a new channel named **#the-welcome-channel** if it doesn’t already exist. The channel will be used to thank users for joining the channel. We'll also share code snippets from the app, but the full source code is available on [GitHub](https://github.com/stevengill/slack-python-oauth-example). The code and implementation of OAuth is general enough that you should be able to follow along, even if Python isn't your preferred language. -## Prerequisites +## Prerequisites {#prerequisites} Before we get started, ensure you have a development workspace with permissions to install apps. If you don’t have one set up, go ahead and [create one](https://slack.com/create). You also need to [create a new app](https://api.slack.com/apps/new) if you haven’t already. @@ -51,7 +51,7 @@ To determine which scopes we need, we should take a closer look at what our app resp = client.conversations_create(name="the-welcome-channel") ``` -3. When a user joins our newly created channel, our app sends them a direct message. To see when a user joins our channel, we need to listen for an event. Looking at our list of events, we see that `member_joined_channel` is the event that we need (_Note: events need to be added to your app’s configuration_). The scopes required for this event are `channels:read` and `groups:read` (same ones from step one). Now to send a direct message, we need to use the `chat.postMessage` method, which requires the `chat:write` scope. +3. When a user joins our newly created channel, our app sends them a direct message. To see when a user joins our channel, we need to listen for an event. Looking at our list of events, we see that `member_joined_channel` is the event that we need (_Note: events need to be added to your app’s configuration_). The scopes required for this event are `channels:read` and `groups:read` (same ones from step one). Now to send a direct message, we need to use the `chat.postMessage` API method, which requires the `chat:write` scope. ``` # Create an event listener for "member_joined_channel" events @@ -73,11 +73,11 @@ Our final list of scopes required are: ## Setting up OAuth and requesting scopes {#setup} -If you want users to be able to install your app on additional workspaces or from the [Slack Marketplace](https://api.slack.com/slack-marketplace/review-guide), you'll need to implement an OAuth flow. +If you want users to be able to install your app on additional workspaces or from the [Slack Marketplace](/slack-marketplace/slack-marketplace-review-guide), you'll need to implement an OAuth flow. -We'll be following the general flow of OAuth with Slack, which is covered in [Installing with OAuth](https://api.slack.com/authentication/oauth-v2) and nicely illustrated in the image below: +We'll be following the general flow of OAuth with Slack, which is covered in the [installing with OAuth](/authentication/installing-with-oauth) guide and nicely illustrated in the image below: -![OAuth flow](/img/understanding-oauth-flow.png) +![OAuth flow](understanding-oauth-flow.png) 1. **Requesting Scopes** @@ -112,13 +112,13 @@ We'll be following the general flow of OAuth with Slack, which is covered in [In The user will see the app installation UI (shown below) and will have the option to accept the permissions and allow the app to install to the workspace: - ![Approve installation](/img/understanding-oauth-approve.png) + ![Approve installation](understanding-oauth-approve.png) 3. **Exchanging a temporary authorization code for an access token** After the user approves the app, Slack will redirect the user to your specified Redirect URL. As we mentioned earlier, we did not include a `redirect_uri` in our **Add to Slack** button, so our app will use our Redirect URL specified on the app’s **OAuth and Permissions** page. - Our Redirect URL function will have to parse the HTTP request for the `code` and `state` query parameters. We need to check that the `state` parameter was created by our app. If it is, we can now exchange the `code` for an access token. To do this, we need to call the `oauth.v2.access` method with the `code`, `client_id`, and `client_secret`. This method will return the access token, which we can now save (preferably in a persistent database) and use for any of the Slack API method calls we make. (_Note: use this access token for all of the Slack API method calls we covered in the scopes section above_) + Our Redirect URL function will have to parse the HTTP request for the `code` and `state` query parameters. We need to check that the `state` parameter was created by our app. If it is, we can now exchange the `code` for an access token. To do this, we need to call the `oauth.v2.access` API method with the `code`, `client_id`, and `client_secret`. This method will return the access token, which we can now save (preferably in a persistent database) and use for any of the Slack API method calls we make. (_Note: use this access token for all of the Slack API method calls we covered in the scopes section above_) ``` # Grab client Secret from your environment variables @@ -160,4 +160,4 @@ We'll be following the general flow of OAuth with Slack, which is covered in [In At this point, you should feel more comfortable learning what scopes your app needs and using OAuth to request those scopes. A few resources you can check out next include: * [Slack-Python-OAuth-Example](https://github.com/stevengill/slack-python-oauth-example): we used code snippets from this app in this tutorial. The README contains more detailed information about running the app locally using ngrok, setting up a Redirect URL for OAuth, and setting up a request URL for events. -* Learn more about [Installing with OAuth](https://api.slack.com/authentication/oauth-v2). +* Learn more about [installing with OAuth](/authentication/installing-with-oauth). diff --git a/docs/static/img/upload-files-allow.png b/docs/english/tutorial/upload-files-allow.png similarity index 100% rename from docs/static/img/upload-files-allow.png rename to docs/english/tutorial/upload-files-allow.png diff --git a/docs/static/img/upload-files-bot-token.png b/docs/english/tutorial/upload-files-bot-token.png similarity index 100% rename from docs/static/img/upload-files-bot-token.png rename to docs/english/tutorial/upload-files-bot-token.png diff --git a/docs/static/img/upload-files-delete.png b/docs/english/tutorial/upload-files-delete.png similarity index 100% rename from docs/static/img/upload-files-delete.png rename to docs/english/tutorial/upload-files-delete.png diff --git a/docs/static/img/upload-files-first-upload.png b/docs/english/tutorial/upload-files-first-upload.png similarity index 100% rename from docs/static/img/upload-files-first-upload.png rename to docs/english/tutorial/upload-files-first-upload.png diff --git a/docs/static/img/upload-files-install.png b/docs/english/tutorial/upload-files-install.png similarity index 100% rename from docs/static/img/upload-files-install.png rename to docs/english/tutorial/upload-files-install.png diff --git a/docs/static/img/upload-files-invite-bot.gif b/docs/english/tutorial/upload-files-invite-bot.gif similarity index 100% rename from docs/static/img/upload-files-invite-bot.gif rename to docs/english/tutorial/upload-files-invite-bot.gif diff --git a/docs/static/img/upload-files-local-file.png b/docs/english/tutorial/upload-files-local-file.png similarity index 100% rename from docs/static/img/upload-files-local-file.png rename to docs/english/tutorial/upload-files-local-file.png diff --git a/docs/static/img/upload-files-with-channel.png b/docs/english/tutorial/upload-files-with-channel.png similarity index 100% rename from docs/static/img/upload-files-with-channel.png rename to docs/english/tutorial/upload-files-with-channel.png diff --git a/docs/content/tutorial/uploading-files.md b/docs/english/tutorial/uploading-files.md similarity index 93% rename from docs/content/tutorial/uploading-files.md rename to docs/english/tutorial/uploading-files.md index 93173c078..a9a624758 100644 --- a/docs/content/tutorial/uploading-files.md +++ b/docs/english/tutorial/uploading-files.md @@ -4,11 +4,11 @@ This tutorial details how to use the [`slack-sdk` package for Python](https://py ## Creating an app {#create-app} -First, [create a Slack app](https://api.slack.com/apps/new). +First, create a [Slack app](https://api.slack.com/apps/new). ## Configuring your app's settings with an app manifest {#configuration} -Creating your app using this method will include all the required settings for this tutorial, and you won't be bogged down with too many details — all you'll need to do is decide where this app will live. If you're curious about the inner workings of how this button works, refer to [App Manifests](https://api.slack.com/reference/manifests) for more information. +Creating your app using this method will include all the required settings for this tutorial, and you won't be bogged down with too many details - all you'll need to do is decide where this app will live. If you're curious about the inner workings of how this button works, refer to [App Manifests](/app-manifests) for more information. ```yaml _metadata: @@ -34,15 +34,15 @@ oauth_config: Once you've created your app, you'll see an **Install to Workspace** button. Click it to install your app in your workspace. -![Install to workspace](/img/upload-files-install.png) +![Install to workspace](upload-files-install.png) Next, click **Allow** to authorize the app in your workspace. -![Authorize app](/img/upload-files-allow.png) +![Authorize app](upload-files-allow.png) Navigate to the **Install App** section under **Settings**. Here, you'll find your `Bot User OAuth Token`. -![Get token](/img/upload-files-bot-token.png) +![Get token](upload-files-bot-token.png) Set this token value as an environment variable called `SLACK_BOT_TOKEN` by using the following command: @@ -56,7 +56,7 @@ With this, all your Slack app configuration is done. Let's start coding. ### Creating a new project {#create-new-project} -First, ensure you're using Python version 3.6 or above. While the current standard is for the `python3` and `pip3` commands to use Python 3.6 or above, it's best to ensure your runtime is always using the latest version of Python. [pyenv](https://github.com/pyenv/pyenv) is a handy tool that can do this for you. +First, ensure you're using Python version 3.7 or above. While the current standard is for the `python3` and `pip3` commands to use Python 3.7 or above, it's best to ensure your runtime is always using the latest version of Python. [pyenv](https://github.com/pyenv/pyenv) is a handy tool that can do this for you. We'll create a brand new virtual environment and install the required library dependencies using the following commands. @@ -72,7 +72,7 @@ pip install -r requirements.txt While it's possible to enter the following into the Python shell, we've gathered some code samples and wrote it in script form. -For each of the code samples, make sure to add in the following to the top of your Python file if you're going to run it as a script — the examples won't run without it. +For each of the code samples, make sure to add in the following to the top of your Python file if you're going to run it as a script - the examples won't run without it. ```python import logging, os @@ -164,7 +164,7 @@ In this example, we've used the channel name `C123456789`, but you'll need to fi Just like in the image below, mention the File Writer Bot and invite it to the `#random` channel. -![Invite to channel](/img/upload-files-invite-bot.gif) +![Invite to channel](upload-files-invite-bot.gif) Next, use the following code to retrieve the file's permalink and post it within a channel. @@ -178,7 +178,7 @@ new_message = client.chat_postMessage( By doing this, you'll be able to see the file within Slack. -![Upload file](/img/upload-files-first-upload.png) +![Upload file](upload-files-first-upload.png) ### Specifying a channel when uploading a file {#specifying-channel} @@ -196,7 +196,7 @@ upload_and_then_share_file = client.files_upload_v2( By running the above code, you'll share the same file without having to send a message with the file URL. -![Share file with message](/img/upload-files-with-channel.png) +![Share file with message](upload-files-with-channel.png) ### Uploading local files {#upload-local-files} @@ -219,7 +219,7 @@ upload_text_file = client.files_upload_v2( Again, we'll see that the file has been uploaded to Slack and shared within the `#random` channel. -![File uploaded](/img/upload-files-local-file.png) +![File uploaded](upload-files-local-file.png) ## Deleting a file {#deleting} @@ -252,12 +252,12 @@ for page in client.files_list(user=bot_user_id): Once we run this, the `files` array should be empty. The count for files found within the `paging` object may take a moment to reflect the actual number of files. You'll also notice within Slack that there are several `This file was deleted.` messages being shown. -![Delete a file](/img/upload-files-delete.png) +![Delete a file](upload-files-delete.png) -## Next steps {#next-steps} +## Next steps {#next} This tutorial summarized how to use the Slack API to upload files and share them within a channel, using the Python SDK. The same principles apply to other languages as well, so if Python isn't your fancy, feel free to try out our other SDKs: -* [Java SDK](https://tools.slack.dev/java-slack-sdk/) -* [Node Slack SDK](https://tools.slack.dev/node-slack-sdk/) -* [Deno Slack SDK](https://tools.slack.dev/deno-slack-sdk/) +* [Java Slack SDK](/tools/java-slack-sdk/) +* [Node Slack SDK](/tools/node-slack-sdk/) +* [Deno Slack SDK](/tools/deno-slack-sdk/) diff --git a/docs/english/v3-migration.md b/docs/english/v3-migration.md new file mode 100644 index 000000000..d599ac28a --- /dev/null +++ b/docs/english/v3-migration.md @@ -0,0 +1,224 @@ +--- +sidebar_label: Migrating from slackclient +--- + +# Migrating from v2.x to v3.x {#migrating} + +You may still view the legacy `slackclient` v2 [documentation](/tools/python-slack-sdk/legacy/). However, the **slackclient** project is in maintenance mode and this **slack_sdk** project is the successor. + +## From `slackclient` 2.x {#fromv2} + +There are a few changes introduced in v3.0: + +- The PyPI project has been renamed from `slackclient` to `slack_sdk`. +- Importing `slack_sdk.*` is recommended. You can still use `slack.*` with deprecation warnings. +- `slack_sdk` has no required dependencies. This means `aiohttp` is no longer automatically resolved. +- `WebClient` no longer has `run_async` and `aiohttp` specific options. If you still need the option or other `aiohttp` specific options, use `LegacyWebClient` (`slackclient` v2 compatible) or `AsyncWebClient`. + +We're sorry for the inconvenience. + +------------------------------------------------------------------------ + +**Change:** The PyPI project has been renamed from `slackclient` to `slack_sdk`. + +**Action**: Remove `slackclient`, add `slack_sdk` in `requirements.txt`. + +Since v3, the PyPI project name is [slack_sdk](https://pypi.org/project/slack_sdk/) (technically `slack-sdk` also works). + +The biggest reason for the renaming is the feature coverage in v3 and newer. The SDK v3 provides not only API clients, but also other modules. As the first step, it starts supporting OAuth flow out-of-the-box. The secondary reason is to make the names more consistent. The renaming addresses the long-lived confusion between the PyPI project and package names. + +------------------------------------------------------------------------ + +**Change:** Importing `slack_sdk.*` is recommended. You can still use `slack.*` with deprecation warnings. + +**Action**: Replace `from slack import`, `import slack`, etc. in your source code. + +Most imports can be simply replaced by `find your_app -name '*.py' | xargs sed -i '' 's/from slack /from slack_sdk /g'` or similar. If you use `slack.web.classes.*`, the conversion is not so simple that we recommend manually replacing imports for those. + +That said, all existing code can be migrated to v3 without any code changes. If you don't have time for it, you can use the `slack` package with deprecation warnings saying `UserWarning: slack package is deprecated. Please use slack_sdk.web/webhook/rtm package instead. For more info, go to https://tools slack.dev/python-slack-sdk/v3-migration/` for a while. + +------------------------------------------------------------------------ + +**Change:** `slack_sdk` has no required dependencies. This means `aiohttp` is no longer automatically resolved. + +**Action**: Add `aiohttp` to `requirements.txt` if you use any of `AsyncWebClient`, `AsyncWebhookClient`, and `LegacyWebClient`. + +If you use some modules that require `aiohttp`, your `requirements.txt` needs to explicitly list `aiohttp`. The `slack_sdk` dependency doesn't resolve it for you, unlike `slackclient` v2. + +------------------------------------------------------------------------ + +**Change:** `WebClient` no longer has `run_async` and `aiohttp` specific options. + +**Action:** If you still need the option or other `aiohttp` specific options, use `LegacyWebClient` (`slackclient` v2 compatible) or `AsyncWebClient`. + +The new `slack_sdk.web.WebClient` doesn't rely on `aiohttp` internally at all. The class provides only the synchronous way to call Web APIs. If you need a v2 compatible one, you can use `LegacyWebClient`. Apart from the name, there is no breaking change in the class. + +If you're using `run_async=True` option, we highly recommend switching to `AsyncWebClient`. `AsyncWebClient` is a straight-forward async HTTP client. You can expect the class properly works in the nature of `async/await` provided by the standard `asyncio` library. + +--- + +## Migration from v1.x to v2.x {#fromv1} + +If you're migrating from v1.x of `slackclient` to v2.x, here's what you need to change to ensure your app continues working after updating. + +:::info[We have completely rewritten this library and you should only upgrade once you have fully tested it in your development environment.] + +If you don't wish to upgrade yet, be sure to pin your module for the Python `slackclient` to `1.3.1`. + +::: + +### Minimum Python versions {#minimum-versions} + +`slackclient` v2.x requires Python 3.7 (or higher). + +Client v1 support: +- Python 2: Python 2.7 was supported in the 1.x version of the client up until Dec 31st, 2019. +- We’ll continue to add support for any new Slack features that are released as they become available on the platform. Support for token rotation is an example of a Slack feature. +- We will no longer be adding any new client-specific functionality to v1. Support for β€œasynchronous programming” is an example of a client feature. Another example is storing additional data on the client. +- We are no longer addressing bug or security fixes. +- Github branching: The `master` branch is used for v2 code. The `v1` branch is used for v1 code. + +### Import changes {#import-changes} + + The goal of this project is to provide a set of tools that ease the creation of Python Slack apps. To better align with this goal, we’re renaming the main module to `slack`. From `slack`, developers can import various tools. + +```Python +# Before: +# import slackclient + +# After: +from slack import WebClient +``` + +### RTM API changes {#RTM-changes} + +An RTMClient allows apps to communicate with the Slack platform's Legacy RTM API. This client allows you to link callbacks to their corresponding events. When an event occurs, this client executes your callback while passing along any information it receives. + +Example app in v1: + +Here's a simple example app that replies "Hi \<@userid\>!" in a thread if you send it a message containing "Hello". + +```Python +from slackclient import SlackClient + +slack_token = os.environ["SLACK_API_TOKEN"] +client = SlackClient(slack_token) + +def say_hello(data): + if 'Hello' in data['text']: + channel_id = data['channel'] + thread_ts = data['ts'] + user = data['user'] + + client.api_call('chat.postMessage', + channel=channel_id, + text="Hi <@{}>!".format(user), + thread_ts=thread_ts + ) + +if client.rtm_connect(): + while client.server.connected is True: + for data in client.rtm_read(): + if "type" in data and data["type"] == "message": + say_hello(data) +else: + print "Connection Failed" +``` + +Example App in v2: + +Here's that same example app that replies "Hi \<\@userid\>!" in a thread if you send it a message containing "Hello". + +```Python +import slack + +slack_token = os.environ["SLACK_API_TOKEN"] +rtmclient = slack.RTMClient(token=slack_token) + +@slack.RTMClient.run_on(event='message') +def say_hello(**payload): + data = payload['data'] + if 'Hello' in data['text']: + channel_id = data['channel'] + thread_ts = data['ts'] + user = data['user'] + + webclient = payload['web_client'] + webclient.chat_postMessage( + channel=channel_id, + text="Hi <@{}>!".format(user), + thread_ts=thread_ts + ) + +rtmclient.start() +``` + +**We no longer store any team data.** In the current 1.x version of the client, we store some channel and user information internally on [`Server.py`](https://github.com/slackapi/python-slackclient/blob/master/slackclient/server.py) in `client`. This data will now be available in the open event for consumption. Developers are then free to store any information they choose. Here's an example: + +```Python +# Retrieving the team domain. +# Before: +# team_domain = client.server.login_data["team"]["domain"] + +# After: +@slack.RTMClient.run_on(event='open') +def get_team_data(**payload): + team_domain = payload['data']['team']['domain'] +``` + +RTM usage has been completely redesigned. + +For new projects, we recommend using [Events API](/apis/events-api). This package `slackclient` v2 doesn't have any supports for Events API but you can try https://github.com/slackapi/python-slack-events-api that works as an enhancement of Flask web framework. + +In the near future, we'll be providing better supports for Events API in the official SDK. + +### Web Client API changes {#web-client-changes} + +**Token refresh removed**: + +This feature originally shipped as a part of workspace tokens. Since we've [gone in a new direction](https://medium.com/slack-developer-blog/the-latest-with-app-tokens-fe878d44130c) it's safe to remove this along with any related attributes stored on the client. + +- ~refresh_token~ +- ~token_update_callback~ +- ~client_id~ +- ~client_secret~ + +**`#api_call()`**: + +- `timeout` param has been removed. Timeout is passed at the client level now. +- `kwargs` param has been removed. You must specify where the data you pass belongs in the request. e.g. 'data' vs 'params' vs 'files'...etc +```Python +# Before: +# from slackclient import SlackClient +# +# client = SlackClient(os.environ["SLACK_API_TOKEN"]) +# client.api_call('chat.postMessage', +# timeout=30, +# channel='C0123456', +# text="Hi!") + +# After: + +import slack + +client = slack.WebClient(os.environ["SLACK_API_TOKEN"], timeout=30) +client.api_call('chat.postMessage', json={ + 'channel': 'C0123456', + 'text': 'Hi!'}) + +# Note: That while the above is allowed, the more efficient way to call that API is like this: +client.chat_postMessage( + channel='C0123456', + text='Hi!') +``` + +The WebClient provides built-in methods for the Slack Web API. These methods act as helpers, enabling you to focus less on how the request is constructed. Here are a few things this provides: + +- Basic information about each method through the docstring. +- Easy file uploads: You can pass in the location of a file and the library will handle opening and retrieving the file object to be transmitted. +- Token type validation: This gives you better error messaging when you're attempting to consume an API method your token doesn't have access to. +- Constructs requests using Slack preferred HTTP methods and content-types. + +### Error handling changes {#error-handling-changes} + +In version 1.x, a failed API call would return the error payload to you and expect you to handle the error. In version 2.x, a failed API call will throw an exception. To handle this in your code, you will have to wrap API calls with a `try except` block. diff --git a/docs/english/web.md b/docs/english/web.md new file mode 100644 index 000000000..b776ce5fd --- /dev/null +++ b/docs/english/web.md @@ -0,0 +1,793 @@ +# Web client + +The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box. + +Accessing Slack API methods requires an OAuth token β€” read more about [installing with OAuth](/authentication/installing-with-oauth). + +Each of these [API methods](/reference/methods) is fully documented on our developer site at [docs.slack.dev](/). + +## Sending a message {#sending-messages} + +One of the primary uses of Slack is posting messages to a channel using the channel ID, or as a DM to another person using their user ID. This method will handle either a channel ID or a user ID passed to the `channel` parameter. + +Your app's bot user needs to be in the channel (otherwise, you will get either `not_in_channel` or `channel_not_found` error code). If your app has the [chat:write.public](/reference/scopes/chat.write.public) scope, your app can post messages without joining a channel as long as the channel is public. See the [chat.postMessage](/reference/methods/chat.postMessage) API method for more info. + +``` python +import logging +logging.basicConfig(level=logging.DEBUG) + +import os +from slack_sdk import WebClient +from slack_sdk.errors import SlackApiError + +slack_token = os.environ["SLACK_BOT_TOKEN"] +client = WebClient(token=slack_token) + +try: + response = client.chat_postMessage( + channel="C0XXXXXX", + text="Hello from your app! :tada:" + ) +except SlackApiError as e: + # You will get a SlackApiError if "ok" is False + assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' +``` + +### Sending ephemeral messages + +Sending an ephemeral message, which is only visible to an assigned user in a specified channel, is nearly the same as sending a regular message but with an additional `user` parameter. + +``` python +import os +from slack_sdk import WebClient + +slack_token = os.environ["SLACK_BOT_TOKEN"] +client = WebClient(token=slack_token) + +response = client.chat_postEphemeral( + channel="C0XXXXXX", + text="Hello silently from your app! :tada:", + user="U0XXXXXXX" +) +``` + +See the [`chat.postEphemeral`](/reference/methods/chat.postEphemeral) API method for more details. + +### Sending streaming messages {#sending-streaming-messages} + +You can have your app's messages stream in to replicate conventional AI chatbot behavior. This is done through three Web API methods: + +* [`chat_startStream`](/reference/methods/chat.startStream) +* [`chat_appendStream`](/reference/methods/chat.appendStream) +* [`chat_stopStream`](/reference/methods/chat.stopStream) + +:::tip[The Python Slack SDK provides a [`chat_stream()`](https://docs.slack.dev/tools/python-slack-sdk/reference/web/client.html#slack_sdk.web.client.WebClient.chat_stream) helper utility to streamline calling these methods.] + +See the [_Streaming messages_](/tools/bolt-python/concepts/message-sending#streaming-messages) section of the Bolt for Python docs for implementation instructions. + +::: + +#### Starting the message stream {#starting-stream} + +First you need to begin the message stream: + +```python +# Example: Stream a response to any message +@app.message() +def handle_message(message, client): + channel_id = event.get("channel") + team_id = event.get("team") + thread_ts = event.get("thread_ts") or event.get("ts") + user_id = event.get("user") + + # Start a new message stream + stream_response = client.chat_startStream( + channel=channel_id, + recipient_team_id=team_id, + recipient_user_id=user_id, + thread_ts=thread_ts, + ) + stream_ts = stream_response["ts"] +``` + +#### Appending content to the message stream {#appending-stream} + +With the stream started, you can then append text to it in chunks to convey a streaming effect. + +The structure of the text coming in will depend on your source. The following code snippet uses OpenAI's response structure as an example: + +```python +# continued from above + for event in returned_message: + if event.type == "response.output_text.delta": + client.chat_appendStream( + channel=channel_id, + ts=stream_ts, + markdown_text=f"{event.delta}" + ) + else: + continue +``` + +#### Stopping the message stream {#stopping-stream} + +Your app can then end the stream with the `chat_stopStream` method: + +```python +# continued from above + client.chat_stopStream( + channel=channel_id, + ts=stream_ts + ) +``` + +The method also provides you an opportunity to request user feedback on your app's responses using the [feedback buttons](/reference/block-kit/block-elements/feedback-buttons-element) block element within the [context actions](/reference/block-kit/blocks/context-actions-block) block. The user will be presented with thumbs up and thumbs down buttons which send an action to your app when pressed. + +```python +def create_feedback_block() -> List[Block]: + blocks: List[Block] = [ + ContextActionsBlock( + elements=[ + FeedbackButtonsElement( + action_id="feedback", + positive_button=FeedbackButtonObject( + text="Good Response", + accessibility_label="Submit positive feedback on this response", + value="good-feedback", + ), + negative_button=FeedbackButtonObject( + text="Bad Response", + accessibility_label="Submit negative feedback on this response", + value="bad-feedback", + ), + ) + ] + ) + ] + return blocks + +@app.message() +def handle_message(message, client): + # ... previous streaming code ... + + # Stop the stream and add interactive elements + feedback_block = create_feedback_block() + client.chat_stopStream( + channel=channel_id, + ts=stream_ts, + blocks=feedback_block + ) +``` + +See [Formatting messages with Block Kit](#block-kit) below for more details on using Block Kit with messages. + +## Formatting messages with Block Kit {#block-kit} + +Messages posted from apps can contain more than just text; they can also include full user interfaces composed of blocks using [Block Kit](/block-kit). + +The [`chat.postMessage method`](/reference/methods/chat.postMessage) takes an optional blocks argument that allows you to customize the layout of a message. Blocks can be specified +in a single array of either dict values or [slack_sdk.models.blocks.Block](https://docs.slack.dev/tools/python-slack-sdk/reference/models/blocks/index.html) objects. + +To send a message to a channel, use the channel's ID. For DMs, use the user's ID. + +``` python +client.chat_postMessage( + channel="C0XXXXXX", + blocks=[ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Danny Torrence left the following review for your property:" + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": " \n :star: \n Doors had too many axe holes, guest in room " + + "237 was far too rowdy, whole place felt stuck in the 1920s." + }, + "accessory": { + "type": "image", + "image_url": "https://images.pexels.com/photos/750319/pexels-photo-750319.jpeg", + "alt_text": "Haunted hotel image" + } + }, + { + "type": "section", + "fields": [ + { + "type": "mrkdwn", + "text": "*Average Rating*\n1.0" + } + ] + } + ] +) +``` + +:::tip[You can use [Block Kit Builder](https://app.slack.com/block-kit-builder/) to prototype your message's look and feel.] + +::: + +## Threading messages {#threading-messages} + +Threaded messages are a way of grouping messages together to provide greater context. You can reply to a thread or start a new threaded conversation by simply passing the original message's `ts` ID in the `thread_ts` attribute when posting a message. If you're replying to a threaded message, you'll pass the `thread_ts` ID of the message you're replying to. + +A channel or DM conversation is a nearly linear timeline of messages exchanged between people, bots, and apps. When one of these messages is replied to, it becomes the parent of a thread. By default, threaded replies do not appear directly in the channel, but are instead relegated to a kind of forked timeline descending from the parent message. + +``` python +response = client.chat_postMessage( + channel="C0XXXXXX", + thread_ts="1476746830.000003", + text="Hello from your app! :tada:" +) +``` + +By default, the `reply_broadcast` parameter is set to `False`. To indicate your reply is germane to all members of a channel and therefore a notification of the reply should be posted in-channel, set the `reply_broadcast` parameter to `True`. + +``` python +response = client.chat_postMessage( + channel="C0XXXXXX", + thread_ts="1476746830.000003", + text="Hello from your app! :tada:", + reply_broadcast=True +) +``` +:::info[While threaded messages may contain attachments and message buttons, when your reply is broadcast to the channel, it'll actually be a reference to your reply and not the reply itself.] + +When appearing in the channel, it won't contain any attachments or message buttons. Updates and deletion of threaded replies works the same as regular messages. + +::: + +Refer to the [threading messages](/messaging#threading) page for more information. + +## Updating a message {#updating-messages} + +Let's say you have a bot that posts the status of a request. When that request changes, you'll want to update the message to reflect it's state. + +``` python +response = client.chat_update( + channel="C0XXXXXX", + ts="1476746830.000003", + text="updates from your app! :tada:" +) +``` + +See the [`chat.update`](/reference/methods/chat.update) API method for formatting options and some special considerations when calling this with a bot user. + +## Deleting a message {#deleting-messages} + +Sometimes you need to delete things. + +``` python +response = client.chat_delete( + channel="C0XXXXXX", + ts="1476745373.000002" +) +``` + +See the [`chat.delete`](/reference/methods/chat.delete) API method for more +details. + +## Conversations {#conversations} + +The Slack Conversations API provides your app with a unified interface to work with all the channel-like things encountered in Slack: public channels, private channels, direct messages, group direct messages, and shared channels. + +Refer to [using the Conversations API](/apis/web-api/using-the-conversations-api) for more information. + +### Direct messages {#direct-messages} + +The `conversations.open` API method opens either a 1:1 direct message with a single user or a multi-person direct message, depending on the number of users supplied to the `users` parameter. (For public or private channels, use the `conversations.create` API method.) + +Provide a `users` parameter as an array with 1-8 user IDs to open or resume a conversation. Providing only 1 ID will create a direct message. providing more IDs will create a new multi-party direct message or will resume an existing conversation. + +Subsequent calls with the same set of users will return the already existing conversation. + +``` python +import os +from slack_sdk import WebClient + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +response = client.conversations_open(users=["W123456789", "U987654321"]) +``` + +See the [`conversations.open`](/reference/methods/conversations.open) API method for additional details. + +### Creating channels {#creating-channels} + +Creates a new channel, either public or private. The `name` parameter is required and may contain numbers, letters, hyphens, or underscores, and must contain fewer than 80 characters. To make the channel private, set the optional `is_private` parameter to `True`. + +``` python +import os +from slack_sdk import WebClient +from time import time + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +channel_name = f"my-private-channel-{round(time())}" +response = client.conversations_create( + name=channel_name, + is_private=True +) +channel_id = response["channel"]["id"] +response = client.conversations_archive(channel=channel_id) +``` + +See the [`conversations.create`](/reference/methods/conversations.create) API method for additional details. + +### Getting conversation information {#getting-conversation-info} + +To retrieve a set of metadata about a channel (public, private, DM, or multi-party DM), use the `conversations.info` API method. The `channel` parameter is required and must be a valid channel ID. The optional `include_locale` boolean parameter will return locale data, which may be useful if you wish to return localized responses. The `include_num_members` boolean parameter will return the number of people in a channel. + +``` python +import os +from slack_sdk import WebClient + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +response = client.conversations_info( + channel="C031415926", + include_num_members=1 +) +``` + +See the [`conversations.info`](/reference/methods/conversations.info) API method for more details. + +### Listing conversations {#listing-conversations} + +To get a list of all the conversations in a workspace, use the `conversations.list` API method. By default, only public conversations are returned. Use the `types` parameter specify which types of conversations you're interested in. Note that `types` is a string of comma-separated values. + +``` python +import os +from slack_sdk import WebClient + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +response = client.conversations_list() +conversations = response["channels"] +``` + +Use the `types` parameter to request additional channels, including `public_channel`, `private_channel`, `mpdm`, and `dm`. This parameter is a string of comma-separated values. + +``` python +import os +from slack_sdk import WebClient + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +response = client.conversations_list( + types="public_channel, private_channel" +) +``` + +Archived channels are included by default. You can exclude them by passing `exclude_archived=True` to your request. + +``` python +response = client.conversations_list(exclude_archived=True) +``` + +See the [`conversations.list`](/reference/methods/conversations.list) API method for more details. + +### Getting members of a conversation {#getting-conversation-members} + +To get a list of members for a conversation, use the `conversations.members` API method with the required `channel` parameter. + +``` python +import os +from slack_sdk import WebClient + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +response = client.conversations_members(channel="C16180339") +user_ids = response["members"] +``` + +See the [`conversations.members`](/reference/methods/conversations.members) API method for more details. + +### Joining a conversation {#joining-conversations} + +Channels are the social hub of most Slack teams. Here's how you hop into one: + +``` python +response = client.conversations_join(channel="C0XXXXXXY") +``` + +If you are already in the channel, the response is slightly different. The `already_in_channel` attribute will be true, and a limited `channel` object will be returned. Bot users cannot join a channel on their own, they need to be invited by another user. + +See the [`conversations.join`](/reference/methods/conversations.join) API method for more details. + +### Leaving a conversation {#leaving-conversations} + +To leave a conversation, use the `conversations.leave` API method with the required `channel` parameter containing the ID of the channel to leave. + +``` python +import os +from slack_sdk import WebClient + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) +response = client.conversations_leave(channel="C27182818") +``` + +See the [`conversations.leave`](/reference/methods/conversations.leave) API method for more details. + +## Opening a modal {#opening-modals} + +Modals allow you to collect data from users and display dynamic information in a focused surface. Modals use the same blocks that compose messages, with the addition of an `input` block. + +``` python +from slack_sdk.signature import SignatureVerifier +signature_verifier = SignatureVerifier(os.environ["SLACK_SIGNING_SECRET"]) + +from flask import Flask, request, make_response, jsonify +app = Flask(__name__) + +@app.route("/slack/events", methods=["POST"]) +def slack_app(): + if not signature_verifier.is_valid_request(request.get_data(), request.headers): + return make_response("invalid request", 403) + + if "payload" in request.form: + payload = json.loads(request.form["payload"]) + if payload["type"] == "shortcut" and payload["callback_id"] == "test-shortcut": + # Open a new modal by a global shortcut + try: + api_response = client.views_open( + trigger_id=payload["trigger_id"], + view={ + "type": "modal", + "callback_id": "modal-id", + "title": { + "type": "plain_text", + "text": "Awesome Modal" + }, + "submit": { + "type": "plain_text", + "text": "Submit" + }, + "blocks": [ + { + "type": "input", + "block_id": "b-id", + "label": { + "type": "plain_text", + "text": "Input label", + }, + "element": { + "action_id": "a-id", + "type": "plain_text_input", + } + } + ] + } + ) + return make_response("", 200) + except SlackApiError as e: + code = e.response["error"] + return make_response(f"Failed to open a modal due to {code}", 200) + + if ( + payload["type"] == "view_submission" + and payload["view"]["callback_id"] == "modal-id" + ): + # Handle a data submission request from the modal + submitted_data = payload["view"]["state"]["values"] + print(submitted_data) # {'b-id': {'a-id': {'type': 'plain_text_input', 'value': 'your input'}}} + + # Close this modal with an empty response body + return make_response("", 200) + + return make_response("", 404) + +if __name__ == "__main__": + # export SLACK_SIGNING_SECRET=*** + # export SLACK_BOT_TOKEN=xoxb-*** + # export FLASK_ENV=development + # python3 app.py + app.run("localhost", 3000) +``` + +See the [`views.open`](/reference/methods/views.open) API method more details and additional parameters. + +Also, to run the above example, the following [Slack app +configurations](https://api.slack.com/apps) are required. + +To run the above example, the following [app configurations](https://api.slack.com/apps) are required: + +* Enable **Interactivity** with a valid Request URL: `https://{your-public-domain}/slack/events` +* Add a global shortcut with the callback ID: `open-modal-shortcut` + +## Updating and pushing modals {#updating-pushing-modals} + +In response to `view_submission` requests, you can tell Slack to update the current modal view by having `"response_action": update` and an updated view. There are also other `response_action` types, such as `errors` and `push`. Refer to the [modals](/surfaces/modals) page for more details. + +``` python +if ( + payload["type"] == "view_submission" + and payload["view"]["callback_id"] == "modal-id" +): + # Handle a data submission request from the modal + submitted_data = payload["view"]["state"]["values"] + print(submitted_data) # {'b-id': {'a-id': {'type': 'plain_text_input', 'value': 'your input'}}} + + # Update the modal with a new view + return make_response( + jsonify( + { + "response_action": "update", + "view": { + "type": "modal", + "title": {"type": "plain_text", "text": "Accepted"}, + "close": {"type": "plain_text", "text": "Close"}, + "blocks": [ + { + "type": "section", + "text": { + "type": "plain_text", + "text": "Thanks for submitting the data!", + }, + } + ], + }, + } + ), + 200, + ) +``` + +If your app modifies the current modal view when receiving `block_actions` requests from Slack, you can call the `views.update` API method with the given view ID. + +``` python +private_metadata = "any str data you want to store" +response = client.views_update( + view_id=payload["view"]["id"], + hash=payload["view"]["hash"], + view={ + "type": "modal", + "callback_id": "modal-id", + "private_metadata": private_metadata, + "title": { + "type": "plain_text", + "text": "Awesome Modal" + }, + "submit": { + "type": "plain_text", + "text": "Submit" + }, + "close": { + "type": "plain_text", + "text": "Cancel" + }, + "blocks": [ + { + "type": "input", + "block_id": "b-id", + "label": { + "type": "plain_text", + "text": "Input label", + }, + "element": { + "action_id": "a-id", + "type": "plain_text_input", + } + } + ] + } +) +``` + +See the [`views.update`](/reference/methods/views.update) API method for more details. + +If you want to push a new view onto the modal instead of updating an existing view, see the [`views.push`](/reference/methods/views.push) API method. + +## Emoji reactions {#emoji} + +You can quickly respond to any message on Slack with an emoji reaction. Reactions can be used for any purpose: voting, checking off to-do items, showing excitement, or just for fun. + +This method adds a reaction (emoji) to an item (`file`, `file comment`, `channel message`, `group message`, or `direct message`). One of `file`, `file_comment`, or the combination of `channel` and `timestamp` must be specified. Note that your app's bot user needs to be in the channel (otherwise, you will get either a `not_in_channel` or `channel_not_found` error code). + +``` python +response = client.reactions_add( + channel="C0XXXXXXX", + name="thumbsup", + timestamp="1234567890.123456" +) +``` + +Removing an emoji reaction is basically the same format, but you'll use the `reactions.remove` API method instead of the `reactions.add` API method. + +``` python +response = client.reactions_remove( + channel="C0XXXXXXX", + name="thumbsup", + timestamp="1234567890.123456" +) +``` + +See the [`reactions.add`](/reference/methods/reactions.add) and [`reactions.remove`](/reference/methods/reactions.remove) API methods for more details. + +## Uploading files {#upload-files} + +You can upload files to Slack and share them with people in channels. Note that your app's bot user needs to be in the channel (otherwise, you will get either `not_in_channel` or `channel_not_found` error code). + +``` python +response = client.files_upload_v2( + file="test.pdf", + title="Test upload", + channel="C3UKJTQAC", + initial_comment="Here is the latest version of the file!", +) +``` + +If you want to share files within a thread, you can pass `thread_ts` in addition to `channel_id` as shown below: + +``` python +response = client.files_upload_v2( + file="test.pdf", + title="Test upload", + channel="C3UKJTQAC", + thread_ts="1731398999.934122", + initial_comment="Here is the latest version of the file!", +) +``` + +See the [`files.upload`](/reference/methods/files.upload) API method for more details. + +## Adding a remote file {#adding-remote-files} + +You can add a file information that is stored in an external storage rather than in Slack. + +``` python +response = client.files_remote_add( + external_id="the-all-hands-deck-12345", + external_url="https://{your domain}/files/the-all-hands-deck-12345", + title="The All-hands Deck", + preview_image="./preview.png" # will be displayed in channels +) +``` + +See the [files.remote.add](/reference/methods/files.remote.add) API method for more details. + +## Calling API methods {#calling-API-methods} + +This library covers all the public endpoints as the methods in `WebClient`. That said, you may see a bit of a delay with the library release. When you're in a hurry, you can directly use the `api_call` method as below. + +``` python +import os +from slack_sdk import WebClient + +client = WebClient(token=os.environ['SLACK_BOT_TOKEN']) +response = client.api_call( + api_method='chat.postMessage', + params={'channel': '#random','text': "Hello world!"} +) +assert response["message"]["text"] == "Hello world!" +``` + +## AsyncWebClient {#asyncwebclient} + +The webhook client is available in asynchronous programming using the standard [asyncio](https://docs.python.org/3/library/asyncio.html) library. You use `AsyncWebhookClient` instead. `AsyncWebhookClient` internally relies on the [AIOHTTP](https://docs.aiohttp.org/en/stable/) library, but it is an optional dependency. To use this class, run `pip install aiohttp` beforehand. + +``` python +import asyncio +import os +# requires: pip install aiohttp +from slack_sdk.web.async_client import AsyncWebClient +from slack_sdk.errors import SlackApiError + +client = AsyncWebClient(token=os.environ['SLACK_API_TOKEN']) + +# This must be an async method +async def post_message(): + try: + # Don't forget `await` keyword here + response = await client.chat_postMessage( + channel='#random', + text="Hello world!" + ) + assert response["message"]["text"] == "Hello world!" + except SlackApiError as e: + assert e.response["ok"] is False + assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' + print(f"Got an error: {e.response['error']}") + +# This is the simplest way to run the async method +# but you can go with any ways to run it +asyncio.run(post_message()) +``` + +## RetryHandler {#retryhandler} + +With the default settings, only `ConnectionErrorRetryHandler` with its default configuration (=only one retry in the manner of [exponential backoff and jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) is enabled. The retry handler retries if an API client encounters a connectivity-related failure (e.g., connection reset by peer). + +To use other retry handlers, you can pass a list of `RetryHandler` to the client constructor. For instance, you can add the built-in `RateLimitErrorRetryHandler` this way: + +``` python +import os +from slack_sdk.web import WebClient +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) + +# This handler does retries when HTTP status 429 is returned +from slack_sdk.http_retry.builtin_handlers import RateLimitErrorRetryHandler +rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) + +# Enable rate limited error retries as well +client.retry_handlers.append(rate_limit_handler) +``` + +You can also create one on your own by defining a new class that inherits `slack_sdk.http_retry RetryHandler` (`AsyncRetryHandler` for asyncio apps) and implements required methods (internals of `can_retry` / `prepare_for_next_retry`). Check out the source code for the ones that are built in to learn how to properly implement them. + +``` python +import socket +from typing import Optional +from slack_sdk.http_retry import (RetryHandler, RetryState, HttpRequest, HttpResponse) +from slack_sdk.http_retry.builtin_interval_calculators import BackoffRetryIntervalCalculator +from slack_sdk.http_retry.jitter import RandomJitter + +class MyRetryHandler(RetryHandler): + def _can_retry( + self, + *, + state: RetryState, + request: HttpRequest, + response: Optional[HttpResponse] = None, + error: Optional[Exception] = None + ) -> bool: + # [Errno 104] Connection reset by peer + return error is not None and isinstance(error, socket.error) and error.errno == 104 + +client = WebClient( + token=os.environ["SLACK_BOT_TOKEN"], + retry_handlers=[MyRetryHandler( + max_retry_count=1, + interval_calculator=BackoffRetryIntervalCalculator( + backoff_factor=0.5, + jitter=RandomJitter(), + ), + )], +) +``` + +For asyncio apps, `Async` prefixed corresponding modules are available. All the methods in those methods are async/await compatible. Check [the source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) for more details. + +## Rate limits {#rate-limits} + +When posting messages to a channel, Slack allows apps to send no more than one message per channel per second. We allow bursts over that limit for short periods; however, if your app continues to exceed the limit over a longer period of time, it will be rate limited. Different API methods have other limits β€” be sure to check the [rate limits](/apis/web-api/rate-limits) and test that your app has a graceful fallback if it should hit those limits. + +If you go over these limits, Slack will begin returning *HTTP 429 Too Many Requests* errors, a JSON object containing the number of calls you have been making, and a *Retry-After* header containing the number of seconds until you can retry. + +Here's an example of how you might handle rate limited requests: + +``` python +import os +import time +from slack_sdk import WebClient +from slack_sdk.errors import SlackApiError + +client = WebClient(token=os.environ["SLACK_BOT_TOKEN"]) + +# Simple wrapper for sending a Slack message +def send_slack_message(channel, message): + return client.chat_postMessage( + channel=channel, + text=message + ) + +# Make the API call and save results to `response` +channel = "#random" +message = "Hello, from Python!" +# Do until being rate limited +while True: + try: + response = send_slack_message(channel, message) + except SlackApiError as e: + if e.response.status_code == 429: + # The `Retry-After` header will tell you how long to wait before retrying + delay = int(e.response.headers['Retry-After']) + print(f"Rate limited. Retrying in {delay} seconds") + time.sleep(delay) + response = send_slack_message(channel, message) + else: + # other errors + raise e +``` + +Since v3.9.0, the built-in `RateLimitErrorRetryHandler` is available as an easier way to do retries for rate limited errors. Refer to the [RetryHandler](#retryhandler) section for more details. + +Refer to the [rate limits](/apis/web-api/rate-limits) page for more information. diff --git a/docs/content/webhook.md b/docs/english/webhook.md similarity index 63% rename from docs/content/webhook.md rename to docs/english/webhook.md index 80428e7c5..feaa4c7a9 100644 --- a/docs/content/webhook.md +++ b/docs/english/webhook.md @@ -1,10 +1,10 @@ -# Webhook Client +# Webhook client -## Incoming Webhooks +## Incoming webhooks {#incoming-webhooks} -You can use `slack_sdk.webhook.WebhookClient` for [Incoming Webhooks](https://api.slack.com/messaging/webhooks) and message responses using [response_url in payloads](https://api.slack.com/interactivity/handling#message_responses). +You can use `slack_sdk.webhook.WebhookClient` for [incoming webhooks](/messaging/sending-messages-using-incoming-webhooks) and message responses using [`response_url`](/interactivity/handling-user-interaction#message_responses) in payloads. -To use [Incoming Webhooks](https://api.slack.com/messaging/webhooks), just calling `WebhookClient(url)#send(payload)` method works for you. The call posts a message in a channel associated with the webhook URL. +To use [incoming webhooks](/messaging/sending-messages-using-incoming-webhooks), calling the `WebhookClient(url)#send(payload)` method works for you. The call posts a message in a channel associated with the webhook URL. ``` python from slack_sdk.webhook import WebhookClient @@ -16,8 +16,7 @@ assert response.status_code == 200 assert response.body == "ok" ``` -It's also possible to use `blocks`, richer message using [Block -Kit](https://api.slack.com/block-kit). +It's also possible to use `blocks` using [Block Kit](/block-kit). ``` python from slack_sdk.webhook import WebhookClient @@ -37,12 +36,9 @@ response = webhook.send( ) ``` -## `response_url` +## The `response_url` -User actions in channels generates a -[response_url](https://api.slack.com/interactivity/handling#message_responses) -and includes the URL in its payload. You can use `WebhookClient` to send -a message via the `response_url`. +User actions in channels generates a [`response_url`](/interactivity/handling-user-interaction#message_responses) and includes the URL in its payload. You can use `WebhookClient` to send a message via the `response_url`. ``` python import os @@ -59,7 +55,7 @@ app = Flask(__name__) @app.route("/slack/events", methods=["POST"]) def slack_app(): # Verify incoming requests from Slack - # https://api.slack.com/authentication/verifying-requests-from-slack + # https://docs.slack.dev/authentication/verifying-requests-from-slack if not signature_verifier.is_valid( body=request.get_data(), timestamp=request.headers.get("X-Slack-Request-Timestamp"), @@ -80,16 +76,9 @@ def slack_app(): return make_response("", 404) ``` -## AsyncWebhookClient +## AsyncWebhookClient {#asyncwebhookclient} -The webhook client is available in asynchronous programming using the -standard [asyncio](https://docs.python.org/3/library/asyncio.html) -library, too. You use `AsyncWebhookClient` instead for it. - -`AsyncWebhookClient` internally relies on -[AIOHTTP](https://docs.aiohttp.org/en/stable/) library but it is an -optional dependency. So, to use this class, run `pip install aiohttp` -beforehand. +The webhook client is available in asynchronous programming using the standard [asyncio](https://docs.python.org/3/library/asyncio.html) library. You use `AsyncWebhookClient` instead. `AsyncWebhookClient` internally relies on the [AIOHTTP](https://docs.aiohttp.org/en/stable/) library, but it is an optional dependency. To use this class, run `pip install aiohttp` beforehand. ``` python import asyncio @@ -108,18 +97,11 @@ async def send_message_via_webhook(url: str): asyncio.run(send_message_via_webhook(url)) ``` -## RetryHandler +## RetryHandler {#retryhandler} -With the default settings, only `ConnectionErrorRetryHandler` with its -default configuration (=only one retry in the manner of [exponential -backoff and -jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) -is enabled. The retry handler retries if an API client encounters a -connectivity-related failure (e.g., Connection reset by peer). +With the default settings, only `ConnectionErrorRetryHandler` with its default configuration (=only one retry in the manner of [exponential backoff and jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)) is enabled. The retry handler retries if an API client encounters a connectivity-related failure (e.g., connection reset by peer). -To use other retry handlers, you can pass a list of `RetryHandler` to -the client constructor. For instance, you can add the built-in -`RateLimitErrorRetryHandler` this way: +To use other retry handlers, you can pass a list of `RetryHandler` to the client constructor. For instance, you can add the built-in `RateLimitErrorRetryHandler` this way: ``` python from slack_sdk.webhook import WebhookClient @@ -134,11 +116,7 @@ rate_limit_handler = RateLimitErrorRetryHandler(max_retry_count=1) client.retry_handlers.append(rate_limit_handler) ``` -Creating your own ones is also quite simple. Defining a new class that -inherits `slack_sdk.http_retry.RetryHandler` (`AsyncRetryHandler` for -asyncio apps) and implements required methods (internals of `can_retry` -/ `prepare_for_next_retry`). Check the built-in ones' source code for -learning how to properly implement. +You can also create one on your own by defining a new class that inherits `slack_sdk.http_retry RetryHandler` (`AsyncRetryHandler` for asyncio apps) and implements required methods (internals of `can_retry` / `prepare_for_next_retry`). Check out the source code for the ones that are built in to learn how to properly implement them. ``` python import socket @@ -171,10 +149,4 @@ webhook = WebhookClient( ) ``` -For asyncio apps, `Async` prefixed corresponding modules are available. -All the methods in those methods are async/await compatible. Check [the -source -code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) -and -[tests](https://github.com/slackapi/python-slack-sdk/blob/main/tests/slack_sdk_async/web/test_async_web_client_http_retry.py) -for more details. +For asyncio apps, `Async` prefixed corresponding modules are available. All the methods in those methods are async/await compatible. Check [the source code](https://github.com/slackapi/python-slack-sdk/blob/main/slack_sdk/http_retry/async_handler.py) for more details. diff --git a/docs/footerConfig.js b/docs/footerConfig.js deleted file mode 100644 index 6433c049d..000000000 --- a/docs/footerConfig.js +++ /dev/null @@ -1,21 +0,0 @@ -const footer = { - links: [ - { - items: [ - { - html: ` - -
- Β©2025 Slack Technologies, LLC, a Salesforce company. All rights reserved. Various trademarks held by their respective owners. -
- `, - }, - ], - }, - ], -}; - -module.exports = footer; diff --git a/docs/navbarConfig.js b/docs/navbarConfig.js deleted file mode 100644 index 5c3aaaba2..000000000 --- a/docs/navbarConfig.js +++ /dev/null @@ -1,93 +0,0 @@ -const navbar = { - style: 'dark', - title: 'Slack Developer Tools', - logo: { - src: 'img/slack-logo-on-white.png', - href: 'https://tools.slack.dev', - }, - items: [ - { - type: 'dropdown', - label: 'Bolt', - position: 'left', - items: [ - { - label: 'Java', - to: 'https://tools.slack.dev/java-slack-sdk/guides/bolt-basics', - target: '_self', - }, - { - label: 'JavaScript', - to: 'https://tools.slack.dev/bolt-js', - target: '_self', - }, - { - label: 'Python', - to: 'https://tools.slack.dev/bolt-python', - target: '_self', - }, - ], - }, - { - type: 'dropdown', - label: 'SDKs', - position: 'left', - items: [ - { - label: 'Java Slack SDK', - to: 'https://tools.slack.dev/java-slack-sdk/', - target: '_self', - }, - { - label: 'Node Slack SDK', - to: 'https://tools.slack.dev/node-slack-sdk/', - target: '_self', - }, - { - label: 'Python Slack SDK', - to: 'https://tools.slack.dev/python-slack-sdk/', - target: '_self', - }, - { - label: 'Deno Slack SDK', - to: 'https://tools.slack.dev/deno-slack-sdk/', - target: '_self', - }, - ], - }, - { - to: 'https://tools.slack.dev/slack-cli', - label: 'Slack CLI', - target: '_self', - }, - { - to: 'https://api.slack.com', - label: 'API Docs', - position: 'right', - target: '_self', - }, - { - label: 'Developer Program', - position: 'right', - to: 'https://api.slack.com/developer-program', - target: '_blank', - rel: "noopener noreferrer" - }, - { - label: 'Your apps', - to: 'https://api.slack.com/apps', - position: 'right', - target: '_blank', - rel: "noopener noreferrer" - }, - { - 'aria-label': 'GitHub Repository', - className: 'navbar-github-link', - href: 'https://github.com/slackapi', - position: 'right', - target: '_self', - }, - ], -}; - -module.exports = navbar; diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 3c69cff36..000000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,17480 +0,0 @@ -{ - "name": "website", - "version": "2024.08.01", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "website", - "version": "2024.08.01", - "dependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/plugin-client-redirects": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", - "@mdx-js/react": "^3.1.0", - "clsx": "^2.0.0", - "docusaurus-theme-github-codeblock": "^2.0.2", - "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/types": "^3.5.2" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", - "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", - "@algolia/autocomplete-shared": "1.17.9" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", - "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", - "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", - "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.3.tgz", - "integrity": "sha512-wPOzHYSsW+H97JkBLmnlOdJSpbb9mIiuNPycUCV5DgzSkJFaI/OFxXfZXAh1gqxK+hf0miKue1C9bltjWljrNA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.3.tgz", - "integrity": "sha512-XE3iduH9lA7iTQacDGofBQyIyIgaX8qbTRRdj1bOCmfzc9b98CoiMwhNwdTifmmMewmN0EhVF3hP8KjKWwX7Yw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.3.tgz", - "integrity": "sha512-IYRd/A/R3BXeaQVT2805lZEdWo54v39Lqa7ABOxIYnUvX2vvOMW1AyzCuT0U7Q+uPdD4UW48zksUKRixShcWxA==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.3.tgz", - "integrity": "sha512-QGc/bmDUBgzB71rDL6kihI2e1Mx6G6PxYO5Ks84iL3tDcIel1aFuxtRF14P8saGgdIe1B6I6QkpkeIddZ6vWQw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.3.tgz", - "integrity": "sha512-zuM31VNPDJ1LBIwKbYGz/7+CSm+M8EhlljDamTg8AnDilnCpKjBebWZR5Tftv/FdWSro4tnYGOIz1AURQgZ+tQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.3.tgz", - "integrity": "sha512-Nn872PuOI8qzi1bxMMhJ0t2AzVBqN01jbymBQOkypvZHrrjZPso3iTpuuLLo9gi3yc/08vaaWTAwJfPhxPwJUw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.3.tgz", - "integrity": "sha512-9+Fm1ahV8/2goSIPIqZnVitV5yHW5E5xTdKy33xnqGd45A9yVv5tTkudWzEXsbfBB47j9Xb3uYPZjAvV5RHbKA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" - }, - "node_modules/@algolia/ingestion": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.3.tgz", - "integrity": "sha512-5GHNTiZ3saLjTNyr6WkP5hzDg2eFFAYWomvPcm9eHWskjzXt8R0IOiW9kkTS6I6hXBwN5H9Zna5mZDSqqJdg+g==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.3.tgz", - "integrity": "sha512-KUWQbTPoRjP37ivXSQ1+lWMfaifCCMzTnEcEnXwAmherS5Tp7us6BAqQDMGOD4E7xyaS2I8pto6WlOzxH+CxmA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.3.tgz", - "integrity": "sha512-oo/gG77xTTTclkrdFem0Kmx5+iSRFiwuRRdxZETDjwzCI7svutdbwBgV/Vy4D4QpYaX4nhY/P43k84uEowCE4Q==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.3.tgz", - "integrity": "sha512-BkkW7otbiI/Er1AiEPZs1h7lxbtSO9p09jFhv3/iT8/0Yz0CY79VJ9iq+Wv1+dq/l0OxnMpBy8mozrieGA3mXQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.3.tgz", - "integrity": "sha512-eAVlXz7UNzTsA1EDr+p0nlIH7WFxo7k3NMxYe8p38DH8YVWLgm2MgOVFUMNg9HCi6ZNOi/A2w/id2ZZ4sKgUOw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.3.tgz", - "integrity": "sha512-FqR3pQPfHfQyX1wgcdK6iyqu86yP76MZd4Pzj1y/YLMj9rRmRCY0E0AffKr//nrOFEwv6uY8BQY4fd9/6b0ZCg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", - "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", - "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz", - "integrity": "sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", - "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.0.tgz", - "integrity": "sha512-UWjX6t+v+0ckwZ50Y5ShZLnlk95pP5MyW/pon9tiYzl3+18pkTHTFNTKr7rQbfRXPkowt2QAn30o1b6oswszew==", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", - "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", - "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", - "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", - "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", - "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.8.tgz", - "integrity": "sha512-9dUvP2qpZI6PlGQ/sob+95B3u5u7nkYt9yhZFCC7G9HBRHBxj+QxS/wUlwaMGYW0waf+NIierI8aoDTssEdRYw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.8.tgz", - "integrity": "sha512-yuZpgWUzqZWQhEqfvtJufhl28DgO9sBwSbXbf/59gejNuvZcoUTRGQZhzhwF4ccqb53YAGB+u92z9+eSKoB4YA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", - "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.7.tgz", - "integrity": "sha512-XTb6Mw0v2qXtQYRW9d9duAjDnoTbBpsngD7sRNLmYDjvwU2ebpIHplyxgOeo6jp/Kr52gkLi5VaK5RDCqzMzZQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", - "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.8.tgz", - "integrity": "sha512-/K8u9ZyGMGPjmwCSIjgaOLKfic2RIGdFHHes84XW5LnmrvdhOTVxo255NppHi3ROEvoHPW7MplMJgjZK5Q+TxA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.8.tgz", - "integrity": "sha512-CoHQ/0UXrvxLovu0ZeW6c3/20hjJ/QRg6lyXm3dZLY/JgvRU6bdbQZF/Du30A4TvowfcgvIHQmP1bNXUxgDrAw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.8.tgz", - "integrity": "sha512-LpFKjX6hblpeqyych1cKmk+3FJZ19QmaJtqincySoMkbkG/w2tfbnO5oE6mlnCTXcGUJ0rCEuRHvTqKK0nHYUQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", - "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-initial": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", - "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", - "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-float-and-clear": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", - "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overflow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", - "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overscroll-behavior": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", - "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-resize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", - "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", - "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.7.tgz", - "integrity": "sha512-LB6tIP7iBZb5CYv8iRenfBZmbaG3DWNEziOnPjGoQX5P94FBPvvTBy68b/d9NnS5PELKwFmmOYsAEIgEhDPCHA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", - "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", - "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.8.tgz", - "integrity": "sha512-+5aPsNWgxohXoYNS1f+Ys0x3Qnfehgygv3qrPyv+Y25G0yX54/WlVB+IXprqBLOXHM1gsVF+QQSjlArhygna0Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", - "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-random-function": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.3.tgz", - "integrity": "sha512-dbNeEEPHxAwfQJ3duRL5IPpuD77QAHtRl4bAHRs0vOVhVbHrsL7mHnwe0irYjbs9kYwhAHZBQTLBgmvufPuRkA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.8.tgz", - "integrity": "sha512-eGE31oLnJDoUysDdjS9MLxNZdtqqSxjDXMdISpLh80QMaYrKs7VINpid34tWQ+iU23Wg5x76qAzf1Q/SLLbZVg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", - "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.2.tgz", - "integrity": "sha512-4EcAvXTUPh7n6UoZZkCzgtCf/wPzMlTNuddcKg7HG8ozfQkUcHsJ2faQKeLmjyKdYPyOUn4YA7yDPf8K/jfIxw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.7.tgz", - "integrity": "sha512-rdrRCKRnWtj5FyRin0u/gLla7CIvZRw/zMGI1fVJP0Sg/m1WGicjPVHRANL++3HQtsiXKAbPrcPr+VkyGck0IA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", - "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.7.tgz", - "integrity": "sha512-qTrZgLju3AV7Djhzuh2Bq/wjFqbcypnk0FhHjxW8DWJQcZLS1HecIus4X2/RLch1ukX7b+YYCdqbEnpIQO5ccg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.2", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", - "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/utilities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", - "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", - "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", - "license": "MIT" - }, - "node_modules/@docsearch/react": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", - "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.17.9", - "@algolia/autocomplete-preset-algolia": "1.17.9", - "@docsearch/css": "3.9.0", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 20.0.0", - "react": ">= 16.8.0 < 20.0.0", - "react-dom": ">= 16.8.0 < 20.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docusaurus/babel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", - "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/bundler": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", - "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.7.0", - "@docusaurus/cssnano-preset": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", - "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "postcss-preset-env": "^10.1.0", - "react-dev-utils": "^12.0.1", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^6.0.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/faster": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", - "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.7.0", - "@docusaurus/bundler": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "del": "^6.1.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.6", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", - "webpack-merge": "^6.0.1" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", - "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", - "license": "MIT", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", - "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", - "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^1.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", - "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.7.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.7.0.tgz", - "integrity": "sha512-6B4XAtE5ZVKOyhPgpgMkb7LwCkN+Hgd4vOnlbwR8nCdTQhLjz8MHbGlwwvZ/cay2SPNRX5KssqKAlcHVZP2m8g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", - "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", - "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", - "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", - "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug/node_modules/react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", - "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", - "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", - "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", - "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-svgr": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", - "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@svgr/core": "8.1.0", - "@svgr/webpack": "^8.1.0", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", - "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/plugin-debug": "3.7.0", - "@docusaurus/plugin-google-analytics": "3.7.0", - "@docusaurus/plugin-google-gtag": "3.7.0", - "@docusaurus/plugin-google-tag-manager": "3.7.0", - "@docusaurus/plugin-sitemap": "3.7.0", - "@docusaurus/plugin-svgr": "3.7.0", - "@docusaurus/theme-classic": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-search-algolia": "3.7.0", - "@docusaurus/types": "3.7.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", - "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.45", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.26", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", - "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", - "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.8.1", - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", - "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", - "license": "MIT", - "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/types/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", - "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", - "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.7.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", - "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", - "license": "MIT" - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, - "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, - "node_modules/@types/prismjs": { - "version": "1.26.4", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", - "integrity": "sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" - }, - "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", - "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/@types/ws": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/algoliasearch": { - "version": "5.20.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.3.tgz", - "integrity": "sha512-iNC6BGvipaalFfDfDnXUje8GUlW5asj0cTMsZJwO/0rhsyLx1L7GZFAY8wW+eQ6AM4Yge2p5GSE5hrBlfSD90Q==", - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.20.3", - "@algolia/client-analytics": "5.20.3", - "@algolia/client-common": "5.20.3", - "@algolia/client-insights": "5.20.3", - "@algolia/client-personalization": "5.20.3", - "@algolia/client-query-suggestions": "5.20.3", - "@algolia/client-search": "5.20.3", - "@algolia/ingestion": "1.20.3", - "@algolia/monitoring": "1.20.3", - "@algolia/recommend": "5.20.3", - "@algolia/requester-browser-xhr": "5.20.3", - "@algolia/requester-fetch": "5.20.3", - "@algolia/requester-node-http": "5.20.3" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.24.2.tgz", - "integrity": "sha512-vBw/INZDfyh/THbVeDy8On8lZqd2qiUAHde5N4N1ygL4SoeLqLGJ4GHneHrDAYsjikRwTTtodEP0fiXl5MxHFQ==", - "license": "MIT", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", - "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", - "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", - "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", - "dependencies": { - "browserslist": "^4.24.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.41.0.tgz", - "integrity": "sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-blank-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", - "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", - "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", - "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz", - "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ], - "license": "MIT-0" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "license": "MIT", - "dependencies": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/docusaurus-theme-github-codeblock": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/docusaurus-theme-github-codeblock/-/docusaurus-theme-github-codeblock-2.0.2.tgz", - "integrity": "sha512-H2WoQPWOLjGZO6KS58Gsd+eUVjTFJemkReiSSu9chqokyLc/3Ih3+zPRYfuEZ/HsDvSMIarf7CNcp+Vt+/G+ig==", - "dependencies": { - "@docusaurus/types": "^3.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.112", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz", - "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", - "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.3.tgz", - "integrity": "sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/file-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "dependencies": { - "inline-style-parser": "0.2.3" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript/node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", - "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", - "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-space/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/null-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/null-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/null-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", - "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.8.tgz", - "integrity": "sha512-S/TpMKVKofNvsxfau/+bw+IA6cSfB6/kmzFj5szUofHOVnFFMB2WwK+Zu07BeMD8T0n+ZnTO5uXiMvAKe2dPkA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", - "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", - "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-custom-media": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", - "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-properties": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", - "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", - "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", - "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", - "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", - "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-focus-within": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", - "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", - "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-image-set-function": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", - "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-lab-function": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.8.tgz", - "integrity": "sha512-plV21I86Hg9q8omNz13G9fhPtLopIWH06bt/Cb5cs1XnaGU2kUtEitvVd4vtQb/VqCdNUHK5swKn3QFmMRbpDg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.8", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.3.5", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", - "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", - "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", - "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", - "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-preset-env": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.5.tgz", - "integrity": "sha512-LQybafF/K7H+6fAs4SIkgzkSCixJy0/h0gubDIAP3Ihz+IQBRwsjyvBnAZ3JUHD+A/ITaxVRPDxn//a3Qy4pDw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.8", - "@csstools/postcss-color-mix-function": "^3.0.8", - "@csstools/postcss-content-alt-text": "^2.0.4", - "@csstools/postcss-exponential-functions": "^2.0.7", - "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.8", - "@csstools/postcss-gradients-interpolation-method": "^5.0.8", - "@csstools/postcss-hwb-function": "^4.0.8", - "@csstools/postcss-ic-unit": "^4.0.0", - "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.7", - "@csstools/postcss-logical-float-and-clear": "^3.0.0", - "@csstools/postcss-logical-overflow": "^2.0.0", - "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", - "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.7", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", - "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.8", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/postcss-random-function": "^1.0.3", - "@csstools/postcss-relative-color-syntax": "^3.0.8", - "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.2", - "@csstools/postcss-stepped-value-functions": "^4.0.7", - "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.7", - "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.19", - "browserslist": "^4.24.4", - "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.2", - "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.3", - "postcss-attribute-case-insensitive": "^7.0.1", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.8", - "postcss-color-hex-alpha": "^10.0.0", - "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.5", - "postcss-custom-properties": "^14.0.4", - "postcss-custom-selectors": "^8.0.4", - "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.0", - "postcss-focus-visible": "^10.0.1", - "postcss-focus-within": "^9.0.1", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^6.0.0", - "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.8", - "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.1", - "postcss-opacity-percentage": "^3.0.0", - "postcss-overflow-shorthand": "^6.0.0", - "postcss-page-break": "^3.0.4", - "postcss-place": "^10.0.0", - "postcss-pseudo-class-any-link": "^10.0.1", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^8.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", - "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", - "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.23" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/react-error-overlay": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", - "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==", - "license": "MIT" - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "name": "@slorber/react-helmet-async", - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-directive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", - "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtlcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "license": "MIT", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "license": "MIT", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "license": "MIT", - "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", - "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/webpackbar/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpackbar/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpackbar/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index dfd954064..000000000 --- a/docs/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "website", - "version": "2024.08.01", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "dependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/plugin-client-redirects": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", - "@mdx-js/react": "^3.1.0", - "clsx": "^2.0.0", - "docusaurus-theme-github-codeblock": "^2.0.2", - "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/types": "^3.5.2" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 3 chrome version", - "last 3 firefox version", - "last 5 safari version" - ] - }, - "engines": { - "node": ">=20.0" - } -} diff --git a/docs/static/api-docs/slack_sdk/aiohttp_version_checker.html b/docs/reference/aiohttp_version_checker.html similarity index 98% rename from docs/static/api-docs/slack_sdk/aiohttp_version_checker.html rename to docs/reference/aiohttp_version_checker.html index 383f7fac9..9430e24fa 100644 --- a/docs/static/api-docs/slack_sdk/aiohttp_version_checker.html +++ b/docs/reference/aiohttp_version_checker.html @@ -3,7 +3,7 @@ - + slack_sdk.aiohttp_version_checker API documentation @@ -94,7 +94,7 @@

Functions

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/async_client.html b/docs/reference/audit_logs/async_client.html similarity index 99% rename from docs/static/api-docs/slack_sdk/audit_logs/async_client.html rename to docs/reference/audit_logs/async_client.html index 35d9de6a1..600bb9c35 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/async_client.html +++ b/docs/reference/audit_logs/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.async_client API documentation @@ -87,7 +87,7 @@

Classes

retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -389,7 +389,7 @@

Classes

return resp

API client for Audit Logs API -See https://api.slack.com/admins/audit-logs for more details

+See https://docs.slack.dev/admins/audit-logs-api/ for more details

Args

token
@@ -730,7 +730,7 @@

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/index.html b/docs/reference/audit_logs/index.html similarity index 98% rename from docs/static/api-docs/slack_sdk/audit_logs/index.html rename to docs/reference/audit_logs/index.html index c7340ff08..940d34e1c 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/index.html +++ b/docs/reference/audit_logs/index.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs API documentation @@ -37,7 +37,7 @@

Module slack_sdk.audit_logs

Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization.

-

Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details.

+

Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details.

Sub-modules

@@ -94,7 +94,7 @@

Classes

retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -402,7 +402,7 @@

Classes

return resp

API client for Audit Logs API -See https://api.slack.com/admins/audit-logs for more details

+See https://docs.slack.dev/admins/audit-logs-api/ for more details

Args

token
@@ -822,7 +822,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html b/docs/reference/audit_logs/v1/async_client.html similarity index 98% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html rename to docs/reference/audit_logs/v1/async_client.html index cc9952883..e3f01fafc 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/async_client.html +++ b/docs/reference/audit_logs/v1/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.async_client API documentation @@ -37,7 +37,7 @@

Module slack_sdk.audit_logs.v1.async_client

Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization.

-

Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details.

+

Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details.

@@ -89,7 +89,7 @@

Classes

retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -391,7 +391,7 @@

Classes

return resp

API client for Audit Logs API -See https://api.slack.com/admins/audit-logs for more details

+See https://docs.slack.dev/admins/audit-logs-api/ for more details

Args

token
@@ -732,7 +732,7 @@

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/client.html b/docs/reference/audit_logs/v1/client.html similarity index 98% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/client.html rename to docs/reference/audit_logs/v1/client.html index 1f01b14c1..fb3939178 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/client.html +++ b/docs/reference/audit_logs/v1/client.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.client API documentation @@ -37,7 +37,7 @@

Module slack_sdk.audit_logs.v1.client

Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization.

-

Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details.

+

Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details.

@@ -83,7 +83,7 @@

Classes

retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -391,7 +391,7 @@

Classes

return resp

API client for Audit Logs API -See https://api.slack.com/admins/audit-logs for more details

+See https://docs.slack.dev/admins/audit-logs-api/ for more details

Args

token
@@ -715,7 +715,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/index.html b/docs/reference/audit_logs/v1/index.html similarity index 97% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/index.html rename to docs/reference/audit_logs/v1/index.html index e2be84431..7c3def12a 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/index.html +++ b/docs/reference/audit_logs/v1/index.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1 API documentation @@ -37,7 +37,7 @@

Module slack_sdk.audit_logs.v1

Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization.

-

Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details.

+

Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details.

Sub-modules

@@ -94,7 +94,7 @@

Sub-modules

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html b/docs/reference/audit_logs/v1/internal_utils.html similarity index 98% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html rename to docs/reference/audit_logs/v1/internal_utils.html index bc858525f..38dd60513 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/internal_utils.html +++ b/docs/reference/audit_logs/v1/internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.internal_utils API documentation @@ -60,7 +60,7 @@

Module slack_sdk.audit_logs.v1.internal_utils

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html b/docs/reference/audit_logs/v1/logs.html similarity index 99% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html rename to docs/reference/audit_logs/v1/logs.html index 85daab8ab..a36d22e5a 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/logs.html +++ b/docs/reference/audit_logs/v1/logs.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.logs API documentation @@ -3382,7 +3382,7 @@

diff --git a/docs/static/api-docs/slack_sdk/audit_logs/v1/response.html b/docs/reference/audit_logs/v1/response.html similarity index 99% rename from docs/static/api-docs/slack_sdk/audit_logs/v1/response.html rename to docs/reference/audit_logs/v1/response.html index 9dd403a98..7d5c72853 100644 --- a/docs/static/api-docs/slack_sdk/audit_logs/v1/response.html +++ b/docs/reference/audit_logs/v1/response.html @@ -3,7 +3,7 @@ - + slack_sdk.audit_logs.v1.response API documentation @@ -157,7 +157,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/errors/index.html b/docs/reference/errors/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/errors/index.html rename to docs/reference/errors/index.html index b358608d1..569a2608e 100644 --- a/docs/static/api-docs/slack_sdk/errors/index.html +++ b/docs/reference/errors/index.html @@ -3,7 +3,7 @@ - + slack_sdk.errors API documentation @@ -309,7 +309,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/async_handler.html b/docs/reference/http_retry/async_handler.html similarity index 99% rename from docs/static/api-docs/slack_sdk/http_retry/async_handler.html rename to docs/reference/http_retry/async_handler.html index 233966d9d..4f3889fcc 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/async_handler.html +++ b/docs/reference/http_retry/async_handler.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.async_handler API documentation @@ -193,7 +193,7 @@

Static methods

class HttpResponse -(*,
status_code:Β strΒ |Β int,
headers:Β Dict[str,Β strΒ |Β List[str]],
body:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
data:Β bytesΒ |Β NoneΒ =Β None)
+(*,
status_code:Β intΒ |Β str,
headers:Β Dict[str,Β strΒ |Β List[str]],
body:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
data:Β bytesΒ |Β NoneΒ =Β None)
@@ -425,7 +425,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html b/docs/reference/http_retry/builtin_async_handlers.html similarity index 99% rename from docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html rename to docs/reference/http_retry/builtin_async_handlers.html index 50e1c9c1d..206b27f53 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/builtin_async_handlers.html +++ b/docs/reference/http_retry/builtin_async_handlers.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.builtin_async_handlers API documentation @@ -300,7 +300,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html b/docs/reference/http_retry/builtin_handlers.html similarity index 99% rename from docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html rename to docs/reference/http_retry/builtin_handlers.html index 5bbf259bf..0f36601ed 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/builtin_handlers.html +++ b/docs/reference/http_retry/builtin_handlers.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.builtin_handlers API documentation @@ -310,7 +310,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html b/docs/reference/http_retry/builtin_interval_calculators.html similarity index 99% rename from docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html rename to docs/reference/http_retry/builtin_interval_calculators.html index 090c1b5f1..cfa90cc7c 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/builtin_interval_calculators.html +++ b/docs/reference/http_retry/builtin_interval_calculators.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.builtin_interval_calculators API documentation @@ -198,7 +198,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/handler.html b/docs/reference/http_retry/handler.html similarity index 99% rename from docs/static/api-docs/slack_sdk/http_retry/handler.html rename to docs/reference/http_retry/handler.html index 6309f39de..8f4cb0f08 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/handler.html +++ b/docs/reference/http_retry/handler.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.handler API documentation @@ -231,7 +231,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/index.html b/docs/reference/http_retry/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/http_retry/index.html rename to docs/reference/http_retry/index.html index c9c2201ea..501a62c9e 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/index.html +++ b/docs/reference/http_retry/index.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry API documentation @@ -388,7 +388,7 @@

Static methods

class HttpResponse -(*,
status_code:Β strΒ |Β int,
headers:Β Dict[str,Β strΒ |Β List[str]],
body:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
data:Β bytesΒ |Β NoneΒ =Β None)
+(*,
status_code:Β intΒ |Β str,
headers:Β Dict[str,Β strΒ |Β List[str]],
body:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
data:Β bytesΒ |Β NoneΒ =Β None)
@@ -994,7 +994,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html b/docs/reference/http_retry/interval_calculator.html similarity index 98% rename from docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html rename to docs/reference/http_retry/interval_calculator.html index 49a76ff15..938799629 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/interval_calculator.html +++ b/docs/reference/http_retry/interval_calculator.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.interval_calculator API documentation @@ -131,7 +131,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/jitter.html b/docs/reference/http_retry/jitter.html similarity index 98% rename from docs/static/api-docs/slack_sdk/http_retry/jitter.html rename to docs/reference/http_retry/jitter.html index 555f21521..0268d2cce 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/jitter.html +++ b/docs/reference/http_retry/jitter.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.jitter API documentation @@ -166,7 +166,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/request.html b/docs/reference/http_retry/request.html similarity index 99% rename from docs/static/api-docs/slack_sdk/http_retry/request.html rename to docs/reference/http_retry/request.html index e8c2fa659..e088c7443 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/request.html +++ b/docs/reference/http_retry/request.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.request API documentation @@ -154,7 +154,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/response.html b/docs/reference/http_retry/response.html similarity index 98% rename from docs/static/api-docs/slack_sdk/http_retry/response.html rename to docs/reference/http_retry/response.html index 5b2a4aa07..4a786ab78 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/response.html +++ b/docs/reference/http_retry/response.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.response API documentation @@ -48,7 +48,7 @@

Classes

class HttpResponse -(*,
status_code:Β strΒ |Β int,
headers:Β Dict[str,Β strΒ |Β List[str]],
body:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
data:Β bytesΒ |Β NoneΒ =Β None)
+(*,
status_code:Β intΒ |Β str,
headers:Β Dict[str,Β strΒ |Β List[str]],
body:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
data:Β bytesΒ |Β NoneΒ =Β None)
@@ -127,7 +127,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/http_retry/state.html b/docs/reference/http_retry/state.html similarity index 98% rename from docs/static/api-docs/slack_sdk/http_retry/state.html rename to docs/reference/http_retry/state.html index 31647ffb8..3096592cc 100644 --- a/docs/static/api-docs/slack_sdk/http_retry/state.html +++ b/docs/reference/http_retry/state.html @@ -3,7 +3,7 @@ - + slack_sdk.http_retry.state API documentation @@ -138,7 +138,7 @@

-

Generated by pdoc 0.11.5.

+

Generated by pdoc 0.11.6.

diff --git a/docs/static/api-docs/slack_sdk/index.html b/docs/reference/index.html similarity index 81% rename from docs/static/api-docs/slack_sdk/index.html rename to docs/reference/index.html index 09b7f29a1..7cc7723c1 100644 --- a/docs/static/api-docs/slack_sdk/index.html +++ b/docs/reference/index.html @@ -3,9 +3,9 @@ - + slack_sdk API documentation - @@ -38,7 +38,7 @@

Package slack_sdk

Here is the list of key modules in this SDK:

@@ -163,7 +163,7 @@

Classes

class WebClient(BaseClient):
     """A WebClient allows apps to communicate with the Slack Platform's Web API.
 
-    https://api.slack.com/methods
+    https://docs.slack.dev/reference/methods
 
     The Slack Web API is an interface for querying information from
     and enacting change in a Slack workspace.
@@ -234,7 +234,7 @@ 

Classes

**kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -256,7 +256,7 @@

Classes

Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -283,7 +283,7 @@

Classes

**kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -304,7 +304,7 @@

Classes

**kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -324,7 +324,7 @@

Classes

**kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -344,7 +344,7 @@

Classes

**kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -368,7 +368,7 @@

Classes

Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -395,7 +395,7 @@

Classes

**kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -417,7 +417,7 @@

Classes

) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -448,7 +448,7 @@

Classes

**kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -476,7 +476,7 @@

Classes

**kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -493,7 +493,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -515,7 +515,7 @@

Classes

**kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -535,7 +535,7 @@

Classes

**kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -554,7 +554,7 @@

Classes

**kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -564,6 +564,60 @@

Classes

kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> SlackResponse: + """Link a Salesforce record to a channel. + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> SlackResponse: + """Unlink a Salesforce record from a channel. + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -573,7 +627,7 @@

Classes

**kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -593,7 +647,7 @@

Classes

**kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -608,7 +662,7 @@

Classes

**kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -629,7 +683,7 @@

Classes

**kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -649,7 +703,7 @@

Classes

**kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -669,7 +723,7 @@

Classes

**kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -682,7 +736,7 @@

Classes

**kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -699,7 +753,7 @@

Classes

**kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -711,7 +765,7 @@

Classes

**kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -724,7 +778,7 @@

Classes

**kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -742,7 +796,7 @@

Classes

**kwargs, ) -> SlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -773,7 +827,7 @@

Classes

**kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -785,7 +839,7 @@

Classes

**kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -798,7 +852,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -814,7 +868,7 @@

Classes

**kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -827,7 +881,7 @@

Classes

**kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -847,7 +901,7 @@

Classes

**kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -875,7 +929,7 @@

Classes

"""List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -902,7 +956,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -925,7 +979,7 @@

Classes

**kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -948,7 +1002,7 @@

Classes

**kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -973,7 +1027,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -997,7 +1051,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -1015,7 +1069,7 @@

Classes

**kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -1027,7 +1081,7 @@

Classes

**kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -1040,7 +1094,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -1052,7 +1106,7 @@

Classes

**kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1077,7 +1131,7 @@

Classes

**kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1095,7 +1149,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1108,7 +1162,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1121,7 +1175,7 @@

Classes

**kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1133,7 +1187,7 @@

Classes

**kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1146,7 +1200,7 @@

Classes

**kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1161,7 +1215,7 @@

Classes

**kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1184,7 +1238,7 @@

Classes

) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1202,7 +1256,7 @@

Classes

) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1226,7 +1280,7 @@

Classes

**kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1251,7 +1305,7 @@

Classes

) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1273,7 +1327,7 @@

Classes

**kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1295,7 +1349,7 @@

Classes

**kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1315,7 +1369,7 @@

Classes

**kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1337,7 +1391,7 @@

Classes

**kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1352,7 +1406,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1372,7 +1426,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1389,7 +1443,7 @@

Classes

) -> SlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1407,7 +1461,7 @@

Classes

) -> SlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1429,7 +1483,7 @@

Classes

) -> SlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1446,7 +1500,7 @@

Classes

) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1464,7 +1518,7 @@

Classes

**kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1478,7 +1532,7 @@

Classes

**kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1498,7 +1552,7 @@

Classes

**kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1517,7 +1571,7 @@

Classes

**kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1538,7 +1592,7 @@

Classes

**kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1559,7 +1613,7 @@

Classes

**kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1579,7 +1633,7 @@

Classes

**kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1593,7 +1647,7 @@

Classes

**kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1605,7 +1659,7 @@

Classes

**kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1618,7 +1672,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1631,7 +1685,7 @@

Classes

**kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1644,7 +1698,7 @@

Classes

**kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1657,7 +1711,7 @@

Classes

**kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1671,7 +1725,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1689,7 +1743,7 @@

Classes

**kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1707,7 +1761,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1726,7 +1780,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1746,7 +1800,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1778,7 +1832,7 @@

Classes

**kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1802,7 +1856,7 @@

Classes

def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1810,7 +1864,7 @@

Classes

**kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1831,7 +1885,7 @@

Classes

**kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1844,7 +1898,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1858,7 +1912,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1871,7 +1925,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1884,7 +1938,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1905,7 +1959,7 @@

Classes

**kwargs, ) -> SlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1935,7 +1989,7 @@

Classes

**kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1956,7 +2010,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1976,7 +2030,7 @@

Classes

**kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1995,7 +2049,7 @@

Classes

**kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -2010,7 +2064,7 @@

Classes

**kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -2023,7 +2077,7 @@

Classes

) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -2038,7 +2092,7 @@

Classes

) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -2051,7 +2105,7 @@

Classes

**kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -2063,7 +2117,7 @@

Classes

**kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2078,7 +2132,7 @@

Classes

**kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -2090,7 +2144,7 @@

Classes

**kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -2103,7 +2157,7 @@

Classes

**kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2120,7 +2174,7 @@

Classes

**kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2136,7 +2190,7 @@

Classes

**kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2147,13 +2201,17 @@

Classes

channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2163,8 +2221,8 @@

Classes

title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2178,8 +2236,8 @@

Classes

prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2193,7 +2251,7 @@

Classes

**kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2203,7 +2261,7 @@

Classes

**kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2215,7 +2273,7 @@

Classes

**kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2233,7 +2291,7 @@

Classes

**kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2259,7 +2317,7 @@

Classes

**kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2279,7 +2337,7 @@

Classes

**kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2292,7 +2350,7 @@

Classes

**kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2305,7 +2363,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2324,7 +2382,7 @@

Classes

**kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2351,7 +2409,7 @@

Classes

**kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2363,7 +2421,7 @@

Classes

**kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2376,7 +2434,7 @@

Classes

**kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2390,7 +2448,7 @@

Classes

**kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2406,7 +2464,7 @@

Classes

**kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2426,7 +2484,7 @@

Classes

**kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2439,7 +2497,7 @@

Classes

**kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2451,7 +2509,7 @@

Classes

**kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2466,7 +2524,7 @@

Classes

**kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2491,7 +2549,7 @@

Classes

**kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2514,7 +2572,7 @@

Classes

**kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2522,7 +2580,7 @@

Classes

# -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2692,6 +2750,27 @@

Classes

# -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> SlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2701,7 +2780,7 @@

Classes

**kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2715,7 +2794,7 @@

Classes

**kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2734,7 +2813,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2747,7 +2826,7 @@

Classes

**kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2767,10 +2846,11 @@

Classes

link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2786,11 +2866,12 @@

Classes

"link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2813,11 +2894,12 @@

Classes

link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2838,11 +2920,12 @@

Classes

"username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2851,7 +2934,7 @@

Classes

*, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2862,10 +2945,11 @@

Classes

unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2882,14 +2966,155 @@

Classes

"unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + + def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> ChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + return ChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + def chat_unfurl( self, *, @@ -2898,6 +3123,7 @@

Classes

source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2905,7 +3131,7 @@

Classes

**kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2914,6 +3140,7 @@

Classes

"source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -2939,10 +3166,11 @@

Classes

parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2956,6 +3184,7 @@

Classes

"parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2964,36 +3193,10 @@

Classes

kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> SlackResponse: - """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -3006,7 +3209,7 @@

Classes

**kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -3030,7 +3233,7 @@

Classes

**kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -3042,7 +3245,7 @@

Classes

**kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -3054,7 +3257,7 @@

Classes

**kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -3068,7 +3271,7 @@

Classes

**kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -3081,7 +3284,7 @@

Classes

**kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3090,7 +3293,7 @@

Classes

self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3114,7 +3317,7 @@

Classes

**kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3138,7 +3341,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3158,7 +3361,7 @@

Classes

**kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3181,7 +3384,7 @@

Classes

**kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3203,7 +3406,7 @@

Classes

**kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3216,7 +3419,7 @@

Classes

**kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3228,7 +3431,7 @@

Classes

**kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3244,7 +3447,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3270,7 +3473,7 @@

Classes

) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3283,7 +3486,7 @@

Classes

**kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3297,7 +3500,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3311,7 +3514,7 @@

Classes

**kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3330,7 +3533,7 @@

Classes

**kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3349,7 +3552,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3375,7 +3578,7 @@

Classes

**kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3396,7 +3599,7 @@

Classes

**kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3414,7 +3617,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3441,7 +3644,7 @@

Classes

**kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3454,7 +3657,7 @@

Classes

**kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3466,7 +3669,7 @@

Classes

**kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3479,7 +3682,7 @@

Classes

**kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3492,7 +3695,7 @@

Classes

**kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3504,7 +3707,7 @@

Classes

**kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3513,7 +3716,7 @@

Classes

**kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3525,7 +3728,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3537,7 +3740,7 @@

Classes

**kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3549,7 +3752,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3564,11 +3767,35 @@

Classes

**kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> SlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -3577,7 +3804,7 @@

Classes

**kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3589,7 +3816,7 @@

Classes

**kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3605,7 +3832,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3633,7 +3860,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3661,7 +3888,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3677,7 +3904,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3702,7 +3929,7 @@

Classes

**kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3741,7 +3968,7 @@

Classes

**kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3776,7 +4003,7 @@

Classes

**kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3790,7 +4017,7 @@

Classes

**kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3808,7 +4035,7 @@

Classes

**kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3820,7 +4047,7 @@

Classes

**kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3839,7 +4066,7 @@

Classes

**kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3892,12 +4119,12 @@

Classes

) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3983,7 +4210,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -4006,7 +4233,7 @@

Classes

**kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -4029,7 +4256,7 @@

Classes

**kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -4042,7 +4269,7 @@

Classes

**kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -4050,7 +4277,7 @@

Classes

# -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4231,7 +4458,7 @@

Classes

# -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4307,7 +4534,7 @@

Classes

**kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4319,7 +4546,7 @@

Classes

# -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4406,7 +4633,7 @@

Classes

**kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4432,7 +4659,7 @@

Classes

**kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4452,7 +4679,7 @@

Classes

**kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4468,7 +4695,7 @@

Classes

**kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4489,7 +4716,7 @@

Classes

**kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4501,7 +4728,7 @@

Classes

**kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4513,7 +4740,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4526,7 +4753,7 @@

Classes

**kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4540,7 +4767,7 @@

Classes

**kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4556,7 +4783,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4582,7 +4809,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4608,7 +4835,7 @@

Classes

**kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4632,7 +4859,7 @@

Classes

**kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4653,7 +4880,7 @@

Classes

**kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4666,7 +4893,7 @@

Classes

**kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4679,7 +4906,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4691,7 +4918,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4704,7 +4931,7 @@

Classes

**kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4722,7 +4949,7 @@

Classes

**kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4750,7 +4977,7 @@

Classes

**kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4778,7 +5005,7 @@

Classes

**kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4807,7 +5034,7 @@

Classes

**kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4823,119 +5050,362 @@

Classes

) return self.api_call("search.messages", http_verb="GET", params=kwargs) - def stars_add( + def slackLists_access_delete( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Adds a star to an item. - https://api.slack.com/methods/stars.add + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete """ - kwargs.update( - { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, - } - ) - return self.api_call("stars.add", params=kwargs) + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) - def stars_list( + def slackLists_access_set( self, *, - count: Optional[int] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, - page: Optional[int] = None, - team_id: Optional[str] = None, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Lists stars for a user. - https://api.slack.com/methods/stars.list + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create """ kwargs.update( { - "count": count, - "cursor": cursor, - "limit": limit, - "page": page, - "team_id": team_id, + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, } ) - return self.api_call("stars.list", http_verb="GET", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) - def stars_remove( + def slackLists_download_get( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + list_id: str, + job_id: str, **kwargs, ) -> SlackResponse: - """Removes a star from an item. - https://api.slack.com/methods/stars.remove + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get """ kwargs.update( { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, + "list_id": list_id, + "job_id": job_id, } ) - return self.api_call("stars.remove", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) - def team_accessLogs( + def slackLists_download_start( self, *, - before: Optional[Union[int, str]] = None, - count: Optional[Union[int, str]] = None, - page: Optional[Union[int, str]] = None, - team_id: Optional[str] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, + list_id: str, + include_archived: Optional[bool] = None, **kwargs, ) -> SlackResponse: - """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start """ kwargs.update( { - "before": before, - "count": count, - "page": page, - "team_id": team_id, - "cursor": cursor, - "limit": limit, + "list_id": list_id, + "include_archived": include_archived, } ) - return self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) - def team_billableInfo( + def slackLists_items_create( self, *, - team_id: Optional[str] = None, - user: Optional[str] = None, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, **kwargs, ) -> SlackResponse: - """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create """ - kwargs.update({"team_id": team_id, "user": user}) - return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) - def team_billing_info( + def slackLists_items_delete( self, + *, + list_id: str, + id: str, **kwargs, ) -> SlackResponse: - """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> SlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> SlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + + def stars_add( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Adds a star to an item. + https://docs.slack.dev/reference/methods/stars.add + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return self.api_call("stars.add", params=kwargs) + + def stars_list( + self, + *, + count: Optional[int] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + page: Optional[int] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists stars for a user. + https://docs.slack.dev/reference/methods/stars.list + """ + kwargs.update( + { + "count": count, + "cursor": cursor, + "limit": limit, + "page": page, + "team_id": team_id, + } + ) + return self.api_call("stars.list", http_verb="GET", params=kwargs) + + def stars_remove( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Removes a star from an item. + https://docs.slack.dev/reference/methods/stars.remove + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return self.api_call("stars.remove", params=kwargs) + + def team_accessLogs( + self, + *, + before: Optional[Union[int, str]] = None, + count: Optional[Union[int, str]] = None, + page: Optional[Union[int, str]] = None, + team_id: Optional[str] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + **kwargs, + ) -> SlackResponse: + """Gets the access logs for the current team. + https://docs.slack.dev/reference/methods/team.accessLogs + """ + kwargs.update( + { + "before": before, + "count": count, + "page": page, + "team_id": team_id, + "cursor": cursor, + "limit": limit, + } + ) + return self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + + def team_billableInfo( + self, + *, + team_id: Optional[str] = None, + user: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Gets billable users information for the current team. + https://docs.slack.dev/reference/methods/team.billableInfo + """ + kwargs.update({"team_id": team_id, "user": user}) + return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + + def team_billing_info( + self, + **kwargs, + ) -> SlackResponse: + """Reads a workspace's billing plan information. + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -4946,7 +5416,7 @@

Classes

**kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4968,7 +5438,7 @@

Classes

**kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4999,7 +5469,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -5017,7 +5487,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -5039,7 +5509,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -5049,7 +5519,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -5065,7 +5535,7 @@

Classes

**kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5091,7 +5561,7 @@

Classes

**kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5105,7 +5575,7 @@

Classes

**kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5120,7 +5590,7 @@

Classes

**kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5145,7 +5615,7 @@

Classes

**kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5172,7 +5642,7 @@

Classes

**kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5193,7 +5663,7 @@

Classes

**kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5220,7 +5690,7 @@

Classes

**kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5242,7 +5712,7 @@

Classes

**kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5253,7 +5723,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5263,7 +5733,7 @@

Classes

**kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5275,7 +5745,7 @@

Classes

**kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5290,7 +5760,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5309,7 +5779,7 @@

Classes

**kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5324,7 +5794,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5336,7 +5806,7 @@

Classes

**kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5347,7 +5817,7 @@

Classes

**kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5360,7 +5830,7 @@

Classes

**kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5375,7 +5845,7 @@

Classes

**kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5398,8 +5868,8 @@

Classes

**kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5422,9 +5892,9 @@

Classes

Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5447,9 +5917,9 @@

Classes

"""Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5476,8 +5946,8 @@

Classes

) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5488,6 +5958,72 @@

Classes

# NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5496,7 +6032,7 @@

Classes

**kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5513,7 +6049,7 @@

Classes

**kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5534,7 +6070,7 @@

Classes

**kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5546,7 +6082,7 @@

Classes

return self.api_call("workflows.updateStep", json=kwargs)

A WebClient allows apps to communicate with the Slack Platform's Web API.

-

https://api.slack.com/methods

+

https://docs.slack.dev/reference/methods

The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

This client handles constructing and sending HTTP requests to Slack @@ -5626,7 +6162,7 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5636,7 +6172,7 @@

Methods

return self.api_call("admin.analytics.getFile", params=kwargs)

Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

+https://docs.slack.dev/reference/methods/admin.analytics.getFile

def admin_apps_activities_list(self,
*,
app_id:Β strΒ |Β NoneΒ =Β None,
component_id:Β strΒ |Β NoneΒ =Β None,
component_type:Β strΒ |Β NoneΒ =Β None,
log_event_type:Β strΒ |Β NoneΒ =Β None,
max_date_created:Β intΒ |Β NoneΒ =Β None,
min_date_created:Β intΒ |Β NoneΒ =Β None,
min_log_level:Β strΒ |Β NoneΒ =Β None,
sort_direction:Β strΒ |Β NoneΒ =Β None,
source:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
trace_id:Β strΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5665,7 +6201,7 @@

Methods

**kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5687,7 +6223,7 @@

Methods

return self.api_call("admin.apps.activities.list", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.apps.activities.list

def admin_apps_approve(self,
*,
app_id:Β strΒ |Β NoneΒ =Β None,
request_id:Β strΒ |Β NoneΒ =Β None,
enterprise_id:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5710,7 +6246,7 @@

Methods

Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5731,7 +6267,7 @@

Methods

Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

+https://docs.slack.dev/reference/methods/admin.apps.approve

def admin_apps_approved_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
enterprise_id:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5751,7 +6287,7 @@

Methods

**kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -5764,7 +6300,7 @@

Methods

return self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

+https://docs.slack.dev/reference/methods/admin.apps.approved.list

def admin_apps_clearResolution(self,
*,
app_id:Β str,
enterprise_id:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5783,7 +6319,7 @@

Methods

**kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -5795,7 +6331,7 @@

Methods

return self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.apps.clearResolution

def admin_apps_config_lookup(self, *, app_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -5812,7 +6348,7 @@

Methods

**kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -5821,7 +6357,7 @@

Methods

return self.api_call("admin.apps.config.lookup", params=kwargs)

Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

+https://docs.slack.dev/reference/methods/admin.apps.config.lookup

def admin_apps_config_set(self,
*,
app_id:Β str,
domain_restrictions:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
workflow_auth_strategy:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5840,7 +6376,7 @@

Methods

**kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -5853,7 +6389,7 @@

Methods

return self.api_call("admin.apps.config.set", params=kwargs)

Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

+https://docs.slack.dev/reference/methods/admin.apps.config.set

def admin_apps_requests_cancel(self,
*,
request_id:Β str,
enterprise_id:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5872,7 +6408,7 @@

Methods

**kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -5884,7 +6420,7 @@

Methods

return self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

+https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

def admin_apps_requests_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5903,7 +6439,7 @@

Methods

**kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -5915,7 +6451,7 @@

Methods

return self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

+https://docs.slack.dev/reference/methods/admin.apps.requests.list

def admin_apps_restrict(self,
*,
app_id:Β strΒ |Β NoneΒ =Β None,
request_id:Β strΒ |Β NoneΒ =Β None,
enterprise_id:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5938,7 +6474,7 @@

Methods

Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -5959,7 +6495,7 @@

Methods

Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

+https://docs.slack.dev/reference/methods/admin.apps.restrict

def admin_apps_restricted_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
enterprise_id:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -5979,7 +6515,7 @@

Methods

**kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -5992,7 +6528,7 @@

Methods

return self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

+https://docs.slack.dev/reference/methods/admin.apps.restricted.list

def admin_apps_uninstall(self,
*,
app_id:Β str,
enterprise_id:Β strΒ |Β NoneΒ =Β None,
team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -6012,7 +6548,7 @@

Methods

) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -6026,7 +6562,7 @@

Methods

Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

+https://docs.slack.dev/reference/methods/admin.apps.uninstall

def admin_auth_policy_assignEntities(self,
*,
entity_ids:Β strΒ |Β Sequence[str],
policy_name:Β str,
entity_type:Β str,
**kwargs) ‑>Β SlackResponse
@@ -6045,7 +6581,7 @@

Methods

**kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6056,7 +6592,7 @@

Methods

return self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

+https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

def admin_auth_policy_getEntities(self,
*,
policy_name:Β str,
cursor:Β strΒ |Β NoneΒ =Β None,
entity_type:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -6076,7 +6612,7 @@

Methods

**kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -6088,7 +6624,7 @@

Methods

return self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

+https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

def admin_auth_policy_removeEntities(self,
*,
entity_ids:Β strΒ |Β Sequence[str],
policy_name:Β str,
entity_type:Β str,
**kwargs) ‑>Β SlackResponse
@@ -6107,7 +6643,7 @@

Methods

**kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6118,7 +6654,7 @@

Methods

return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

+https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

def admin_barriers_create(self,
*,
barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
primary_usergroup_id:Β str,
restricted_subjects:Β strΒ |Β Sequence[str],
**kwargs) ‑>Β SlackResponse
@@ -6137,7 +6673,7 @@

Methods

**kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6151,7 +6687,7 @@

Methods

return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.barriers.create

def admin_barriers_delete(self, *, barrier_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6168,13 +6704,13 @@

Methods

**kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

+https://docs.slack.dev/reference/methods/admin.barriers.delete

def admin_barriers_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6192,7 +6728,7 @@

Methods

**kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6202,7 +6738,7 @@

Methods

return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

+https://docs.slack.dev/reference/methods/admin.barriers.list

def admin_barriers_update(self,
*,
barrier_id:Β str,
barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
primary_usergroup_id:Β str,
restricted_subjects:Β strΒ |Β Sequence[str],
**kwargs) ‑>Β SlackResponse
@@ -6222,7 +6758,7 @@

Methods

**kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6236,7 +6772,7 @@

Methods

return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

+https://docs.slack.dev/reference/methods/admin.barriers.update

def admin_conversations_archive(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6253,13 +6789,13 @@

Methods

**kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs)

Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

+https://docs.slack.dev/reference/methods/admin.conversations.archive

def admin_conversations_bulkArchive(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6276,13 +6812,13 @@

Methods

**kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs)

Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

+https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

def admin_conversations_bulkDelete(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6323,7 +6859,7 @@

Methods

**kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6334,7 +6870,7 @@

Methods

return self.api_call("admin.conversations.bulkMove", params=kwargs)

Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

+https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

def admin_conversations_convertToPrivate(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6351,13 +6887,13 @@

Methods

**kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs)

Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

+https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

def admin_conversations_convertToPublic(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6374,13 +6910,13 @@

Methods

**kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs)

Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

+https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

def admin_conversations_create(self,
*,
is_private:Β bool,
name:Β str,
description:Β strΒ |Β NoneΒ =Β None,
org_wide:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -6401,7 +6937,7 @@

Methods

**kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6415,7 +6951,34 @@

Methods

return self.api_call("admin.conversations.create", params=kwargs)

Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

+https://docs.slack.dev/reference/methods/admin.conversations.create

+ +
+def admin_conversations_createForObjects(self,
*,
object_id:Β str,
salesforce_org_id:Β str,
invite_object_team:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def admin_conversations_createForObjects(
+    self,
+    *,
+    object_id: str,
+    salesforce_org_id: str,
+    invite_object_team: Optional[bool] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Create a Salesforce channel for the corresponding object provided.
+    https://docs.slack.dev/reference/methods/admin.conversations.createForObjects
+    """
+    kwargs.update(
+        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
+    )
+    return self.api_call("admin.conversations.createForObjects", params=kwargs)
+
+

Create a Salesforce channel for the corresponding object provided. +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

def admin_conversations_delete(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6432,13 +6995,13 @@

Methods

**kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.conversations.delete

def admin_conversations_disconnectShared(self,
*,
channel_id:Β str,
leaving_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -6456,7 +7019,7 @@

Methods

**kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6466,7 +7029,7 @@

Methods

return self.api_call("admin.conversations.disconnectShared", params=kwargs)

Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

+https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
*,
channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -6488,7 +7051,7 @@

Methods

"""List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6509,7 +7072,7 @@

Methods

List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

+https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

def admin_conversations_getConversationPrefs(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6526,13 +7089,13 @@

Methods

**kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

+https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

def admin_conversations_getCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6549,13 +7112,13 @@

Methods

**kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

def admin_conversations_getTeams(self,
*,
channel_id:Β str,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -6574,7 +7137,7 @@

Methods

**kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6586,7 +7149,7 @@

Methods

return self.api_call("admin.conversations.getTeams", params=kwargs)

Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

+https://docs.slack.dev/reference/methods/admin.conversations.getTeams

def admin_conversations_invite(self, *, channel_id:Β str, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6604,7 +7167,7 @@

Methods

**kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6615,7 +7178,38 @@

Methods

return self.api_call("admin.conversations.invite", params=kwargs)

Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

+https://docs.slack.dev/reference/methods/admin.conversations.invite

+ +
+def admin_conversations_linkObjects(self, *, channel:Β str, record_id:Β str, salesforce_org_id:Β str, **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def admin_conversations_linkObjects(
+    self,
+    *,
+    channel: str,
+    record_id: str,
+    salesforce_org_id: str,
+    **kwargs,
+) -> SlackResponse:
+    """Link a Salesforce record to a channel.
+    https://docs.slack.dev/reference/methods/admin.conversations.linkObjects
+    """
+    kwargs.update(
+        {
+            "channel": channel,
+            "record_id": record_id,
+            "salesforce_org_id": salesforce_org_id,
+        }
+    )
+    return self.api_call("admin.conversations.linkObjects", params=kwargs)
+
+
def admin_conversations_lookup(self,
*,
last_message_activity_before:Β int,
team_ids:Β strΒ |Β Sequence[str],
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
max_member_count:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -6636,7 +7230,7 @@

Methods

**kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -6653,7 +7247,7 @@

Methods

return self.api_call("admin.conversations.lookup", params=kwargs)

Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

+https://docs.slack.dev/reference/methods/admin.conversations.lookup

def admin_conversations_removeCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6670,13 +7264,13 @@

Methods

**kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

def admin_conversations_rename(self, *, channel_id:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -6694,13 +7288,13 @@

Methods

**kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.conversations.rename

def admin_conversations_restrictAccess_addGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6719,7 +7313,7 @@

Methods

**kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6735,7 +7329,7 @@

Methods

)

Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

+https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

def admin_conversations_restrictAccess_listGroups(self, *, channel_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6753,7 +7347,7 @@

Methods

**kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -6768,7 +7362,7 @@

Methods

)
+https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

def admin_conversations_restrictAccess_removeGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6787,7 +7381,7 @@

Methods

**kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -6803,7 +7397,7 @@

Methods

)

Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

+https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

def admin_conversations_setConversationPrefs(self, *, channel_id:Β str, prefs:Β strΒ |Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -6869,7 +7463,7 @@

Methods

**kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -6879,7 +7473,7 @@

Methods

return self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

+https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

def admin_conversations_setCustomRetention(self, *, channel_id:Β str, duration_days:Β int, **kwargs) ‑>Β SlackResponse @@ -6897,13 +7491,13 @@

Methods

**kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

def admin_conversations_setTeams(self,
*,
channel_id:Β str,
org_channel:Β boolΒ |Β NoneΒ =Β None,
target_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -6923,7 +7517,7 @@

Methods

**kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -6939,7 +7533,7 @@

Methods

return self.api_call("admin.conversations.setTeams", params=kwargs)

Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

+https://docs.slack.dev/reference/methods/admin.conversations.setTeams

def admin_conversations_unarchive(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6956,37 +7550,66 @@

Methods

**kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs)

Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

+https://docs.slack.dev/reference/methods/admin.conversations.archive

-
-def admin_emoji_add(self, *, name:Β str, url:Β str, **kwargs) ‑>Β SlackResponse +
+def admin_conversations_unlinkObjects(self, *, channel:Β str, new_name:Β str, **kwargs) ‑>Β SlackResponse
Expand source code -
def admin_emoji_add(
+
def admin_conversations_unlinkObjects(
     self,
     *,
-    name: str,
+    channel: str,
+    new_name: str,
+    **kwargs,
+) -> SlackResponse:
+    """Unlink a Salesforce record from a channel.
+    https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects
+    """
+    kwargs.update(
+        {
+            "channel": channel,
+            "new_name": new_name,
+        }
+    )
+    return self.api_call("admin.conversations.unlinkObjects", params=kwargs)
+
+ +
+
+def admin_emoji_add(self, *, name:Β str, url:Β str, **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def admin_emoji_add(
+    self,
+    *,
+    name: str,
     url: str,
     **kwargs,
 ) -> SlackResponse:
     """Add an emoji.
-    https://api.slack.com/methods/admin.emoji.add
+    https://docs.slack.dev/reference/methods/admin.emoji.add
     """
     kwargs.update({"name": name, "url": url})
     return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.emoji.add

def admin_emoji_addAlias(self, *, alias_for:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -7004,13 +7627,13 @@

Methods

**kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.emoji.addAlias

def admin_emoji_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7028,13 +7651,13 @@

Methods

**kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

+https://docs.slack.dev/reference/methods/admin.emoji.list

def admin_emoji_remove(self, *, name:Β str, **kwargs) ‑>Β SlackResponse @@ -7051,13 +7674,13 @@

Methods

**kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

+https://docs.slack.dev/reference/methods/admin.emoji.remove

def admin_emoji_rename(self, *, name:Β str, new_name:Β str, **kwargs) ‑>Β SlackResponse @@ -7075,13 +7698,13 @@

Methods

**kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.emoji.rename

def admin_functions_list(self,
*,
app_ids:Β strΒ |Β Sequence[str],
team_id:Β strΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7101,7 +7724,7 @@

Methods

**kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7117,7 +7740,7 @@

Methods

return self.api_call("admin.functions.list", params=kwargs)

Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

+https://docs.slack.dev/reference/methods/admin.functions.list

def admin_functions_permissions_lookup(self, *, function_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7135,7 +7758,7 @@

Methods

) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7145,7 +7768,7 @@

Methods

Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

+https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

def admin_functions_permissions_set(self,
*,
function_id:Β str,
visibility:Β str,
user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7165,7 +7788,7 @@

Methods

) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7182,7 +7805,7 @@

Methods

Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

+https://docs.slack.dev/reference/methods/admin.functions.permissions.set

def admin_inviteRequests_approve(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7200,13 +7823,13 @@

Methods

**kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

def admin_inviteRequests_approved_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7225,7 +7848,7 @@

Methods

**kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7237,7 +7860,7 @@

Methods

return self.api_call("admin.inviteRequests.approved.list", params=kwargs)

List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

+https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

def admin_inviteRequests_denied_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7256,7 +7879,7 @@

Methods

**kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7268,7 +7891,7 @@

Methods

return self.api_call("admin.inviteRequests.denied.list", params=kwargs)

List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

+https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

def admin_inviteRequests_deny(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7286,13 +7909,13 @@

Methods

**kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

def admin_inviteRequests_list(self, **kwargs) ‑>Β SlackResponse @@ -7328,7 +7951,7 @@

Methods

**kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7342,7 +7965,7 @@

Methods

return self.api_call("admin.roles.addAssignments", params=kwargs)

Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

+https://docs.slack.dev/reference/methods/admin.roles.addAssignments

def admin_roles_listAssignments(self,
*,
role_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
entity_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β strΒ |Β intΒ |Β NoneΒ =Β None,
sort_dir:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7364,7 +7987,7 @@

Methods

) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7379,7 +8002,7 @@

Methods

Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

+https://docs.slack.dev/reference/methods/admin.roles.listAssignments

def admin_roles_removeAssignments(self,
*,
role_id:Β str,
entity_ids:Β strΒ |Β Sequence[str],
user_ids:Β strΒ |Β Sequence[str],
**kwargs) ‑>Β SlackResponse
@@ -7398,7 +8021,7 @@

Methods

**kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7412,7 +8035,7 @@

Methods

return self.api_call("admin.roles.removeAssignments", params=kwargs)

Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

+https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

def admin_teams_admins_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7431,7 +8054,7 @@

Methods

**kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7443,7 +8066,7 @@

Methods

return self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

+https://docs.slack.dev/reference/methods/admin.inviteRequests.list

def admin_teams_create(self,
*,
team_domain:Β str,
team_name:Β str,
team_description:Β strΒ |Β NoneΒ =Β None,
team_discoverability:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7463,7 +8086,7 @@

Methods

**kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7476,7 +8099,7 @@

Methods

return self.api_call("admin.teams.create", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.teams.create

def admin_teams_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7494,13 +8117,13 @@

Methods

**kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs)

List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

+https://docs.slack.dev/reference/methods/admin.teams.list

def admin_teams_owners_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7519,13 +8142,13 @@

Methods

**kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

+https://docs.slack.dev/reference/methods/admin.teams.owners.list

def admin_teams_settings_info(self, *, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -7542,13 +8165,13 @@

Methods

**kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs)

Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

+https://docs.slack.dev/reference/methods/admin.teams.settings.info

def admin_teams_settings_setDefaultChannels(self, *, team_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7566,7 +8189,7 @@

Methods

**kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7576,7 +8199,7 @@

Methods

return self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

def admin_teams_settings_setDescription(self, *, team_id:Β str, description:Β str, **kwargs) ‑>Β SlackResponse @@ -7594,13 +8217,13 @@

Methods

**kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

def admin_teams_settings_setDiscoverability(self, *, team_id:Β str, discoverability:Β str, **kwargs) ‑>Β SlackResponse @@ -7618,13 +8241,13 @@

Methods

**kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

def admin_teams_settings_setIcon(self, *, team_id:Β str, image_url:Β str, **kwargs) ‑>Β SlackResponse @@ -7642,13 +8265,13 @@

Methods

**kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

def admin_teams_settings_setName(self, *, team_id:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -7666,13 +8289,13 @@

Methods

**kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.teams.settings.setName

def admin_usergroups_addChannels(self,
*,
channel_ids:Β strΒ |Β Sequence[str],
usergroup_id:Β str,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7691,7 +8314,7 @@

Methods

**kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7701,7 +8324,7 @@

Methods

return self.api_call("admin.usergroups.addChannels", params=kwargs)

Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

+https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

def admin_usergroups_addTeams(self,
*,
usergroup_id:Β str,
team_ids:Β strΒ |Β Sequence[str],
auto_provision:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7720,7 +8343,7 @@

Methods

**kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7730,7 +8353,7 @@

Methods

return self.api_call("admin.usergroups.addTeams", params=kwargs)

Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

+https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

def admin_usergroups_listChannels(self,
*,
usergroup_id:Β str,
include_num_members:Β boolΒ |Β NoneΒ =Β None,
team_id:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7749,7 +8372,7 @@

Methods

**kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -7761,7 +8384,7 @@

Methods

return self.api_call("admin.usergroups.listChannels", params=kwargs)

Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

+https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

def admin_usergroups_removeChannels(self, *, usergroup_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7779,7 +8402,7 @@

Methods

**kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7789,7 +8412,7 @@

Methods

return self.api_call("admin.usergroups.removeChannels", params=kwargs)

Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

+https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

def admin_users_assign(self,
*,
team_id:Β str,
user_id:Β str,
channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
is_restricted:Β boolΒ |Β NoneΒ =Β None,
is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7810,7 +8433,7 @@

Methods

**kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -7827,7 +8450,7 @@

Methods

return self.api_call("admin.users.assign", params=kwargs)

Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

+https://docs.slack.dev/reference/methods/admin.users.assign

def admin_users_invite(self,
*,
team_id:Β str,
email:Β str,
channel_ids:Β strΒ |Β Sequence[str],
custom_message:Β strΒ |Β NoneΒ =Β None,
email_password_policy_enabled:Β boolΒ |Β NoneΒ =Β None,
guest_expiration_ts:Β strΒ |Β floatΒ |Β NoneΒ =Β None,
is_restricted:Β boolΒ |Β NoneΒ =Β None,
is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
real_name:Β strΒ |Β NoneΒ =Β None,
resend:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7853,7 +8476,7 @@

Methods

**kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -7875,10 +8498,10 @@

Methods

return self.api_call("admin.users.invite", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.users.invite

-def admin_users_list(self,
*,
team_id:Β str,
include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
is_active:Β boolΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+def admin_users_list(self,
*,
team_id:Β strΒ |Β NoneΒ =Β None,
include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
is_active:Β boolΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -7888,7 +8511,7 @@

Methods

def admin_users_list(
     self,
     *,
-    team_id: str,
+    team_id: Optional[str] = None,
     include_deactivated_user_workspaces: Optional[bool] = None,
     is_active: Optional[bool] = None,
     cursor: Optional[str] = None,
@@ -7896,7 +8519,7 @@ 

Methods

**kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -7910,7 +8533,7 @@

Methods

return self.api_call("admin.users.list", params=kwargs)
+https://docs.slack.dev/reference/methods/admin.users.list

def admin_users_remove(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -7928,13 +8551,13 @@

Methods

**kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs)

Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

+https://docs.slack.dev/reference/methods/admin.users.remove

def admin_users_session_clearSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7952,7 +8575,7 @@

Methods

) -> SlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7962,7 +8585,7 @@

Methods

Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

+https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

def admin_users_session_getSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7980,7 +8603,7 @@

Methods

) -> SlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7990,7 +8613,7 @@

Methods

Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

+https://docs.slack.dev/reference/methods/admin.users.session.getSettings

def admin_users_session_invalidate(self, *, session_id:Β str, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8008,13 +8631,13 @@

Methods

**kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs)

Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

+https://docs.slack.dev/reference/methods/admin.users.session.invalidate

def admin_users_session_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
user_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8034,7 +8657,7 @@

Methods

**kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -8047,7 +8670,7 @@

Methods

return self.api_call("admin.users.session.list", params=kwargs)

Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

+https://docs.slack.dev/reference/methods/admin.users.session.list

def admin_users_session_reset(self,
*,
user_id:Β str,
mobile_only:Β boolΒ |Β NoneΒ =Β None,
web_only:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8066,7 +8689,7 @@

Methods

**kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -8078,7 +8701,7 @@

Methods

return self.api_call("admin.users.session.reset", params=kwargs)

Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

+https://docs.slack.dev/reference/methods/admin.users.session.reset

def admin_users_session_resetBulk(self,
*,
user_ids:Β strΒ |Β Sequence[str],
mobile_only:Β boolΒ |Β NoneΒ =Β None,
web_only:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8097,7 +8720,7 @@

Methods

**kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8112,7 +8735,7 @@

Methods

return self.api_call("admin.users.session.resetBulk", params=kwargs)

Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

+https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

def admin_users_session_setSettings(self,
*,
user_ids:Β strΒ |Β Sequence[str],
desktop_app_browser_quit:Β boolΒ |Β NoneΒ =Β None,
duration:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8132,7 +8755,7 @@

Methods

) -> SlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8148,7 +8771,7 @@

Methods

Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

+https://docs.slack.dev/reference/methods/admin.users.session.setSettings

def admin_users_setAdmin(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8166,13 +8789,13 @@

Methods

**kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs)

Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

+https://docs.slack.dev/reference/methods/admin.users.setAdmin

def admin_users_setExpiration(self, *, expiration_ts:Β int, user_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8191,13 +8814,13 @@

Methods

**kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs)

Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

+https://docs.slack.dev/reference/methods/admin.users.setExpiration

def admin_users_setOwner(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8215,13 +8838,13 @@

Methods

**kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs)

Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

+https://docs.slack.dev/reference/methods/admin.users.setOwner

def admin_users_setRegular(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8239,13 +8862,13 @@

Methods

**kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs)

Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

+https://docs.slack.dev/reference/methods/admin.users.setRegular

def admin_users_unsupportedVersions_export(self,
*,
date_end_of_support:Β strΒ |Β intΒ |Β NoneΒ =Β None,
date_sessions_started:Β strΒ |Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8264,7 +8887,7 @@

Methods

) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8276,7 +8899,7 @@

Methods

Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

+https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

def admin_workflows_collaborators_add(self,
*,
collaborator_ids:Β strΒ |Β Sequence[str],
workflow_ids:Β strΒ |Β Sequence[str],
**kwargs) ‑>Β SlackResponse
@@ -8294,7 +8917,7 @@

Methods

**kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8307,7 +8930,7 @@

Methods

return self.api_call("admin.workflows.collaborators.add", params=kwargs)

Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

+https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

def admin_workflows_collaborators_remove(self,
*,
collaborator_ids:Β strΒ |Β Sequence[str],
workflow_ids:Β strΒ |Β Sequence[str],
**kwargs) ‑>Β SlackResponse
@@ -8325,7 +8948,7 @@

Methods

**kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8338,7 +8961,7 @@

Methods

return self.api_call("admin.workflows.collaborators.remove", params=kwargs)

Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

+https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

def admin_workflows_permissions_lookup(self,
*,
workflow_ids:Β strΒ |Β Sequence[str],
max_workflow_triggers:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8356,7 +8979,7 @@

Methods

**kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8370,7 +8993,7 @@

Methods

return self.api_call("admin.workflows.permissions.lookup", params=kwargs)

Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

+https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

def admin_workflows_unpublish(self, *, workflow_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -8436,7 +9059,7 @@

Methods

**kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8445,7 +9068,7 @@

Methods

return self.api_call("admin.workflows.unpublish", params=kwargs)

Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

+https://docs.slack.dev/reference/methods/admin.workflows.unpublish

def api_test(self, *, error:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8462,13 +9085,13 @@

Methods

**kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs)

Checks API calling code. -https://api.slack.com/methods/api.test

+https://docs.slack.dev/reference/methods/api.test

def apps_connections_open(self, *, app_token:Β str, **kwargs) ‑>Β SlackResponse @@ -8486,14 +9109,14 @@

Methods

) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

+https://docs.slack.dev/reference/methods/apps.connections.open

def apps_event_authorizations_list(self,
*,
event_context:Β str,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8513,14 +9136,14 @@

Methods

) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs)

Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

+https://docs.slack.dev/reference/methods/apps.event.authorizations.list

def apps_manifest_create(self, *, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -8537,7 +9160,7 @@

Methods

**kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8546,7 +9169,7 @@

Methods

return self.api_call("apps.manifest.create", params=kwargs)

Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

+https://docs.slack.dev/reference/methods/apps.manifest.create

def apps_manifest_delete(self, *, app_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8563,13 +9186,13 @@

Methods

**kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs)

Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

+https://docs.slack.dev/reference/methods/apps.manifest.delete

def apps_manifest_export(self, *, app_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8586,13 +9209,13 @@

Methods

**kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs)

Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

+https://docs.slack.dev/reference/methods/apps.manifest.export

def apps_manifest_update(self, *, app_id:Β str, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -8610,7 +9233,7 @@

Methods

**kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8620,7 +9243,7 @@

Methods

return self.api_call("apps.manifest.update", params=kwargs)

Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

+https://docs.slack.dev/reference/methods/apps.manifest.update

def apps_manifest_validate(self, *, manifest:Β strΒ |Β Dict[str,Β Any], app_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8638,7 +9261,7 @@

Methods

**kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8648,7 +9271,7 @@

Methods

return self.api_call("apps.manifest.validate", params=kwargs)
+https://docs.slack.dev/reference/methods/apps.manifest.validate

def apps_uninstall(self, *, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β SlackResponse @@ -8666,16 +9289,16 @@

Methods

**kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs)

Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

+https://docs.slack.dev/reference/methods/apps.uninstall

-def assistant_threads_setStatus(self, *, channel_id:Β str, thread_ts:Β str, status:Β str, **kwargs) ‑>Β SlackResponse +def assistant_threads_setStatus(self,
*,
channel_id:Β str,
thread_ts:Β str,
status:Β str,
loading_messages:Β List[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8688,16 +9311,20 @@

Methods

channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs)
+ kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs)
- +
def assistant_threads_setSuggestedPrompts(self,
*,
channel_id:Β str,
thread_ts:Β str,
title:Β strΒ |Β NoneΒ =Β None,
prompts:Β List[Dict[str,Β str]],
**kwargs) ‑>Β SlackResponse
@@ -8716,16 +9343,16 @@

Methods

prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: kwargs.update({"title": title}) return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
- +

Set suggested prompts for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

def assistant_threads_setTitle(self, *, channel_id:Β str, thread_ts:Β str, title:Β str, **kwargs) ‑>Β SlackResponse @@ -8743,14 +9370,14 @@

Methods

title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
- +

Set the title for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

def auth_revoke(self, *, test:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8767,13 +9394,13 @@

Methods

**kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/auth.revoke

def auth_teams_list(self,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
include_icon:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8791,13 +9418,13 @@

Methods

**kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs)

List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

+https://docs.slack.dev/reference/methods/auth.teams.list

def auth_test(self, **kwargs) ‑>Β SlackResponse @@ -8812,12 +9439,12 @@

Methods

**kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs)

Checks authentication & identity. -https://api.slack.com/methods/auth.test

+https://docs.slack.dev/reference/methods/auth.test

def bookmarks_add(self,
*,
channel_id:Β str,
title:Β str,
type:Β str,
emoji:Β strΒ |Β NoneΒ =Β None,
entity_id:Β strΒ |Β NoneΒ =Β None,
link:Β strΒ |Β NoneΒ =Β None,
parent_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8840,7 +9467,7 @@

Methods

**kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -8856,7 +9483,7 @@

Methods

return self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
+https://docs.slack.dev/reference/methods/bookmarks.add

def bookmarks_edit(self,
*,
bookmark_id:Β str,
channel_id:Β str,
emoji:Β strΒ |Β NoneΒ =Β None,
link:Β strΒ |Β NoneΒ =Β None,
title:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8877,7 +9504,7 @@

Methods

**kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -8891,7 +9518,7 @@

Methods

return self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
+https://docs.slack.dev/reference/methods/bookmarks.edit

def bookmarks_list(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8908,13 +9535,13 @@

Methods

**kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

+https://docs.slack.dev/reference/methods/bookmarks.list

def bookmarks_remove(self, *, bookmark_id:Β str, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8932,13 +9559,13 @@

Methods

**kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

+https://docs.slack.dev/reference/methods/bookmarks.remove

def bots_info(self, *, bot:Β strΒ |Β NoneΒ =Β None, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8956,13 +9583,13 @@

Methods

**kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs)

Gets information about a bot user. -https://api.slack.com/methods/bots.info

+https://docs.slack.dev/reference/methods/bots.info

def calls_add(self,
*,
external_unique_id:Β str,
join_url:Β str,
created_by:Β strΒ |Β NoneΒ =Β None,
date_start:Β intΒ |Β NoneΒ =Β None,
desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
external_display_id:Β strΒ |Β NoneΒ =Β None,
title:Β strΒ |Β NoneΒ =Β None,
users:Β strΒ |Β Sequence[Dict[str,Β str]]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -8986,7 +9613,7 @@

Methods

**kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -9006,7 +9633,7 @@

Methods

return self.api_call("calls.add", http_verb="POST", params=kwargs)
+https://docs.slack.dev/reference/methods/calls.add

def calls_end(self, *, id:Β str, duration:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -9024,13 +9651,13 @@

Methods

**kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs)
+https://docs.slack.dev/reference/methods/calls.end

def calls_info(self, *, id:Β str, **kwargs) ‑>Β SlackResponse @@ -9047,13 +9674,13 @@

Methods

**kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs)

Returns information about a Call. -https://api.slack.com/methods/calls.info

+https://docs.slack.dev/reference/methods/calls.info

def calls_participants_add(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β SlackResponse @@ -9071,14 +9698,14 @@

Methods

**kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

+https://docs.slack.dev/reference/methods/calls.participants.add

def calls_participants_remove(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β SlackResponse @@ -9096,14 +9723,14 @@

Methods

**kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

+https://docs.slack.dev/reference/methods/calls.participants.remove

def calls_update(self,
*,
id:Β str,
desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
join_url:Β strΒ |Β NoneΒ =Β None,
title:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9123,7 +9750,7 @@

Methods

**kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9136,7 +9763,7 @@

Methods

return self.api_call("calls.update", http_verb="POST", params=kwargs)

Updates information about a Call. -https://api.slack.com/methods/calls.update

+https://docs.slack.dev/reference/methods/calls.update

def canvases_access_delete(self,
*,
canvas_id:Β str,
channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9155,7 +9782,7 @@

Methods

**kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9171,7 +9798,7 @@

Methods

return self.api_call("canvases.access.delete", params=kwargs)

Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

+https://docs.slack.dev/reference/methods/canvases.access.delete

def canvases_access_set(self,
*,
canvas_id:Β str,
access_level:Β str,
channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9191,7 +9818,7 @@

Methods

**kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9208,7 +9835,7 @@

Methods

return self.api_call("canvases.access.set", params=kwargs)

Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

+https://docs.slack.dev/reference/methods/canvases.access.set

def canvases_create(self, *, title:Β strΒ |Β NoneΒ =Β None, document_content:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -9226,13 +9853,13 @@

Methods

**kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs)
+https://docs.slack.dev/reference/methods/canvases.create

def canvases_delete(self, *, canvas_id:Β str, **kwargs) ‑>Β SlackResponse @@ -9249,13 +9876,13 @@

Methods

**kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs)
+https://docs.slack.dev/reference/methods/canvases.delete

def canvases_edit(self, *, canvas_id:Β str, changes:Β Sequence[Dict[str,Β Any]], **kwargs) ‑>Β SlackResponse @@ -9273,13 +9900,13 @@

Methods

**kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs)
+https://docs.slack.dev/reference/methods/canvases.edit

def canvases_sections_lookup(self, *, canvas_id:Β str, criteria:Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -9297,13 +9924,13 @@

Methods

**kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs)

Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

+https://docs.slack.dev/reference/methods/canvases.sections.lookup

def channels_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -9620,6 +10247,38 @@

Methods

Unarchives a channel.

+
+def chat_appendStream(self, *, channel:Β str, ts:Β str, markdown_text:Β str, **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def chat_appendStream(
+    self,
+    *,
+    channel: str,
+    ts: str,
+    markdown_text: str,
+    **kwargs,
+) -> SlackResponse:
+    """Appends text to an existing streaming conversation.
+    https://docs.slack.dev/reference/methods/chat.appendStream
+    """
+    kwargs.update(
+        {
+            "channel": channel,
+            "ts": ts,
+            "markdown_text": markdown_text,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("chat.appendStream", json=kwargs)
+
+

Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

+
def chat_delete(self, *, channel:Β str, ts:Β str, as_user:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse
@@ -9637,13 +10296,13 @@

Methods

**kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs)
+https://docs.slack.dev/reference/methods/chat.delete

def chat_deleteScheduledMessage(self,
*,
channel:Β str,
scheduled_message_id:Β str,
as_user:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9662,7 +10321,7 @@

Methods

**kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9674,7 +10333,7 @@

Methods

return self.api_call("chat.deleteScheduledMessage", params=kwargs)
+https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

def chat_meMessage(self, *, channel:Β str, text:Β str, **kwargs) ‑>Β SlackResponse @@ -9716,16 +10375,16 @@

Methods

**kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs)

Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

+https://docs.slack.dev/reference/methods/chat.meMessage

-def chat_postEphemeral(self,
*,
channel:Β str,
user:Β str,
text:Β strΒ |Β NoneΒ =Β None,
as_user:Β boolΒ |Β NoneΒ =Β None,
attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
icon_emoji:Β strΒ |Β NoneΒ =Β None,
icon_url:Β strΒ |Β NoneΒ =Β None,
link_names:Β boolΒ |Β NoneΒ =Β None,
username:Β strΒ |Β NoneΒ =Β None,
parse:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+def chat_postEphemeral(self,
*,
channel:Β str,
user:Β str,
text:Β strΒ |Β NoneΒ =Β None,
as_user:Β boolΒ |Β NoneΒ =Β None,
attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
icon_emoji:Β strΒ |Β NoneΒ =Β None,
icon_url:Β strΒ |Β NoneΒ =Β None,
link_names:Β boolΒ |Β NoneΒ =Β None,
username:Β strΒ |Β NoneΒ =Β None,
parse:Β strΒ |Β NoneΒ =Β None,
markdown_text:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9747,10 +10406,11 @@

Methods

link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -9766,19 +10426,20 @@

Methods

"link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)

Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

+https://docs.slack.dev/reference/methods/chat.postEphemeral

-def chat_postMessage(self,
*,
channel:Β str,
text:Β strΒ |Β NoneΒ =Β None,
as_user:Β boolΒ |Β NoneΒ =Β None,
attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
unfurl_links:Β boolΒ |Β NoneΒ =Β None,
unfurl_media:Β boolΒ |Β NoneΒ =Β None,
container_id:Β strΒ |Β NoneΒ =Β None,
icon_emoji:Β strΒ |Β NoneΒ =Β None,
icon_url:Β strΒ |Β NoneΒ =Β None,
mrkdwn:Β boolΒ |Β NoneΒ =Β None,
link_names:Β boolΒ |Β NoneΒ =Β None,
username:Β strΒ |Β NoneΒ =Β None,
parse:Β strΒ |Β NoneΒ =Β None,
metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+def chat_postMessage(self,
*,
channel:Β str,
text:Β strΒ |Β NoneΒ =Β None,
as_user:Β boolΒ |Β NoneΒ =Β None,
attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
unfurl_links:Β boolΒ |Β NoneΒ =Β None,
unfurl_media:Β boolΒ |Β NoneΒ =Β None,
container_id:Β strΒ |Β NoneΒ =Β None,
icon_emoji:Β strΒ |Β NoneΒ =Β None,
icon_url:Β strΒ |Β NoneΒ =Β None,
mrkdwn:Β boolΒ |Β NoneΒ =Β None,
link_names:Β boolΒ |Β NoneΒ =Β None,
username:Β strΒ |Β NoneΒ =Β None,
parse:Β strΒ |Β NoneΒ =Β None,
metadata:Β DictΒ |Β MetadataΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
markdown_text:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9804,11 +10465,12 @@

Methods

link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -9829,19 +10491,20 @@

Methods

"username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)

Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

+https://docs.slack.dev/reference/methods/chat.postMessage

-def chat_scheduleMessage(self,
*,
channel:Β str,
post_at:Β strΒ |Β int,
text:Β str,
as_user:Β boolΒ |Β NoneΒ =Β None,
attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
parse:Β strΒ |Β NoneΒ =Β None,
reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
unfurl_links:Β boolΒ |Β NoneΒ =Β None,
unfurl_media:Β boolΒ |Β NoneΒ =Β None,
link_names:Β boolΒ |Β NoneΒ =Β None,
metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+def chat_scheduleMessage(self,
*,
channel:Β str,
post_at:Β strΒ |Β int,
text:Β strΒ |Β NoneΒ =Β None,
as_user:Β boolΒ |Β NoneΒ =Β None,
attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
parse:Β strΒ |Β NoneΒ =Β None,
reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
unfurl_links:Β boolΒ |Β NoneΒ =Β None,
unfurl_media:Β boolΒ |Β NoneΒ =Β None,
link_names:Β boolΒ |Β NoneΒ =Β None,
metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
markdown_text:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9853,7 +10516,7 @@

Methods

*, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9864,10 +10527,11 @@

Methods

unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -9884,16 +10548,17 @@

Methods

"unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
+https://docs.slack.dev/reference/methods/chat.scheduleMessage

def chat_scheduledMessages_list(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
latest:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
oldest:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9915,7 +10580,7 @@

Methods

**kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -9930,10 +10595,199 @@

Methods

return self.api_call("chat.scheduledMessages.list", params=kwargs)
+https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

+ +
+def chat_startStream(self,
*,
channel:Β str,
thread_ts:Β str,
markdown_text:Β strΒ |Β NoneΒ =Β None,
recipient_team_id:Β strΒ |Β NoneΒ =Β None,
recipient_user_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def chat_startStream(
+    self,
+    *,
+    channel: str,
+    thread_ts: str,
+    markdown_text: Optional[str] = None,
+    recipient_team_id: Optional[str] = None,
+    recipient_user_id: Optional[str] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Starts a new streaming conversation.
+    https://docs.slack.dev/reference/methods/chat.startStream
+    """
+    kwargs.update(
+        {
+            "channel": channel,
+            "thread_ts": thread_ts,
+            "markdown_text": markdown_text,
+            "recipient_team_id": recipient_team_id,
+            "recipient_user_id": recipient_user_id,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("chat.startStream", json=kwargs)
+
+

Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

+
+
+def chat_stopStream(self,
*,
channel:Β str,
ts:Β str,
markdown_text:Β strΒ |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def chat_stopStream(
+    self,
+    *,
+    channel: str,
+    ts: str,
+    markdown_text: Optional[str] = None,
+    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
+    metadata: Optional[Union[Dict, Metadata]] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Stops a streaming conversation.
+    https://docs.slack.dev/reference/methods/chat.stopStream
+    """
+    kwargs.update(
+        {
+            "channel": channel,
+            "ts": ts,
+            "markdown_text": markdown_text,
+            "blocks": blocks,
+            "metadata": metadata,
+        }
+    )
+    _parse_web_class_objects(kwargs)
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("chat.stopStream", json=kwargs)
+
+ +
+
+def chat_stream(self,
*,
buffer_size:Β intΒ =Β 256,
channel:Β str,
thread_ts:Β str,
recipient_team_id:Β strΒ |Β NoneΒ =Β None,
recipient_user_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β ChatStream
+
+
+
+ +Expand source code + +
def chat_stream(
+    self,
+    *,
+    buffer_size: int = 256,
+    channel: str,
+    thread_ts: str,
+    recipient_team_id: Optional[str] = None,
+    recipient_user_id: Optional[str] = None,
+    **kwargs,
+) -> ChatStream:
+    """Stream markdown text into a conversation.
+
+    This method starts a new chat stream in a conversation that can be appended to. After appending an entire message,
+    the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.
+
+    The following methods are used:
+
+    - chat.startStream: Starts a new streaming conversation.
+      [Reference](https://docs.slack.dev/reference/methods/chat.startStream).
+    - chat.appendStream: Appends text to an existing streaming conversation.
+      [Reference](https://docs.slack.dev/reference/methods/chat.appendStream).
+    - chat.stopStream: Stops a streaming conversation.
+      [Reference](https://docs.slack.dev/reference/methods/chat.stopStream).
+
+    Args:
+        buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this
+          value decreases the number of method calls made for the same amount of text, which is useful to avoid rate
+          limits. Default: 256.
+        channel: An encoded ID that represents a channel, private group, or DM.
+        thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
+          request.
+        recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
+          streaming to channels.
+        recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
+        **kwargs: Additional arguments passed to the underlying API calls.
+
+    Returns:
+        ChatStream instance for managing the stream
+
+    Example:
+        ```python
+        streamer = client.chat_stream(
+            channel="C0123456789",
+            thread_ts="1700000001.123456",
+            recipient_team_id="T0123456789",
+            recipient_user_id="U0123456789",
+        )
+        streamer.append(markdown_text="**hello wo")
+        streamer.append(markdown_text="rld!**")
+        streamer.stop()
+        ```
+    """
+    return ChatStream(
+        self,
+        logger=self._logger,
+        channel=channel,
+        thread_ts=thread_ts,
+        recipient_team_id=recipient_team_id,
+        recipient_user_id=recipient_user_id,
+        buffer_size=buffer_size,
+        **kwargs,
+    )
+
+

Stream markdown text into a conversation.

+

This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, +the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.

+

The following methods are used:

+
    +
  • chat.startStream: Starts a new streaming conversation. +Reference.
  • +
  • chat.appendStream: Appends text to an existing streaming conversation. +Reference.
  • +
  • chat.stopStream: Stops a streaming conversation. +Reference.
  • +
+

Args

+
+
buffer_size
+
The length of markdown_text to buffer in-memory before calling a stream method. Increasing this +value decreases the number of method calls made for the same amount of text, which is useful to avoid rate +limits. Default: 256.
+
channel
+
An encoded ID that represents a channel, private group, or DM.
+
thread_ts
+
Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
+
recipient_team_id
+
The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
+
recipient_user_id
+
The encoded ID of the user to receive the streaming text. Required when streaming to channels.
+
**kwargs
+
Additional arguments passed to the underlying API calls.
+
+

Returns

+

ChatStream instance for managing the stream

+

Example

+
streamer = client.chat_stream(
+    channel="C0123456789",
+    thread_ts="1700000001.123456",
+    recipient_team_id="T0123456789",
+    recipient_user_id="U0123456789",
+)
+streamer.append(markdown_text="**hello wo")
+streamer.append(markdown_text="rld!**")
+streamer.stop()
+
-def chat_unfurl(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
ts:Β strΒ |Β NoneΒ =Β None,
source:Β strΒ |Β NoneΒ =Β None,
unfurl_id:Β strΒ |Β NoneΒ =Β None,
unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
user_auth_message:Β strΒ |Β NoneΒ =Β None,
user_auth_required:Β boolΒ |Β NoneΒ =Β None,
user_auth_url:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+def chat_unfurl(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
ts:Β strΒ |Β NoneΒ =Β None,
source:Β strΒ |Β NoneΒ =Β None,
unfurl_id:Β strΒ |Β NoneΒ =Β None,
unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
metadata:Β DictΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
user_auth_message:Β strΒ |Β NoneΒ =Β None,
user_auth_required:Β boolΒ |Β NoneΒ =Β None,
user_auth_url:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -9948,6 +10802,7 @@

Methods

source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -9955,7 +10810,7 @@

Methods

**kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -9964,6 +10819,7 @@

Methods

"source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -9976,10 +10832,10 @@

Methods

return self.api_call("chat.unfurl", json=kwargs)

Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

+https://docs.slack.dev/reference/methods/chat.unfurl

-def chat_update(self,
*,
channel:Β str,
ts:Β str,
text:Β strΒ |Β NoneΒ =Β None,
attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
as_user:Β boolΒ |Β NoneΒ =Β None,
file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
link_names:Β boolΒ |Β NoneΒ =Β None,
parse:Β strΒ |Β NoneΒ =Β None,
reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+def chat_update(self,
*,
channel:Β str,
ts:Β str,
text:Β strΒ |Β NoneΒ =Β None,
attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
as_user:Β boolΒ |Β NoneΒ =Β None,
file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
link_names:Β boolΒ |Β NoneΒ =Β None,
parse:Β strΒ |Β NoneΒ =Β None,
reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
markdown_text:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10000,10 +10856,11 @@

Methods

parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -10017,6 +10874,7 @@

Methods

"parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10025,12 +10883,12 @@

Methods

kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)

Updates a message in a channel. -https://api.slack.com/methods/chat.update

+https://docs.slack.dev/reference/methods/chat.update

def conversations_acceptSharedInvite(self,
*,
channel_name:Β str,
channel_id:Β strΒ |Β NoneΒ =Β None,
invite_id:Β strΒ |Β NoneΒ =Β None,
free_trial_accepted:Β boolΒ |Β NoneΒ =Β None,
is_private:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10052,7 +10910,7 @@

Methods

**kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -10069,7 +10927,7 @@

Methods

return self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

+https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

def conversations_approveSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10087,13 +10945,13 @@

Methods

**kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

+https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

def conversations_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10110,13 +10968,13 @@

Methods

**kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs)
+https://docs.slack.dev/reference/methods/conversations.archive

def conversations_canvases_create(self, *, channel_id:Β str, document_content:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -10134,13 +10992,13 @@

Methods

**kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs)
+https://docs.slack.dev/reference/methods/conversations.canvases.create

def conversations_close(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10157,13 +11015,13 @@

Methods

**kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs)

Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

+https://docs.slack.dev/reference/methods/conversations.close

def conversations_create(self,
*,
name:Β str,
is_private:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10182,13 +11040,13 @@

Methods

**kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs)

Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

+https://docs.slack.dev/reference/methods/conversations.create

def conversations_declineSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10206,13 +11064,13 @@

Methods

**kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

+https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

def conversations_externalInvitePermissions_set(self, *, action:Β str, channel:Β str, target_team:Β str, **kwargs) ‑>Β SlackResponse @@ -10226,7 +11084,7 @@

Methods

self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10238,7 +11096,7 @@

Methods

return self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

+https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

def conversations_history(self,
*,
channel:Β str,
cursor:Β strΒ |Β NoneΒ =Β None,
inclusive:Β boolΒ |Β NoneΒ =Β None,
include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
latest:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
oldest:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10261,7 +11119,7 @@

Methods

**kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10277,7 +11135,7 @@

Methods

return self.api_call("conversations.history", http_verb="GET", params=kwargs)

Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

+https://docs.slack.dev/reference/methods/conversations.history

def conversations_info(self,
*,
channel:Β str,
include_locale:Β boolΒ |Β NoneΒ =Β None,
include_num_members:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10296,7 +11154,7 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10308,7 +11166,7 @@

Methods

return self.api_call("conversations.info", http_verb="GET", params=kwargs)

Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

+https://docs.slack.dev/reference/methods/conversations.info

def conversations_invite(self,
*,
channel:Β str,
users:Β strΒ |Β Sequence[str],
force:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10327,7 +11185,7 @@

Methods

**kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10342,7 +11200,7 @@

Methods

return self.api_call("conversations.invite", params=kwargs)
+https://docs.slack.dev/reference/methods/conversations.invite

def conversations_inviteShared(self,
*,
channel:Β str,
emails:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10361,7 +11219,7 @@

Methods

**kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10377,7 +11235,7 @@

Methods

return self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

+https://docs.slack.dev/reference/methods/conversations.inviteShared

def conversations_join(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10394,13 +11252,13 @@

Methods

**kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs)

Joins an existing conversation. -https://api.slack.com/methods/conversations.join

+https://docs.slack.dev/reference/methods/conversations.join

def conversations_kick(self, *, channel:Β str, user:Β str, **kwargs) ‑>Β SlackResponse @@ -10418,13 +11276,13 @@

Methods

**kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs)

Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

+https://docs.slack.dev/reference/methods/conversations.kick

def conversations_leave(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10441,13 +11299,13 @@

Methods

**kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs)
+https://docs.slack.dev/reference/methods/conversations.leave

def conversations_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
exclude_archived:Β boolΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10468,7 +11326,7 @@

Methods

**kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10485,7 +11343,7 @@

Methods

return self.api_call("conversations.list", http_verb="GET", params=kwargs)

Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

+https://docs.slack.dev/reference/methods/conversations.list

def conversations_listConnectInvites(self,
*,
count:Β intΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10505,14 +11363,14 @@

Methods

) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs)

List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

+https://docs.slack.dev/reference/methods/conversations.listConnectInvites

def conversations_mark(self, *, channel:Β str, ts:Β str, **kwargs) ‑>Β SlackResponse @@ -10530,13 +11388,13 @@

Methods

**kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs)

Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

+https://docs.slack.dev/reference/methods/conversations.mark

def conversations_members(self, *, channel:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10555,13 +11413,13 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs)

Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

+https://docs.slack.dev/reference/methods/conversations.members

def conversations_open(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
return_im:Β boolΒ |Β NoneΒ =Β None,
users:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10580,7 +11438,7 @@

Methods

**kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10592,7 +11450,7 @@

Methods

return self.api_call("conversations.open", params=kwargs)

Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

+https://docs.slack.dev/reference/methods/conversations.open

def conversations_rename(self, *, channel:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -10610,13 +11468,13 @@

Methods

**kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs)
+https://docs.slack.dev/reference/methods/conversations.rename

def conversations_replies(self,
*,
channel:Β str,
ts:Β str,
cursor:Β strΒ |Β NoneΒ =Β None,
inclusive:Β boolΒ |Β NoneΒ =Β None,
include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
latest:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
oldest:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10640,7 +11498,7 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10657,7 +11515,7 @@

Methods

return self.api_call("conversations.replies", http_verb="GET", params=kwargs)

Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

+https://docs.slack.dev/reference/methods/conversations.replies

def conversations_requestSharedInvite_approve(self,
*,
invite_id:Β str,
channel_id:Β strΒ |Β NoneΒ =Β None,
is_external_limited:Β strΒ |Β NoneΒ =Β None,
message:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10677,7 +11535,7 @@

Methods

**kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10691,7 +11549,7 @@

Methods

return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

+https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

def conversations_requestSharedInvite_deny(self, *, invite_id:Β str, message:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10709,13 +11567,13 @@

Methods

**kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

+https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

def conversations_requestSharedInvite_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
include_approved:Β boolΒ |Β NoneΒ =Β None,
include_denied:Β boolΒ |Β NoneΒ =Β None,
include_expired:Β boolΒ |Β NoneΒ =Β None,
invite_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
user_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -10738,7 +11596,7 @@

Methods

**kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -10758,7 +11616,7 @@

Methods

return self.api_call("conversations.requestSharedInvite.list", params=kwargs)

Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

+https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

def conversations_setPurpose(self, *, channel:Β str, purpose:Β str, **kwargs) ‑>Β SlackResponse @@ -10776,13 +11634,13 @@

Methods

**kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs)

Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

+https://docs.slack.dev/reference/methods/conversations.setPurpose

def conversations_setTopic(self, *, channel:Β str, topic:Β str, **kwargs) ‑>Β SlackResponse @@ -10800,13 +11658,13 @@

Methods

**kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs)

Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

+https://docs.slack.dev/reference/methods/conversations.setTopic

def conversations_unarchive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10823,13 +11681,13 @@

Methods

**kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs)
+https://docs.slack.dev/reference/methods/conversations.unarchive

def dialog_open(self, *, dialog:Β Dict[str,Β Any], trigger_id:Β str, **kwargs) ‑>Β SlackResponse @@ -10847,7 +11705,7 @@

Methods

**kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -10855,7 +11713,7 @@

Methods

return self.api_call("dialog.open", json=kwargs)

Open a dialog with a user. -https://api.slack.com/methods/dialog.open

+https://docs.slack.dev/reference/methods/dialog.open

def dnd_endDnd(self, **kwargs) ‑>Β SlackResponse @@ -10870,12 +11728,12 @@

Methods

**kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs)

Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

+https://docs.slack.dev/reference/methods/dnd.endDnd

def dnd_endSnooze(self, **kwargs) ‑>Β SlackResponse @@ -10890,12 +11748,12 @@

Methods

**kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs)

Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

+https://docs.slack.dev/reference/methods/dnd.endSnooze

def dnd_info(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10913,13 +11771,13 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs)

Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

+https://docs.slack.dev/reference/methods/dnd.info

def dnd_setSnooze(self, *, num_minutes:Β strΒ |Β int, **kwargs) ‑>Β SlackResponse @@ -10936,13 +11794,13 @@

Methods

**kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

+https://docs.slack.dev/reference/methods/dnd.setSnooze

def dnd_teamInfo(self, users:Β strΒ |Β Sequence[str], team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10959,7 +11817,7 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -10969,7 +11827,7 @@

Methods

return self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

+https://docs.slack.dev/reference/methods/dnd.teamInfo

def emoji_list(self, include_categories:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10985,13 +11843,48 @@

Methods

**kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs)

Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

+https://docs.slack.dev/reference/methods/emoji.list

+ +
+def entity_presentDetails(self,
trigger_id:Β str,
metadata:Β DictΒ |Β EntityMetadataΒ |Β NoneΒ =Β None,
user_auth_required:Β boolΒ |Β NoneΒ =Β None,
user_auth_url:Β strΒ |Β NoneΒ =Β None,
error:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def entity_presentDetails(
+    self,
+    trigger_id: str,
+    metadata: Optional[Union[Dict, EntityMetadata]] = None,
+    user_auth_required: Optional[bool] = None,
+    user_auth_url: Optional[str] = None,
+    error: Optional[Dict[str, Any]] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Provides entity details for the flexpane.
+    https://docs.slack.dev/reference/methods/entity.presentDetails/
+    """
+    kwargs.update({"trigger_id": trigger_id})
+    if metadata is not None:
+        kwargs.update({"metadata": metadata})
+    if user_auth_required is not None:
+        kwargs.update({"user_auth_required": user_auth_required})
+    if user_auth_url is not None:
+        kwargs.update({"user_auth_url": user_auth_url})
+    if error is not None:
+        kwargs.update({"error": error})
+    _parse_web_class_objects(kwargs)
+    return self.api_call("entity.presentDetails", json=kwargs)
+
+

Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

def files_comments_delete(self, *, file:Β str, id:Β str, **kwargs) ‑>Β SlackResponse @@ -11009,13 +11902,13 @@

Methods

**kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs)

Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

+https://docs.slack.dev/reference/methods/files.comments.delete

def files_completeUploadExternal(self,
*,
files:Β List[Dict[str,Β str]],
channel_id:Β strΒ |Β NoneΒ =Β None,
channels:Β List[str]Β |Β NoneΒ =Β None,
initial_comment:Β strΒ |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11036,7 +11929,7 @@

Methods

**kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -11052,7 +11945,7 @@

Methods

return self.api_call("files.completeUploadExternal", params=kwargs)

Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

+https://docs.slack.dev/reference/methods/files.completeUploadExternal

def files_delete(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -11069,13 +11962,13 @@

Methods

**kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs)
+https://docs.slack.dev/reference/methods/files.delete

def files_getUploadURLExternal(self,
*,
filename:Β str,
length:Β int,
alt_txt:Β strΒ |Β NoneΒ =Β None,
snippet_type:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11095,7 +11988,7 @@

Methods

**kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11108,7 +12001,7 @@

Methods

return self.api_call("files.getUploadURLExternal", params=kwargs)

Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

+https://docs.slack.dev/reference/methods/files.getUploadURLExternal

def files_info(self,
*,
file:Β str,
count:Β intΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
page:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11129,7 +12022,7 @@

Methods

**kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11143,7 +12036,7 @@

Methods

return self.api_call("files.info", http_verb="GET", params=kwargs)

Gets information about a team file. -https://api.slack.com/methods/files.info

+https://docs.slack.dev/reference/methods/files.info

def files_list(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
count:Β intΒ |Β NoneΒ =Β None,
page:Β intΒ |Β NoneΒ =Β None,
show_files_hidden_by_limit:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
ts_from:Β strΒ |Β NoneΒ =Β None,
ts_to:Β strΒ |Β NoneΒ =Β None,
types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
user:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11168,7 +12061,7 @@

Methods

**kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11189,7 +12082,7 @@

Methods

return self.api_call("files.list", http_verb="GET", params=kwargs)

Lists & filters team files. -https://api.slack.com/methods/files.list

+https://docs.slack.dev/reference/methods/files.list

def files_remote_add(self,
*,
external_id:Β str,
external_url:Β str,
title:Β str,
filetype:Β strΒ |Β NoneΒ =Β None,
indexable_file_contents:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
preview_image:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11211,7 +12104,7 @@

Methods

**kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11238,7 +12131,7 @@

Methods

)

Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

+https://docs.slack.dev/reference/methods/files.remote.add

def files_remote_info(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11256,13 +12149,13 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs)

Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

+https://docs.slack.dev/reference/methods/files.remote.info

def files_remote_list(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
ts_from:Β strΒ |Β NoneΒ =Β None,
ts_to:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11283,7 +12176,7 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11297,7 +12190,7 @@

Methods

return self.api_call("files.remote.list", http_verb="GET", params=kwargs)

Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

+https://docs.slack.dev/reference/methods/files.remote.list

def files_remote_remove(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11315,13 +12208,13 @@

Methods

**kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
+https://docs.slack.dev/reference/methods/files.remote.remove

def files_remote_share(self,
*,
channels:Β strΒ |Β Sequence[str],
external_id:Β strΒ |Β NoneΒ =Β None,
file:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11340,7 +12233,7 @@

Methods

**kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11352,7 +12245,7 @@

Methods

return self.api_call("files.remote.share", http_verb="GET", params=kwargs)

Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

+https://docs.slack.dev/reference/methods/files.remote.share

def files_remote_update(self,
*,
external_id:Β strΒ |Β NoneΒ =Β None,
external_url:Β strΒ |Β NoneΒ =Β None,
file:Β strΒ |Β NoneΒ =Β None,
title:Β strΒ |Β NoneΒ =Β None,
filetype:Β strΒ |Β NoneΒ =Β None,
indexable_file_contents:Β strΒ |Β NoneΒ =Β None,
preview_image:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11375,7 +12268,7 @@

Methods

**kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11403,7 +12296,7 @@

Methods

)

Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

+https://docs.slack.dev/reference/methods/files.remote.update

def files_revokePublicURL(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -11420,13 +12313,13 @@

Methods

**kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs)

Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

+https://docs.slack.dev/reference/methods/files.revokePublicURL

def files_sharedPublicURL(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -11443,13 +12336,13 @@

Methods

**kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs)

Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

+https://docs.slack.dev/reference/methods/files.sharedPublicURL

def files_upload(self,
*,
file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
filename:Β strΒ |Β NoneΒ =Β None,
filetype:Β strΒ |Β NoneΒ =Β None,
initial_comment:Β strΒ |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
title:Β strΒ |Β NoneΒ =Β None,
channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -11473,7 +12366,7 @@

Methods

**kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11506,7 +12399,7 @@

Methods

return self.api_call("files.upload", data=kwargs)

Uploads or creates a file. -https://api.slack.com/methods/files.upload

+https://docs.slack.dev/reference/methods/files.upload

def files_upload_v2(self,
*,
filename:Β strΒ |Β NoneΒ =Β None,
file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β os.PathLikeΒ |Β NoneΒ =Β None,
content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
title:Β strΒ |Β NoneΒ =Β None,
alt_txt:Β strΒ |Β NoneΒ =Β None,
snippet_type:Β strΒ |Β NoneΒ =Β None,
file_uploads:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
channel:Β strΒ |Β NoneΒ =Β None,
channels:Β List[str]Β |Β NoneΒ =Β None,
initial_comment:Β strΒ |Β NoneΒ =Β None,
thread_ts:Β strΒ |Β NoneΒ =Β None,
request_file_info:Β boolΒ =Β True,
**kwargs) ‑>Β SlackResponse
@@ -11537,12 +12430,12 @@

Methods

) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11621,14 +12514,14 @@

Methods

This wrapper method provides an easy way to upload files using the following endpoints:

@@ -11648,13 +12541,13 @@

Methods

**kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs)

Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

+https://docs.slack.dev/reference/methods/functions.completeError

def functions_completeSuccess(self, *, function_execution_id:Β str, outputs:Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -11672,13 +12565,13 @@

Methods

**kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs)

Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

+https://docs.slack.dev/reference/methods/functions.completeSuccess

def groups_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12154,7 +13047,7 @@

Methods

**kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12164,7 +13057,7 @@

Methods

return self.api_call("migration.exchange", http_verb="GET", params=kwargs)

For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

+https://docs.slack.dev/reference/methods/migration.exchange

def mpim_close(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12311,7 +13204,7 @@

Methods

**kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12323,7 +13216,7 @@

Methods

)

Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

+https://docs.slack.dev/reference/methods/oauth.access

def oauth_v2_access(self,
*,
client_id:Β str,
client_secret:Β str,
code:Β strΒ |Β NoneΒ =Β None,
redirect_uri:Β strΒ |Β NoneΒ =Β None,
grant_type:Β strΒ |Β NoneΒ =Β None,
refresh_token:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12349,7 +13242,7 @@

Methods

**kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12366,7 +13259,7 @@

Methods

)

Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

+https://docs.slack.dev/reference/methods/oauth.v2.access

def oauth_v2_exchange(self, *, token:Β str, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β SlackResponse @@ -12385,13 +13278,13 @@

Methods

**kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs)

Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

+https://docs.slack.dev/reference/methods/oauth.v2.exchange

def openid_connect_token(self,
client_id:Β str,
client_secret:Β str,
code:Β strΒ |Β NoneΒ =Β None,
redirect_uri:Β strΒ |Β NoneΒ =Β None,
grant_type:Β strΒ |Β NoneΒ =Β None,
refresh_token:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12412,7 +13305,7 @@

Methods

**kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12429,7 +13322,7 @@

Methods

)

Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

+https://docs.slack.dev/reference/methods/openid.connect.token

def openid_connect_userInfo(self, **kwargs) ‑>Β SlackResponse @@ -12444,12 +13337,12 @@

Methods

**kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs)

Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

+https://docs.slack.dev/reference/methods/openid.connect.userInfo

def pins_add(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12467,13 +13360,13 @@

Methods

**kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs)

Pins an item to a channel. -https://api.slack.com/methods/pins.add

+https://docs.slack.dev/reference/methods/pins.add

def pins_list(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12490,13 +13383,13 @@

Methods

**kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs)

Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

+https://docs.slack.dev/reference/methods/pins.list

def pins_remove(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12514,13 +13407,13 @@

Methods

**kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs)

Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

+https://docs.slack.dev/reference/methods/pins.remove

def reactions_add(self, *, channel:Β str, name:Β str, timestamp:Β str, **kwargs) ‑>Β SlackResponse @@ -12539,13 +13432,13 @@

Methods

**kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs)

Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

+https://docs.slack.dev/reference/methods/reactions.add

def reactions_get(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
file:Β strΒ |Β NoneΒ =Β None,
file_comment:Β strΒ |Β NoneΒ =Β None,
full:Β boolΒ |Β NoneΒ =Β None,
timestamp:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12566,7 +13459,7 @@

Methods

**kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12580,7 +13473,7 @@

Methods

return self.api_call("reactions.get", http_verb="GET", params=kwargs)

Gets reactions for an item. -https://api.slack.com/methods/reactions.get

+https://docs.slack.dev/reference/methods/reactions.get

def reactions_list(self,
*,
count:Β intΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
full:Β boolΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
page:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
user:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12603,7 +13496,7 @@

Methods

**kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12619,7 +13512,7 @@

Methods

return self.api_call("reactions.list", http_verb="GET", params=kwargs)

Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

+https://docs.slack.dev/reference/methods/reactions.list

def reactions_remove(self,
*,
name:Β str,
channel:Β strΒ |Β NoneΒ =Β None,
file:Β strΒ |Β NoneΒ =Β None,
file_comment:Β strΒ |Β NoneΒ =Β None,
timestamp:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12640,7 +13533,7 @@

Methods

**kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12654,7 +13547,7 @@

Methods

return self.api_call("reactions.remove", params=kwargs)

Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

+https://docs.slack.dev/reference/methods/reactions.remove

def reminders_add(self,
*,
text:Β str,
time:Β str,
team_id:Β strΒ |Β NoneΒ =Β None,
user:Β strΒ |Β NoneΒ =Β None,
recurrence:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12675,7 +13568,7 @@

Methods

**kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12689,7 +13582,7 @@

Methods

return self.api_call("reminders.add", params=kwargs)
+https://docs.slack.dev/reference/methods/reminders.add

def reminders_complete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12707,13 +13600,13 @@

Methods

**kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs)
+https://docs.slack.dev/reference/methods/reminders.complete

def reminders_delete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12731,13 +13624,13 @@

Methods

**kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs)
+https://docs.slack.dev/reference/methods/reminders.delete

def reminders_info(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12755,13 +13648,13 @@

Methods

**kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs)

Gets information about a reminder. -https://api.slack.com/methods/reminders.info

+https://docs.slack.dev/reference/methods/reminders.info

def reminders_list(self, *, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12778,13 +13671,13 @@

Methods

**kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs)

Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

+https://docs.slack.dev/reference/methods/reminders.list

def rtm_connect(self,
*,
batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
presence_sub:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12802,13 +13695,13 @@

Methods

**kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs)

Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

+https://docs.slack.dev/reference/methods/rtm.connect

def rtm_start(self,
*,
batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
include_locale:Β boolΒ |Β NoneΒ =Β None,
mpim_aware:Β boolΒ |Β NoneΒ =Β None,
no_latest:Β boolΒ |Β NoneΒ =Β None,
no_unreads:Β boolΒ |Β NoneΒ =Β None,
presence_sub:Β boolΒ |Β NoneΒ =Β None,
simple_latest:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12831,7 +13724,7 @@

Methods

**kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -12847,7 +13740,7 @@

Methods

return self.api_call("rtm.start", http_verb="GET", params=kwargs)

Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

+https://docs.slack.dev/reference/methods/rtm.start

def search_all(self,
*,
query:Β str,
count:Β intΒ |Β NoneΒ =Β None,
highlight:Β boolΒ |Β NoneΒ =Β None,
page:Β intΒ |Β NoneΒ =Β None,
sort:Β strΒ |Β NoneΒ =Β None,
sort_dir:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12870,7 +13763,7 @@

Methods

**kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -12886,7 +13779,7 @@

Methods

return self.api_call("search.all", http_verb="GET", params=kwargs)

Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

+https://docs.slack.dev/reference/methods/search.all

def search_files(self,
*,
query:Β str,
count:Β intΒ |Β NoneΒ =Β None,
highlight:Β boolΒ |Β NoneΒ =Β None,
page:Β intΒ |Β NoneΒ =Β None,
sort:Β strΒ |Β NoneΒ =Β None,
sort_dir:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12909,7 +13802,7 @@

Methods

**kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -12925,7 +13818,7 @@

Methods

return self.api_call("search.files", http_verb="GET", params=kwargs)

Searches for files matching a query. -https://api.slack.com/methods/search.files

+https://docs.slack.dev/reference/methods/search.files

def search_messages(self,
*,
query:Β str,
count:Β intΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
highlight:Β boolΒ |Β NoneΒ =Β None,
page:Β intΒ |Β NoneΒ =Β None,
sort:Β strΒ |Β NoneΒ =Β None,
sort_dir:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12949,7 +13842,7 @@

Methods

**kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -12966,7 +13859,382 @@

Methods

return self.api_call("search.messages", http_verb="GET", params=kwargs)

Searches for messages matching a query. -https://api.slack.com/methods/search.messages

+https://docs.slack.dev/reference/methods/search.messages

+ +
+def slackLists_access_delete(self,
*,
list_id:Β str,
channel_ids:Β List[str]Β |Β NoneΒ =Β None,
user_ids:Β List[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def slackLists_access_delete(
+    self,
+    *,
+    list_id: str,
+    channel_ids: Optional[List[str]] = None,
+    user_ids: Optional[List[str]] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Revoke access to a List for specified entities.
+    https://docs.slack.dev/reference/methods/slackLists.access.delete
+    """
+    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.access.delete", json=kwargs)
+
+

Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

+
+
+def slackLists_access_set(self,
*,
list_id:Β str,
access_level:Β str,
channel_ids:Β List[str]Β |Β NoneΒ =Β None,
user_ids:Β List[str]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def slackLists_access_set(
+    self,
+    *,
+    list_id: str,
+    access_level: str,
+    channel_ids: Optional[List[str]] = None,
+    user_ids: Optional[List[str]] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Set the access level to a List for specified entities.
+    https://docs.slack.dev/reference/methods/slackLists.access.set
+    """
+    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.access.set", json=kwargs)
+
+

Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

+
+
+def slackLists_create(self,
*,
name:Β str,
description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
schema:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
copy_from_list_id:Β strΒ |Β NoneΒ =Β None,
include_copied_list_records:Β boolΒ |Β NoneΒ =Β None,
todo_mode:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def slackLists_create(
+    self,
+    *,
+    name: str,
+    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
+    schema: Optional[List[Dict[str, Any]]] = None,
+    copy_from_list_id: Optional[str] = None,
+    include_copied_list_records: Optional[bool] = None,
+    todo_mode: Optional[bool] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Creates a List.
+    https://docs.slack.dev/reference/methods/slackLists.create
+    """
+    kwargs.update(
+        {
+            "name": name,
+            "description_blocks": description_blocks,
+            "schema": schema,
+            "copy_from_list_id": copy_from_list_id,
+            "include_copied_list_records": include_copied_list_records,
+            "todo_mode": todo_mode,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.create", json=kwargs)
+
+ +
+
+def slackLists_download_get(self, *, list_id:Β str, job_id:Β str, **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def slackLists_download_get(
+    self,
+    *,
+    list_id: str,
+    job_id: str,
+    **kwargs,
+) -> SlackResponse:
+    """Retrieve List download URL from an export job to download List contents.
+    https://docs.slack.dev/reference/methods/slackLists.download.get
+    """
+    kwargs.update(
+        {
+            "list_id": list_id,
+            "job_id": job_id,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.download.get", json=kwargs)
+
+

Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

+
+
+def slackLists_download_start(self, *, list_id:Β str, include_archived:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def slackLists_download_start(
+    self,
+    *,
+    list_id: str,
+    include_archived: Optional[bool] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Initiate a job to export List contents.
+    https://docs.slack.dev/reference/methods/slackLists.download.start
+    """
+    kwargs.update(
+        {
+            "list_id": list_id,
+            "include_archived": include_archived,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.download.start", json=kwargs)
+
+ +
+
+def slackLists_items_create(self,
*,
list_id:Β str,
duplicated_item_id:Β strΒ |Β NoneΒ =Β None,
parent_item_id:Β strΒ |Β NoneΒ =Β None,
initial_fields:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def slackLists_items_create(
+    self,
+    *,
+    list_id: str,
+    duplicated_item_id: Optional[str] = None,
+    parent_item_id: Optional[str] = None,
+    initial_fields: Optional[List[Dict[str, Any]]] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Add a new item to an existing List.
+    https://docs.slack.dev/reference/methods/slackLists.items.create
+    """
+    kwargs.update(
+        {
+            "list_id": list_id,
+            "duplicated_item_id": duplicated_item_id,
+            "parent_item_id": parent_item_id,
+            "initial_fields": initial_fields,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.items.create", json=kwargs)
+
+ +
+
+def slackLists_items_delete(self, *, list_id:Β str, id:Β str, **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def slackLists_items_delete(
+    self,
+    *,
+    list_id: str,
+    id: str,
+    **kwargs,
+) -> SlackResponse:
+    """Deletes an item from an existing List.
+    https://docs.slack.dev/reference/methods/slackLists.items.delete
+    """
+    kwargs.update(
+        {
+            "list_id": list_id,
+            "id": id,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.items.delete", json=kwargs)
+
+ +
+
+def slackLists_items_deleteMultiple(self, *, list_id:Β str, ids:Β List[str], **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def slackLists_items_deleteMultiple(
+    self,
+    *,
+    list_id: str,
+    ids: List[str],
+    **kwargs,
+) -> SlackResponse:
+    """Deletes multiple items from an existing List.
+    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
+    """
+    kwargs.update(
+        {
+            "list_id": list_id,
+            "ids": ids,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.items.deleteMultiple", json=kwargs)
+
+ +
+
+def slackLists_items_info(self, *, list_id:Β str, id:Β str, include_is_subscribed:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def slackLists_items_info(
+    self,
+    *,
+    list_id: str,
+    id: str,
+    include_is_subscribed: Optional[bool] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Get a row from a List.
+    https://docs.slack.dev/reference/methods/slackLists.items.info
+    """
+    kwargs.update(
+        {
+            "list_id": list_id,
+            "id": id,
+            "include_is_subscribed": include_is_subscribed,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.items.info", json=kwargs)
+
+ +
+
+def slackLists_items_list(self,
*,
list_id:Β str,
limit:Β intΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
archived:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def slackLists_items_list(
+    self,
+    *,
+    list_id: str,
+    limit: Optional[int] = None,
+    cursor: Optional[str] = None,
+    archived: Optional[bool] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Get records from a List.
+    https://docs.slack.dev/reference/methods/slackLists.items.list
+    """
+    kwargs.update(
+        {
+            "list_id": list_id,
+            "limit": limit,
+            "cursor": cursor,
+            "archived": archived,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.items.list", json=kwargs)
+
+ +
+
+def slackLists_items_update(self, *, list_id:Β str, cells:Β List[Dict[str,Β Any]], **kwargs) ‑>Β SlackResponse +
+
+
+ +Expand source code + +
def slackLists_items_update(
+    self,
+    *,
+    list_id: str,
+    cells: List[Dict[str, Any]],
+    **kwargs,
+) -> SlackResponse:
+    """Updates cells in a List.
+    https://docs.slack.dev/reference/methods/slackLists.items.update
+    """
+    kwargs.update(
+        {
+            "list_id": list_id,
+            "cells": cells,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.items.update", json=kwargs)
+
+ +
+
+def slackLists_update(self,
*,
id:Β str,
name:Β strΒ |Β NoneΒ =Β None,
description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
todo_mode:Β boolΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
+
+
+
+ +Expand source code + +
def slackLists_update(
+    self,
+    *,
+    id: str,
+    name: Optional[str] = None,
+    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
+    todo_mode: Optional[bool] = None,
+    **kwargs,
+) -> SlackResponse:
+    """Update a List.
+    https://docs.slack.dev/reference/methods/slackLists.update
+    """
+    kwargs.update(
+        {
+            "id": id,
+            "name": name,
+            "description_blocks": description_blocks,
+            "todo_mode": todo_mode,
+        }
+    )
+    kwargs = _remove_none_values(kwargs)
+    return self.api_call("slackLists.update", json=kwargs)
+
+
def stars_add(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
file:Β strΒ |Β NoneΒ =Β None,
file_comment:Β strΒ |Β NoneΒ =Β None,
timestamp:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -12986,7 +14254,7 @@

Methods

**kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -12999,7 +14267,7 @@

Methods

return self.api_call("stars.add", params=kwargs)
+https://docs.slack.dev/reference/methods/stars.add

def stars_list(self,
*,
count:Β intΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
page:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13020,7 +14288,7 @@

Methods

**kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -13034,7 +14302,7 @@

Methods

return self.api_call("stars.list", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/stars.list

def stars_remove(self,
*,
channel:Β strΒ |Β NoneΒ =Β None,
file:Β strΒ |Β NoneΒ =Β None,
file_comment:Β strΒ |Β NoneΒ =Β None,
timestamp:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13054,7 +14322,7 @@

Methods

**kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -13067,7 +14335,7 @@

Methods

return self.api_call("stars.remove", params=kwargs)

Removes a star from an item. -https://api.slack.com/methods/stars.remove

+https://docs.slack.dev/reference/methods/stars.remove

def team_accessLogs(self,
*,
before:Β strΒ |Β intΒ |Β NoneΒ =Β None,
count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13089,7 +14357,7 @@

Methods

**kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13104,7 +14372,7 @@

Methods

return self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

+https://docs.slack.dev/reference/methods/team.accessLogs

def team_billableInfo(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13122,13 +14390,13 @@

Methods

**kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

+https://docs.slack.dev/reference/methods/team.billableInfo

def team_billing_info(self, **kwargs) ‑>Β SlackResponse @@ -13143,12 +14411,12 @@

Methods

**kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs)

Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

+https://docs.slack.dev/reference/methods/team.billing.info

def team_externalTeams_disconnect(self, *, target_team:Β str, **kwargs) ‑>Β SlackResponse @@ -13165,7 +14433,7 @@

Methods

**kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13175,7 +14443,7 @@

Methods

return self.api_call("team.externalTeams.disconnect", params=kwargs)
+https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

def team_externalTeams_list(self,
*,
connection_status_filter:Β strΒ |Β NoneΒ =Β None,
slack_connect_pref_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
sort_direction:Β strΒ |Β NoneΒ =Β None,
sort_field:Β strΒ |Β NoneΒ =Β None,
workspace_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
cursor:Β strΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13198,7 +14466,7 @@

Methods

**kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13222,7 +14490,7 @@

Methods

return self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

+https://docs.slack.dev/reference/methods/team.externalTeams.list

def team_info(self, *, team:Β strΒ |Β NoneΒ =Β None, domain:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13240,13 +14508,13 @@

Methods

**kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs)

Gets information about the current team. -https://api.slack.com/methods/team.info

+https://docs.slack.dev/reference/methods/team.info

def team_integrationLogs(self,
*,
app_id:Β strΒ |Β NoneΒ =Β None,
change_type:Β strΒ |Β NoneΒ =Β None,
count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
service_id:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
user:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13269,7 +14537,7 @@

Methods

**kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13285,7 +14553,7 @@

Methods

return self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

+https://docs.slack.dev/reference/methods/team.integrationLogs

def team_preferences_list(self, **kwargs) ‑>Β SlackResponse @@ -13300,12 +14568,12 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs)

Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

+https://docs.slack.dev/reference/methods/team.preferences.list

def team_profile_get(self, *, visibility:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13322,13 +14590,13 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/team.profile.get

def tooling_tokens_rotate(self, *, refresh_token:Β str, **kwargs) ‑>Β SlackResponse @@ -13345,13 +14613,13 @@

Methods

**kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs)

Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

+https://docs.slack.dev/reference/methods/tooling.tokens.rotate

def usergroups_create(self,
*,
name:Β str,
channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
description:Β strΒ |Β NoneΒ =Β None,
handle:Β strΒ |Β NoneΒ =Β None,
include_count:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13373,7 +14641,7 @@

Methods

**kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13391,7 +14659,7 @@

Methods

return self.api_call("usergroups.create", params=kwargs)
+https://docs.slack.dev/reference/methods/usergroups.create

def usergroups_disable(self,
*,
usergroup:Β str,
include_count:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13410,13 +14678,13 @@

Methods

**kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs)

Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

+https://docs.slack.dev/reference/methods/usergroups.disable

def usergroups_enable(self,
*,
usergroup:Β str,
include_count:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13435,13 +14703,13 @@

Methods

**kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs)
+https://docs.slack.dev/reference/methods/usergroups.enable

def usergroups_list(self,
*,
include_count:Β boolΒ |Β NoneΒ =Β None,
include_disabled:Β boolΒ |Β NoneΒ =Β None,
include_users:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13461,7 +14729,7 @@

Methods

**kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13474,7 +14742,7 @@

Methods

return self.api_call("usergroups.list", http_verb="GET", params=kwargs)

List all User Groups for a team -https://api.slack.com/methods/usergroups.list

+https://docs.slack.dev/reference/methods/usergroups.list

def usergroups_update(self,
*,
usergroup:Β str,
channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
description:Β strΒ |Β NoneΒ =Β None,
handle:Β strΒ |Β NoneΒ =Β None,
include_count:Β boolΒ |Β NoneΒ =Β None,
name:Β strΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13497,7 +14765,7 @@

Methods

**kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13516,7 +14784,7 @@

Methods

return self.api_call("usergroups.update", params=kwargs)
+https://docs.slack.dev/reference/methods/usergroups.update

def usergroups_users_list(self,
*,
usergroup:Β str,
include_disabled:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13535,7 +14803,7 @@

Methods

**kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13547,7 +14815,7 @@

Methods

return self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/usergroups.users.list

def usergroups_users_update(self,
*,
usergroup:Β str,
users:Β strΒ |Β Sequence[str],
include_count:Β boolΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13567,7 +14835,7 @@

Methods

**kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13583,7 +14851,7 @@

Methods

return self.api_call("usergroups.users.update", params=kwargs)

Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

+https://docs.slack.dev/reference/methods/usergroups.users.update

def users_conversations(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
exclude_archived:Β boolΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
user:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13605,7 +14873,7 @@

Methods

**kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13623,7 +14891,7 @@

Methods

return self.api_call("users.conversations", http_verb="GET", params=kwargs)

List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

+https://docs.slack.dev/reference/methods/users.conversations

def users_deletePhoto(self, **kwargs) ‑>Β SlackResponse @@ -13638,12 +14906,12 @@

Methods

**kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/users.deletePhoto

def users_discoverableContacts_lookup(self, email:Β str, **kwargs) ‑>Β SlackResponse @@ -13659,13 +14927,13 @@

Methods

**kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs)

Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

+https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

def users_getPresence(self, *, user:Β str, **kwargs) ‑>Β SlackResponse @@ -13682,13 +14950,13 @@

Methods

**kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs)

Gets user presence information. -https://api.slack.com/methods/users.getPresence

+https://docs.slack.dev/reference/methods/users.getPresence

def users_identity(self, **kwargs) ‑>Β SlackResponse @@ -13703,12 +14971,12 @@

Methods

**kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs)
+https://docs.slack.dev/reference/methods/users.identity

def users_info(self, *, user:Β str, include_locale:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13726,13 +14994,13 @@

Methods

**kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs)

Gets information about a user. -https://api.slack.com/methods/users.info

+https://docs.slack.dev/reference/methods/users.info

def users_list(self,
*,
cursor:Β strΒ |Β NoneΒ =Β None,
include_locale:Β boolΒ |Β NoneΒ =Β None,
limit:Β intΒ |Β NoneΒ =Β None,
team_id:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13752,7 +15020,7 @@

Methods

**kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -13765,7 +15033,7 @@

Methods

return self.api_call("users.list", http_verb="GET", params=kwargs)

Lists all users in a Slack team. -https://api.slack.com/methods/users.list

+https://docs.slack.dev/reference/methods/users.list

def users_lookupByEmail(self, *, email:Β str, **kwargs) ‑>Β SlackResponse @@ -13782,13 +15050,13 @@

Methods

**kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

+https://docs.slack.dev/reference/methods/users.lookupByEmail

def users_profile_get(self, *, user:Β strΒ |Β NoneΒ =Β None, include_labels:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13806,13 +15074,13 @@

Methods

**kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs)

Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

+https://docs.slack.dev/reference/methods/users.profile.get

def users_profile_set(self,
*,
name:Β strΒ |Β NoneΒ =Β None,
value:Β strΒ |Β NoneΒ =Β None,
user:Β strΒ |Β NoneΒ =Β None,
profile:Β DictΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13832,7 +15100,7 @@

Methods

**kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -13847,7 +15115,7 @@

Methods

return self.api_call("users.profile.set", json=kwargs)

Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

+https://docs.slack.dev/reference/methods/users.profile.set

def users_setPhoto(self,
*,
image:Β strΒ |Β io.IOBase,
crop_w:Β strΒ |Β intΒ |Β NoneΒ =Β None,
crop_x:Β strΒ |Β intΒ |Β NoneΒ =Β None,
crop_y:Β strΒ |Β intΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13867,13 +15135,13 @@

Methods

**kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
+https://docs.slack.dev/reference/methods/users.setPhoto

def users_setPresence(self, *, presence:Β str, **kwargs) ‑>Β SlackResponse @@ -13890,13 +15158,13 @@

Methods

**kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs)
+https://docs.slack.dev/reference/methods/users.setPresence

def views_open(self,
*,
trigger_id:Β strΒ |Β NoneΒ =Β None,
interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
view:Β dictΒ |Β View,
**kwargs) ‑>Β SlackResponse
@@ -13915,8 +15183,8 @@

Methods

**kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13928,8 +15196,8 @@

Methods

return self.api_call("views.open", json=kwargs)
+https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

def views_publish(self,
*,
user_id:Β str,
view:Β dictΒ |Β View,
hash:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -13949,8 +15217,8 @@

Methods

) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -13963,8 +15231,8 @@

Methods

Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

+app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

def views_push(self,
*,
trigger_id:Β strΒ |Β NoneΒ =Β None,
interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
view:Β dictΒ |Β View,
**kwargs) ‑>Β SlackResponse
@@ -13986,9 +15254,9 @@

Methods

Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14003,9 +15271,9 @@

Methods

Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

+https://docs.slack.dev/reference/methods/views.push

def views_update(self,
*,
view:Β dictΒ |Β View,
external_id:Β strΒ |Β NoneΒ =Β None,
view_id:Β strΒ |Β NoneΒ =Β None,
hash:Β strΒ |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -14027,9 +15295,9 @@

Methods

"""Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -14049,9 +15317,119 @@

Methods

Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

+https://docs.slack.dev/reference/methods/views.update

+ +
+
+
+ +Expand source code + +
def workflows_featured_add(
+    self,
+    *,
+    channel_id: str,
+    trigger_ids: Union[str, Sequence[str]],
+    **kwargs,
+) -> SlackResponse:
+    """Add featured workflows to a channel.
+    https://docs.slack.dev/reference/methods/workflows.featured.add
+    """
+    kwargs.update({"channel_id": channel_id})
+    if isinstance(trigger_ids, (list, tuple)):
+        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
+    else:
+        kwargs.update({"trigger_ids": trigger_ids})
+    return self.api_call("workflows.featured.add", params=kwargs)
+
+ +
+ +
+
+ +Expand source code + +
def workflows_featured_list(
+    self,
+    *,
+    channel_ids: Union[str, Sequence[str]],
+    **kwargs,
+) -> SlackResponse:
+    """List the featured workflows for specified channels.
+    https://docs.slack.dev/reference/methods/workflows.featured.list
+    """
+    if isinstance(channel_ids, (list, tuple)):
+        kwargs.update({"channel_ids": ",".join(channel_ids)})
+    else:
+        kwargs.update({"channel_ids": channel_ids})
+    return self.api_call("workflows.featured.list", params=kwargs)
+
+

List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

+
+ +
+
+ +Expand source code + +
def workflows_featured_remove(
+    self,
+    *,
+    channel_id: str,
+    trigger_ids: Union[str, Sequence[str]],
+    **kwargs,
+) -> SlackResponse:
+    """Remove featured workflows from a channel.
+    https://docs.slack.dev/reference/methods/workflows.featured.remove
+    """
+    kwargs.update({"channel_id": channel_id})
+    if isinstance(trigger_ids, (list, tuple)):
+        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
+    else:
+        kwargs.update({"trigger_ids": trigger_ids})
+    return self.api_call("workflows.featured.remove", params=kwargs)
+
+ +
+ +
+
+ +Expand source code + +
def workflows_featured_set(
+    self,
+    *,
+    channel_id: str,
+    trigger_ids: Union[str, Sequence[str]],
+    **kwargs,
+) -> SlackResponse:
+    """Set featured workflows for a channel.
+    https://docs.slack.dev/reference/methods/workflows.featured.set
+    """
+    kwargs.update({"channel_id": channel_id})
+    if isinstance(trigger_ids, (list, tuple)):
+        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
+    else:
+        kwargs.update({"trigger_ids": trigger_ids})
+    return self.api_call("workflows.featured.set", params=kwargs)
+
+
def workflows_stepCompleted(self, *, workflow_step_execute_id:Β str, outputs:Β dictΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -14069,7 +15447,7 @@

Methods

**kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -14079,7 +15457,7 @@

Methods

return self.api_call("workflows.stepCompleted", json=kwargs)

Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

+https://docs.slack.dev/reference/methods/workflows.stepCompleted

def workflows_stepFailed(self, *, workflow_step_execute_id:Β str, error:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -14097,7 +15475,7 @@

Methods

**kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14110,7 +15488,7 @@

Methods

return self.api_call("workflows.stepFailed", json=kwargs)

Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

+https://docs.slack.dev/reference/methods/workflows.stepFailed

def workflows_updateStep(self,
*,
workflow_step_edit_id:Β str,
inputs:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
outputs:Β List[Dict[str,Β str]]Β |Β NoneΒ =Β None,
**kwargs) ‑>Β SlackResponse
@@ -14129,7 +15507,7 @@

Methods

**kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14141,7 +15519,7 @@

Methods

return self.api_call("workflows.updateStep", json=kwargs)

Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

+https://docs.slack.dev/reference/methods/workflows.updateStep

Inherited members

@@ -14194,7 +15572,7 @@

Inherited members

): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -14413,19 +15791,19 @@

Inherited members

http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp

API client for Incoming Webhooks and response_url

-

https://api.slack.com/messaging/webhooks

+

https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/

Args

url
@@ -14667,6 +16045,7 @@

WebClientadmin_conversations_convertToPrivate
  • admin_conversations_convertToPublic
  • admin_conversations_create
  • +
  • admin_conversations_createForObjects
  • admin_conversations_delete
  • admin_conversations_disconnectShared
  • admin_conversations_ekm_listOriginalConnectedChannelInfo
  • @@ -14674,6 +16053,7 @@

    WebClientadmin_conversations_getCustomRetention
  • admin_conversations_getTeams
  • admin_conversations_invite
  • +
  • admin_conversations_linkObjects
  • admin_conversations_lookup
  • admin_conversations_removeCustomRetention
  • admin_conversations_rename
  • @@ -14685,6 +16065,7 @@

    WebClientadmin_conversations_setCustomRetention
  • admin_conversations_setTeams
  • admin_conversations_unarchive
  • +
  • admin_conversations_unlinkObjects
  • admin_emoji_add
  • admin_emoji_addAlias
  • admin_emoji_list
  • @@ -14783,6 +16164,7 @@

    WebClientchannels_setPurpose
  • channels_setTopic
  • channels_unarchive
  • +
  • chat_appendStream
  • chat_delete
  • chat_deleteScheduledMessage
  • chat_getPermalink
  • @@ -14791,6 +16173,9 @@

    WebClientchat_postMessage
  • chat_scheduleMessage
  • chat_scheduledMessages_list
  • +
  • chat_startStream
  • +
  • chat_stopStream
  • +
  • chat_stream
  • chat_unfurl
  • chat_update
  • conversations_acceptSharedInvite
  • @@ -14828,6 +16213,7 @@

    WebClientdnd_setSnooze
  • dnd_teamInfo
  • emoji_list
  • +
  • entity_presentDetails
  • files_comments_delete
  • files_completeUploadExternal
  • files_delete
  • @@ -14897,6 +16283,18 @@

    WebClientsearch_all
  • search_files
  • search_messages
  • +
  • slackLists_access_delete
  • +
  • slackLists_access_set
  • +
  • slackLists_create
  • +
  • slackLists_download_get
  • +
  • slackLists_download_start
  • +
  • slackLists_items_create
  • +
  • slackLists_items_delete
  • +
  • slackLists_items_deleteMultiple
  • +
  • slackLists_items_info
  • +
  • slackLists_items_list
  • +
  • slackLists_items_update
  • +
  • slackLists_update
  • stars_add
  • stars_list
  • stars_remove
  • @@ -14933,6 +16331,10 @@

    WebClientviews_publish
  • views_push
  • views_update
  • +
  • workflows_featured_add
  • +
  • workflows_featured_list
  • +
  • workflows_featured_remove
  • +
  • workflows_featured_set
  • workflows_stepCompleted
  • workflows_stepFailed
  • workflows_updateStep
  • @@ -14958,7 +16360,7 @@

    Web diff --git a/docs/static/api-docs/slack_sdk/models/attachments/index.html b/docs/reference/models/attachments/index.html similarity index 93% rename from docs/static/api-docs/slack_sdk/models/attachments/index.html rename to docs/reference/models/attachments/index.html index 3bd9d3179..5a7d10c20 100644 --- a/docs/static/api-docs/slack_sdk/models/attachments/index.html +++ b/docs/reference/models/attachments/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.attachments API documentation @@ -82,8 +82,8 @@

    Classes

    return json
    +https://docs.slack.dev/messaging/formatting-message-text/#rich-layouts +https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#message_action_fields

    Ancestors

    Class variables

    -
    var attributes
    +
    var attributes :Β Set[str]

    The type of the None singleton.

    @@ -828,7 +981,7 @@

    Inherited members

    different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() label_max_length = 75 options_max_length = 100 logger = logging.getLogger(__name__) @@ -845,13 +998,13 @@

    Inherited members

    UI) and a list of Option objects. Blocks: - https://api.slack.com/reference/block-kit/composition-objects#option-group + https://docs.slack.dev/reference/block-kit/composition-objects/option-group-object Dialogs: - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements Legacy interactive attachments: - https://api.slack.com/legacy/interactive-message-field-guide#option_groups_to_place_within_message_menu_actions + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_groups Args: label: Text to display at the top of this group of options. @@ -913,11 +1066,11 @@

    Inherited members

    Create a group of Option objects - pass in a label (that will be part of the UI) and a list of Option objects.

    Blocks: -https://api.slack.com/reference/block-kit/composition-objects#option-group

    +https://docs.slack.dev/reference/block-kit/composition-objects/option-group-object

    Dialogs: -https://api.slack.com/dialogs#select_elements

    +https://docs.slack.dev/legacy/legacy-dialogs/#select_elements

    Legacy interactive attachments: -https://api.slack.com/legacy/interactive-message-field-guide#option_groups_to_place_within_message_menu_actions

    +https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_groups

    Args

    label
    @@ -932,7 +1085,7 @@

    Ancestors

    Class variables

    -
    var attributes
    +
    var attributes :Β Set[str]

    The type of the None singleton.

    @@ -990,7 +1143,7 @@

    Inherited members

    def __init__(self, *, text: str, emoji: Optional[bool] = None): """A plain text object, meaning markdown characters will not be parsed as formatting information. - https://api.slack.com/reference/block-kit/composition-objects#text + https://docs.slack.dev/reference/block-kit/composition-objects/text-object Args: text (required): The text for the block. This field accepts any of the standard text formatting markup @@ -1013,7 +1166,7 @@

    Inherited members

    plain_text typed text object

    A plain text object, meaning markdown characters will not be parsed as formatting information. -https://api.slack.com/reference/block-kit/composition-objects#text

    +https://docs.slack.dev/reference/block-kit/composition-objects/text-object

    Args

    text : required
    @@ -1095,6 +1248,130 @@

    Inherited members

    +
    +class RawTextObject +(*, text:Β str) +
    +
    +
    + +Expand source code + +
    class RawTextObject(TextObject):
    +    """raw_text typed text object"""
    +
    +    type = "raw_text"
    +
    +    @property
    +    def attributes(self) -> Set[str]:  # type: ignore[override]
    +        return {"text", "type"}
    +
    +    def __init__(self, *, text: str):
    +        """A raw text object used in table block cells.
    +        https://docs.slack.dev/reference/block-kit/composition-objects/text-object/
    +        https://docs.slack.dev/reference/block-kit/blocks/table-block
    +
    +        Args:
    +            text (required): The text content for the table block cell.
    +        """
    +        super().__init__(text=text, type=self.type)
    +
    +    @staticmethod
    +    def from_str(text: str) -> "RawTextObject":
    +        """Transforms a string into a RawTextObject"""
    +        return RawTextObject(text=text)
    +
    +    @staticmethod
    +    def direct_from_string(text: str) -> Dict[str, Any]:
    +        """Transforms a string into the required object shape to act as a RawTextObject"""
    +        return RawTextObject.from_str(text).to_dict()
    +
    +    @JsonValidator("text attribute must have at least 1 character")
    +    def _validate_text_min_length(self):
    +        return len(self.text) >= 1
    +
    +

    raw_text typed text object

    +

    A raw text object used in table block cells. +https://docs.slack.dev/reference/block-kit/composition-objects/text-object/ +https://docs.slack.dev/reference/block-kit/blocks/table-block

    +

    Args

    +
    +
    text : required
    +
    The text content for the table block cell.
    +
    +

    Ancestors

    + +

    Class variables

    +
    +
    var type
    +
    +

    The type of the None singleton.

    +
    +
    +

    Static methods

    +
    +
    +def direct_from_string(text:Β str) ‑>Β Dict[str,Β Any] +
    +
    +
    + +Expand source code + +
    @staticmethod
    +def direct_from_string(text: str) -> Dict[str, Any]:
    +    """Transforms a string into the required object shape to act as a RawTextObject"""
    +    return RawTextObject.from_str(text).to_dict()
    +
    +

    Transforms a string into the required object shape to act as a RawTextObject

    +
    +
    +def from_str(text:Β str) ‑>Β RawTextObject +
    +
    +
    + +Expand source code + +
    @staticmethod
    +def from_str(text: str) -> "RawTextObject":
    +    """Transforms a string into a RawTextObject"""
    +    return RawTextObject(text=text)
    +
    +

    Transforms a string into a RawTextObject

    +
    +
    +

    Instance variables

    +
    +
    prop attributes :Β Set[str]
    +
    +
    + +Expand source code + +
    @property
    +def attributes(self) -> Set[str]:  # type: ignore[override]
    +    return {"text", "type"}
    +
    +

    Build an unordered collection of unique elements.

    +
    +
    +

    Inherited members

    + +
    class SlackFile (*, id:Β strΒ |Β NoneΒ =Β None, url:Β strΒ |Β NoneΒ =Β None) @@ -1114,7 +1391,7 @@

    Inherited members

    url: Optional[str] = None, ): """An object containing Slack file information to be used in an image block or image element. - https://api.slack.com/reference/block-kit/composition-objects#slack_file + https://docs.slack.dev/reference/block-kit/composition-objects/slack-file-object Args: id: Slack ID of the file. @@ -1134,7 +1411,7 @@

    Inherited members

    The base class for JSON serializable class objects

    An object containing Slack file information to be used in an image block or image element. -https://api.slack.com/reference/block-kit/composition-objects#slack_file

    +https://docs.slack.dev/reference/block-kit/composition-objects/slack-file-object

    Args

    id
    @@ -1243,6 +1520,7 @@

    Subclasses

    Class variables

    @@ -1427,6 +1705,17 @@

    FeedbackButtonObject

    + + +
  • MarkdownTextObject

    • attributes
    • @@ -1469,6 +1758,15 @@

    • +

      RawTextObject

      + +
    • +
    • SlackFile

      • attributes
      • @@ -1501,7 +1799,7 @@

        diff --git a/docs/static/api-docs/slack_sdk/models/blocks/block_elements.html b/docs/reference/models/blocks/block_elements.html similarity index 91% rename from docs/static/api-docs/slack_sdk/models/blocks/block_elements.html rename to docs/reference/models/blocks/block_elements.html index 9423149fc..375ee07ce 100644 --- a/docs/static/api-docs/slack_sdk/models/blocks/block_elements.html +++ b/docs/reference/models/blocks/block_elements.html @@ -3,7 +3,7 @@ - + slack_sdk.models.blocks.block_elements API documentation @@ -57,7 +57,7 @@

        Classes

        class BlockElement(JsonObject, metaclass=ABCMeta):
             """Block Elements are things that exists inside of your Blocks.
        -    https://api.slack.com/reference/block-kit/block-elements
        +    https://docs.slack.dev/reference/block-kit/block-elements/
             """
         
             attributes = {"type"}
        @@ -119,7 +119,7 @@ 

        Classes

        yield from subclass._get_sub_block_elements()

        Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

        +https://docs.slack.dev/reference/block-kit/block-elements/

  • Ancestors

    +
    +class FeedbackButtonsElement +(*,
    action_id:Β strΒ |Β NoneΒ =Β None,
    positive_button:Β dictΒ |Β FeedbackButtonObject,
    negative_button:Β dictΒ |Β FeedbackButtonObject,
    **others:Β dict)
    +
    +
    +
    + +Expand source code + +
    class FeedbackButtonsElement(InteractiveElement):
    +    type = "feedback_buttons"
    +
    +    @property
    +    def attributes(self) -> Set[str]:  # type: ignore[override]
    +        return super().attributes.union({"positive_button", "negative_button"})
    +
    +    def __init__(
    +        self,
    +        *,
    +        action_id: Optional[str] = None,
    +        positive_button: Union[dict, FeedbackButtonObject],
    +        negative_button: Union[dict, FeedbackButtonObject],
    +        **others: dict,
    +    ):
    +        """Buttons to indicate positive or negative feedback.
    +        https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element
    +
    +        Args:
    +            action_id (required): An identifier for this action.
    +                You can use this when you receive an interaction payload to identify the source of the action.
    +                Should be unique among all other action_ids in the containing block.
    +                Maximum length for this field is 255 characters.
    +            positive_button (required): A button to indicate positive feedback.
    +            negative_button (required): A button to indicate negative feedback.
    +        """
    +        super().__init__(action_id=action_id, type=self.type)
    +        show_unknown_key_warning(self, others)
    +
    +        self.positive_button = FeedbackButtonObject.parse(positive_button)
    +        self.negative_button = FeedbackButtonObject.parse(negative_button)
    +
    +

    Block Elements are things that exists inside of your Blocks. +https://docs.slack.dev/reference/block-kit/block-elements/

    +

    Buttons to indicate positive or negative feedback. +https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element

    +

    Args

    +
    +
    action_id : required
    +
    An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
    +
    positive_button : required
    +
    A button to indicate positive feedback.
    +
    negative_button : required
    +
    A button to indicate negative feedback.
    +
    +

    Ancestors

    + +

    Class variables

    +
    +
    var type
    +
    +

    The type of the None singleton.

    +
    +
    +

    Inherited members

    + +
    class FileInputElement (*,
    action_id:Β strΒ |Β NoneΒ =Β None,
    filetypes:Β List[str]Β |Β NoneΒ =Β None,
    max_files:Β intΒ |Β NoneΒ =Β None,
    **others:Β dict)
    @@ -1873,7 +1958,7 @@

    Inherited members

    **others: dict, ): """ - https://api.slack.com/reference/block-kit/block-elements#file_input + https://docs.slack.dev/reference/block-kit/block-elements/file-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1896,8 +1981,8 @@

    Inherited members

    self.max_files = max_files

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    -

    https://api.slack.com/reference/block-kit/block-elements#file_input

    +https://docs.slack.dev/reference/block-kit/block-elements/

    +

    https://docs.slack.dev/reference/block-kit/block-elements/file-input-element

    Args

    action_id : required
    @@ -1962,6 +2047,119 @@

    Inherited members

    +
    +class IconButtonElement +(*,
    action_id:Β strΒ |Β NoneΒ =Β None,
    icon:Β str,
    text:Β strΒ |Β dictΒ |Β TextObject,
    accessibility_label:Β strΒ |Β NoneΒ =Β None,
    value:Β strΒ |Β NoneΒ =Β None,
    visible_to_user_ids:Β List[str]Β |Β NoneΒ =Β None,
    confirm:Β dictΒ |Β ConfirmObjectΒ |Β NoneΒ =Β None,
    **others:Β dict)
    +
    +
    +
    + +Expand source code + +
    class IconButtonElement(InteractiveElement):
    +    type = "icon_button"
    +
    +    @property
    +    def attributes(self) -> Set[str]:  # type: ignore[override]
    +        return super().attributes.union({"icon", "text", "accessibility_label", "value", "visible_to_user_ids", "confirm"})
    +
    +    def __init__(
    +        self,
    +        *,
    +        action_id: Optional[str] = None,
    +        icon: str,
    +        text: Union[str, dict, TextObject],
    +        accessibility_label: Optional[str] = None,
    +        value: Optional[str] = None,
    +        visible_to_user_ids: Optional[List[str]] = None,
    +        confirm: Optional[Union[dict, ConfirmObject]] = None,
    +        **others: dict,
    +    ):
    +        """An icon button to perform actions.
    +        https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element
    +
    +        Args:
    +            action_id: An identifier for this action.
    +                You can use this when you receive an interaction payload to identify the source of the action.
    +                Should be unique among all other action_ids in the containing block.
    +                Maximum length for this field is 255 characters.
    +            icon (required): The icon to show (e.g., 'trash').
    +            text (required): Defines an object containing some text.
    +            accessibility_label: A label for longer descriptive text about a button element.
    +                This label will be read out by screen readers instead of the button text object.
    +                Maximum length for this field is 75 characters.
    +            value: The button value.
    +                Maximum length for this field is 2000 characters.
    +            visible_to_user_ids: User IDs for which the icon appears.
    +                Maximum length for this field is 10 user IDs.
    +            confirm: A confirm object that defines an optional confirmation dialog after the button is clicked.
    +        """
    +        super().__init__(action_id=action_id, type=self.type)
    +        show_unknown_key_warning(self, others)
    +
    +        self.icon = icon
    +        self.text = TextObject.parse(text, PlainTextObject.type)
    +        self.accessibility_label = accessibility_label
    +        self.value = value
    +        self.visible_to_user_ids = visible_to_user_ids
    +        self.confirm = ConfirmObject.parse(confirm) if confirm else None
    +
    +

    Block Elements are things that exists inside of your Blocks. +https://docs.slack.dev/reference/block-kit/block-elements/

    +

    An icon button to perform actions. +https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element

    +

    Args

    +
    +
    action_id
    +
    An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
    +
    icon : required
    +
    The icon to show (e.g., 'trash').
    +
    text : required
    +
    Defines an object containing some text.
    +
    accessibility_label
    +
    A label for longer descriptive text about a button element. +This label will be read out by screen readers instead of the button text object. +Maximum length for this field is 75 characters.
    +
    value
    +
    The button value. +Maximum length for this field is 2000 characters.
    +
    visible_to_user_ids
    +
    User IDs for which the icon appears. +Maximum length for this field is 10 user IDs.
    +
    confirm
    +
    A confirm object that defines an optional confirmation dialog after the button is clicked.
    +
    +

    Ancestors

    + +

    Class variables

    +
    +
    var type
    +
    +

    The type of the None singleton.

    +
    +
    +

    Inherited members

    + +
    class ImageElement (*,
    alt_text:Β strΒ |Β NoneΒ =Β None,
    image_url:Β strΒ |Β NoneΒ =Β None,
    slack_file:Β Dict[str,Β Any]Β |Β SlackFileΒ |Β NoneΒ =Β None,
    **others:Β dict)
    @@ -1991,7 +2189,7 @@

    Inherited members

    """An element to insert an image - this element can be used in section and context blocks only. If you want a block with only an image in it, you're looking for the image block. - https://api.slack.com/reference/block-kit/block-elements#image + https://docs.slack.dev/reference/block-kit/block-elements/image-element Args: alt_text (required): A plain-text summary of the image. This should not contain any markup. @@ -2014,11 +2212,11 @@

    Inherited members

    return len(self.alt_text) <= self.alt_text_max_length # type: ignore[arg-type]

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    An element to insert an image - this element can be used in section and context blocks only. If you want a block with only an image in it, you're looking for the image block. -https://api.slack.com/reference/block-kit/block-elements#image

    +https://docs.slack.dev/reference/block-kit/block-elements/image-element

    Args

    alt_text : required
    @@ -2130,7 +2328,7 @@

    Inherited members

    )

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    InteractiveElement that is usable in input blocks

    We generally recommend using the concrete subclasses for better supports of available properties.

    Ancestors

    @@ -2247,7 +2445,7 @@

    Inherited members

    return self.action_id is None or len(self.action_id) <= self.action_id_max_length

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    An interactive block element.

    We generally recommend using the concrete subclasses for better supports of available properties.

    Ancestors

    @@ -2259,6 +2457,8 @@

    Ancestors

    Subclasses

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var Team

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var Text

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var TextStyle
    @@ -3290,12 +3493,12 @@

    Class variables

    var User

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var UserGroup

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    @@ -3343,7 +3546,7 @@

    Class variables

    self.dispatch_action_config = dispatch_action_config

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    InteractiveElement that is usable in input blocks

    We generally recommend using the concrete subclasses for better supports of available properties.

    Ancestors

    @@ -3430,7 +3633,7 @@

    Inherited members

    self.border = border

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    Ancestors

    • RichTextElement
    • @@ -3501,7 +3704,7 @@

      Inherited members

      self.border = border

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      Ancestors

      • RichTextElement
      • @@ -3570,7 +3773,7 @@

        Inherited members

        self.elements = BlockElement.parse_all(elements)

        Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

        +https://docs.slack.dev/reference/block-kit/block-elements/

        Ancestors

        +
        +class TableBlock +(*,
        rows:Β Sequence[Sequence[Dict[str,Β Any]]],
        column_settings:Β Sequence[Dict[str,Β Any]Β |Β None]Β |Β NoneΒ =Β None,
        block_id:Β strΒ |Β NoneΒ =Β None,
        **others:Β dict)
        +
        +
        +
        + +Expand source code + +
        class TableBlock(Block):
        +    type = "table"
        +
        +    @property
        +    def attributes(self) -> Set[str]:  # type: ignore[override]
        +        return super().attributes.union({"rows", "column_settings"})
        +
        +    def __init__(
        +        self,
        +        *,
        +        rows: Sequence[Sequence[Dict[str, Any]]],
        +        column_settings: Optional[Sequence[Optional[Dict[str, Any]]]] = None,
        +        block_id: Optional[str] = None,
        +        **others: dict,
        +    ):
        +        """Displays structured information in a table.
        +        https://docs.slack.dev/reference/block-kit/blocks/table-block
        +
        +        Args:
        +            rows (required): An array consisting of table rows. Maximum 100 rows.
        +                Each row object is an array with a max of 20 table cells.
        +                Table cells can have a type of raw_text or rich_text.
        +            column_settings: An array describing column behavior. If there are fewer items in the column_settings array
        +                than there are columns in the table, then the items in the the column_settings array will describe
        +                the same number of columns in the table as there are in the array itself.
        +                Any additional columns will have the default behavior. Maximum 20 items.
        +                See below for column settings schema.
        +            block_id: A unique identifier for a block. If not specified, a block_id will be generated.
        +                You can use this block_id when you receive an interaction payload to identify the source of the action.
        +                Maximum length for this field is 255 characters.
        +                block_id should be unique for each message and each iteration of a message.
        +                If a message is updated, use a new block_id.
        +        """
        +        super().__init__(type=self.type, block_id=block_id)
        +        show_unknown_key_warning(self, others)
        +
        +        self.rows = rows
        +        self.column_settings = column_settings
        +
        +    @JsonValidator("rows attribute must be specified")
        +    def _validate_rows(self):
        +        return self.rows is not None and len(self.rows) > 0
        +
        +

        Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://docs.slack.dev/reference/block-kit/blocks

        +

        Displays structured information in a table. +https://docs.slack.dev/reference/block-kit/blocks/table-block

        +

        Args

        +
        +
        rows : required
        +
        An array consisting of table rows. Maximum 100 rows. +Each row object is an array with a max of 20 table cells. +Table cells can have a type of raw_text or rich_text.
        +
        column_settings
        +
        An array describing column behavior. If there are fewer items in the column_settings array +than there are columns in the table, then the items in the the column_settings array will describe +the same number of columns in the table as there are in the array itself. +Any additional columns will have the default behavior. Maximum 20 items. +See below for column settings schema.
        +
        block_id
        +
        A unique identifier for a block. If not specified, a block_id will be generated. +You can use this block_id when you receive an interaction payload to identify the source of the action. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
        +
        +

        Ancestors

        + +

        Class variables

        +
        +
        var type
        +
        +

        The type of the None singleton.

        +
        +
        +

        Instance variables

        +
        +
        prop attributes :Β Set[str]
        +
        +
        + +Expand source code + +
        @property
        +def attributes(self) -> Set[str]:  # type: ignore[override]
        +    return super().attributes.union({"rows", "column_settings"})
        +
        +

        Build an unordered collection of unique elements.

        +
        +
        +

        Inherited members

        + +
        class VideoBlock (*,
        block_id:Β strΒ |Β NoneΒ =Β None,
        alt_text:Β strΒ |Β NoneΒ =Β None,
        video_url:Β strΒ |Β NoneΒ =Β None,
        thumbnail_url:Β strΒ |Β NoneΒ =Β None,
        title:Β strΒ |Β dictΒ |Β PlainTextObjectΒ |Β NoneΒ =Β None,
        title_url:Β strΒ |Β NoneΒ =Β None,
        description:Β strΒ |Β dictΒ |Β PlainTextObjectΒ |Β NoneΒ =Β None,
        provider_icon_url:Β strΒ |Β NoneΒ =Β None,
        provider_name:Β strΒ |Β NoneΒ =Β None,
        author_name:Β strΒ |Β NoneΒ =Β None,
        **others:Β dict)
        @@ -1409,7 +1749,7 @@

        Inherited members

        (e.g. link unfurls, messages, modals, App Home) β€” anywhere you can put blocks! To use the video block within your app, you must have the links.embed:write scope. - https://api.slack.com/reference/block-kit/blocks#video + https://docs.slack.dev/reference/block-kit/blocks/video-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -1467,12 +1807,12 @@

        Inherited members

        Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

        +https://docs.slack.dev/reference/block-kit/blocks

        A video block is designed to embed videos in all app surfaces (e.g. link unfurls, messages, modals, App Home) β€” anywhere you can put blocks! To use the video block within your app, you must have the links.embed:write scope. -https://api.slack.com/reference/block-kit/blocks#video

        +https://docs.slack.dev/reference/block-kit/blocks/video-block

        Args

        block_id
        @@ -1604,6 +1944,14 @@

        ContextActionsBlock

        + + +
      • ContextBlock

      • Ancestors

        +
        +class FeedbackButtonObject +(*,
        text:Β strΒ |Β Dict[str,Β Any]Β |Β PlainTextObject,
        accessibility_label:Β strΒ |Β NoneΒ =Β None,
        value:Β str,
        **others:Β Dict[str,Β Any])
        +
        +
        +
        + +Expand source code + +
        class FeedbackButtonObject(JsonObject):
        +    attributes: Set[str] = set()
        +
        +    text_max_length = 75
        +    value_max_length = 2000
        +
        +    @classmethod
        +    def parse(cls, feedback_button: Union["FeedbackButtonObject", Dict[str, Any]]):
        +        if feedback_button:
        +            if isinstance(feedback_button, FeedbackButtonObject):
        +                return feedback_button
        +            elif isinstance(feedback_button, dict):
        +                return FeedbackButtonObject(**feedback_button)
        +            else:
        +                # Not yet implemented: show some warning here
        +                return None
        +        return None
        +
        +    def __init__(
        +        self,
        +        *,
        +        text: Union[str, Dict[str, Any], PlainTextObject],
        +        accessibility_label: Optional[str] = None,
        +        value: str,
        +        **others: Dict[str, Any],
        +    ):
        +        """
        +        A feedback button element object for either positive or negative feedback.
        +        https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element#button-object-fields
        +
        +        Args:
        +            text (required): An object containing some text. Maximum length for this field is 75 characters.
        +            accessibility_label: A label for longer descriptive text about a button element. This label will be read out by
        +                screen readers instead of the button `text` object.
        +            value (required): The button value. Maximum length for this field is 2000 characters.
        +        """
        +        self._text: Optional[TextObject] = PlainTextObject.parse(text, default_type=PlainTextObject.type)
        +        self._accessibility_label: Optional[str] = accessibility_label
        +        self._value: Optional[str] = value
        +        show_unknown_key_warning(self, others)
        +
        +    @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
        +    def text_length(self) -> bool:
        +        return self._text is None or len(self._text.text) <= self.text_max_length
        +
        +    @JsonValidator(f"value attribute cannot exceed {value_max_length} characters")
        +    def value_length(self) -> bool:
        +        return self._value is None or len(self._value) <= self.value_max_length
        +
        +    def to_dict(self) -> Dict[str, Any]:
        +        self.validate_json()
        +        json: Dict[str, Union[str, dict]] = {}
        +        if self._text:
        +            json["text"] = self._text.to_dict()
        +        if self._accessibility_label:
        +            json["accessibility_label"] = self._accessibility_label
        +        if self._value:
        +            json["value"] = self._value
        +        return json
        +
        +

        The base class for JSON serializable class objects

        +

        A feedback button element object for either positive or negative feedback. +https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element#button-object-fields

        +

        Args

        +
        +
        text : required
        +
        An object containing some text. Maximum length for this field is 75 characters.
        +
        accessibility_label
        +
        A label for longer descriptive text about a button element. This label will be read out by +screen readers instead of the button text object.
        +
        value : required
        +
        The button value. Maximum length for this field is 2000 characters.
        +
        +

        Ancestors

        + +

        Class variables

        +
        +
        var attributes :Β Set[str]
        +
        +

        The type of the None singleton.

        +
        +
        var text_max_length
        +
        +

        The type of the None singleton.

        +
        +
        var value_max_length
        +
        +

        The type of the None singleton.

        +
        +
        +

        Static methods

        +
        +
        +def parse(feedback_button:Β ForwardRef('FeedbackButtonObject')Β |Β Dict[str,Β Any]) +
        +
        +
        +
        +
        +

        Methods

        +
        +
        +def text_length(self) ‑>Β bool +
        +
        +
        + +Expand source code + +
        @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
        +def text_length(self) -> bool:
        +    return self._text is None or len(self._text.text) <= self.text_max_length
        +
        +
        +
        +
        +def value_length(self) ‑>Β bool +
        +
        +
        + +Expand source code + +
        @JsonValidator(f"value attribute cannot exceed {value_max_length} characters")
        +def value_length(self) -> bool:
        +    return self._value is None or len(self._value) <= self.value_max_length
        +
        +
        +
        +
        +

        Inherited members

        + +
        +
        +class FeedbackButtonsElement +(*,
        action_id:Β strΒ |Β NoneΒ =Β None,
        positive_button:Β dictΒ |Β FeedbackButtonObject,
        negative_button:Β dictΒ |Β FeedbackButtonObject,
        **others:Β dict)
        +
        +
        +
        + +Expand source code + +
        class FeedbackButtonsElement(InteractiveElement):
        +    type = "feedback_buttons"
        +
        +    @property
        +    def attributes(self) -> Set[str]:  # type: ignore[override]
        +        return super().attributes.union({"positive_button", "negative_button"})
        +
        +    def __init__(
        +        self,
        +        *,
        +        action_id: Optional[str] = None,
        +        positive_button: Union[dict, FeedbackButtonObject],
        +        negative_button: Union[dict, FeedbackButtonObject],
        +        **others: dict,
        +    ):
        +        """Buttons to indicate positive or negative feedback.
        +        https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element
        +
        +        Args:
        +            action_id (required): An identifier for this action.
        +                You can use this when you receive an interaction payload to identify the source of the action.
        +                Should be unique among all other action_ids in the containing block.
        +                Maximum length for this field is 255 characters.
        +            positive_button (required): A button to indicate positive feedback.
        +            negative_button (required): A button to indicate negative feedback.
        +        """
        +        super().__init__(action_id=action_id, type=self.type)
        +        show_unknown_key_warning(self, others)
        +
        +        self.positive_button = FeedbackButtonObject.parse(positive_button)
        +        self.negative_button = FeedbackButtonObject.parse(negative_button)
        +
        +

        Block Elements are things that exists inside of your Blocks. +https://docs.slack.dev/reference/block-kit/block-elements/

        +

        Buttons to indicate positive or negative feedback. +https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element

        +

        Args

        +
        +
        action_id : required
        +
        An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
        +
        positive_button : required
        +
        A button to indicate positive feedback.
        +
        negative_button : required
        +
        A button to indicate negative feedback.
        +
        +

        Ancestors

        + +

        Class variables

        +
        +
        var type
        +
        +

        The type of the None singleton.

        +
        +
        +

        Inherited members

        + +
        class FileBlock (*,
        external_id:Β str,
        source:Β strΒ =Β 'remote',
        block_id:Β strΒ |Β NoneΒ =Β None,
        **others:Β dict)
        @@ -2639,7 +2993,7 @@

        Inherited members

        **others: dict, ): """Displays a remote file. - https://api.slack.com/reference/block-kit/blocks#file + https://docs.slack.dev/reference/block-kit/blocks/file-block Args: external_id (required): The external unique ID for this file. @@ -2657,9 +3011,9 @@

        Inherited members

        Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

        +https://docs.slack.dev/reference/block-kit/blocks

        Displays a remote file. -https://api.slack.com/reference/block-kit/blocks#file

        +https://docs.slack.dev/reference/block-kit/blocks/file-block

        Args

        external_id : required
        @@ -2738,7 +3092,7 @@

        Inherited members

        **others: dict, ): """A header is a plain-text block that displays in a larger, bold font. - https://api.slack.com/reference/block-kit/blocks#header + https://docs.slack.dev/reference/block-kit/blocks/header-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -2763,9 +3117,9 @@

        Inherited members

        Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

        +https://docs.slack.dev/reference/block-kit/blocks

        A header is a plain-text block that displays in a larger, bold font. -https://api.slack.com/reference/block-kit/blocks#header

        +https://docs.slack.dev/reference/block-kit/blocks/header-block

        Args

        block_id
        @@ -2822,6 +3176,119 @@

        Inherited members

      +
      +class IconButtonElement +(*,
      action_id:Β strΒ |Β NoneΒ =Β None,
      icon:Β str,
      text:Β strΒ |Β dictΒ |Β TextObject,
      accessibility_label:Β strΒ |Β NoneΒ =Β None,
      value:Β strΒ |Β NoneΒ =Β None,
      visible_to_user_ids:Β List[str]Β |Β NoneΒ =Β None,
      confirm:Β dictΒ |Β ConfirmObjectΒ |Β NoneΒ =Β None,
      **others:Β dict)
      +
      +
      +
      + +Expand source code + +
      class IconButtonElement(InteractiveElement):
      +    type = "icon_button"
      +
      +    @property
      +    def attributes(self) -> Set[str]:  # type: ignore[override]
      +        return super().attributes.union({"icon", "text", "accessibility_label", "value", "visible_to_user_ids", "confirm"})
      +
      +    def __init__(
      +        self,
      +        *,
      +        action_id: Optional[str] = None,
      +        icon: str,
      +        text: Union[str, dict, TextObject],
      +        accessibility_label: Optional[str] = None,
      +        value: Optional[str] = None,
      +        visible_to_user_ids: Optional[List[str]] = None,
      +        confirm: Optional[Union[dict, ConfirmObject]] = None,
      +        **others: dict,
      +    ):
      +        """An icon button to perform actions.
      +        https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element
      +
      +        Args:
      +            action_id: An identifier for this action.
      +                You can use this when you receive an interaction payload to identify the source of the action.
      +                Should be unique among all other action_ids in the containing block.
      +                Maximum length for this field is 255 characters.
      +            icon (required): The icon to show (e.g., 'trash').
      +            text (required): Defines an object containing some text.
      +            accessibility_label: A label for longer descriptive text about a button element.
      +                This label will be read out by screen readers instead of the button text object.
      +                Maximum length for this field is 75 characters.
      +            value: The button value.
      +                Maximum length for this field is 2000 characters.
      +            visible_to_user_ids: User IDs for which the icon appears.
      +                Maximum length for this field is 10 user IDs.
      +            confirm: A confirm object that defines an optional confirmation dialog after the button is clicked.
      +        """
      +        super().__init__(action_id=action_id, type=self.type)
      +        show_unknown_key_warning(self, others)
      +
      +        self.icon = icon
      +        self.text = TextObject.parse(text, PlainTextObject.type)
      +        self.accessibility_label = accessibility_label
      +        self.value = value
      +        self.visible_to_user_ids = visible_to_user_ids
      +        self.confirm = ConfirmObject.parse(confirm) if confirm else None
      +
      +

      Block Elements are things that exists inside of your Blocks. +https://docs.slack.dev/reference/block-kit/block-elements/

      +

      An icon button to perform actions. +https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element

      +

      Args

      +
      +
      action_id
      +
      An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
      +
      icon : required
      +
      The icon to show (e.g., 'trash').
      +
      text : required
      +
      Defines an object containing some text.
      +
      accessibility_label
      +
      A label for longer descriptive text about a button element. +This label will be read out by screen readers instead of the button text object. +Maximum length for this field is 75 characters.
      +
      value
      +
      The button value. +Maximum length for this field is 2000 characters.
      +
      visible_to_user_ids
      +
      User IDs for which the icon appears. +Maximum length for this field is 10 user IDs.
      +
      confirm
      +
      A confirm object that defines an optional confirmation dialog after the button is clicked.
      +
      +

      Ancestors

      + +

      Class variables

      +
      +
      var type
      +
      +

      The type of the None singleton.

      +
      +
      +

      Inherited members

      + +
      class ImageBlock (*,
      alt_text:Β str,
      image_url:Β strΒ |Β NoneΒ =Β None,
      slack_file:Β Dict[str,Β Any]Β |Β SlackFileΒ |Β NoneΒ =Β None,
      title:Β strΒ |Β dictΒ |Β PlainTextObjectΒ |Β NoneΒ =Β None,
      block_id:Β strΒ |Β NoneΒ =Β None,
      **others:Β dict)
      @@ -2853,7 +3320,7 @@

      Inherited members

      **others: dict, ): """A simple image block, designed to make those cat photos really pop. - https://api.slack.com/reference/block-kit/blocks#image + https://docs.slack.dev/reference/block-kit/blocks/image-block Args: alt_text (required): A plain-text summary of the image. This should not contain any markup. @@ -2905,9 +3372,9 @@

      Inherited members

      Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

      +https://docs.slack.dev/reference/block-kit/blocks

      A simple image block, designed to make those cat photos really pop. -https://api.slack.com/reference/block-kit/blocks#image

      +https://docs.slack.dev/reference/block-kit/blocks/image-block

      Args

      alt_text : required
      @@ -3009,7 +3476,7 @@

      Inherited members

      """An element to insert an image - this element can be used in section and context blocks only. If you want a block with only an image in it, you're looking for the image block. - https://api.slack.com/reference/block-kit/block-elements#image + https://docs.slack.dev/reference/block-kit/block-elements/image-element Args: alt_text (required): A plain-text summary of the image. This should not contain any markup. @@ -3032,11 +3499,11 @@

      Inherited members

      return len(self.alt_text) <= self.alt_text_max_length # type: ignore[arg-type]

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      An element to insert an image - this element can be used in section and context blocks only. If you want a block with only an image in it, you're looking for the image block. -https://api.slack.com/reference/block-kit/block-elements#image

      +https://docs.slack.dev/reference/block-kit/block-elements/image-element

      Args

      alt_text : required
      @@ -3125,7 +3592,7 @@

      Inherited members

      ): """A block that collects information from users - it can hold a plain-text input element, a select menu element, a multi-select menu element, or a datepicker. - https://api.slack.com/reference/block-kit/blocks#input + https://docs.slack.dev/reference/block-kit/blocks/input-block Args: label (required): A label that appears above an input element in the form of a text object @@ -3172,10 +3639,10 @@

      Inherited members

      Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

      +https://docs.slack.dev/reference/block-kit/blocks

      A block that collects information from users - it can hold a plain-text input element, a select menu element, a multi-select menu element, or a datepicker. -https://api.slack.com/reference/block-kit/blocks#input

      +https://docs.slack.dev/reference/block-kit/blocks/input-block

      Args

      label : required
      @@ -3303,7 +3770,7 @@

      Inherited members

      )

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      InteractiveElement that is usable in input blocks

      We generally recommend using the concrete subclasses for better supports of available properties.

      Ancestors

      @@ -3420,7 +3887,7 @@

      Inherited members

      return self.action_id is None or len(self.action_id) <= self.action_id_max_length

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      An interactive block element.

      We generally recommend using the concrete subclasses for better supports of available properties.

      Ancestors

      @@ -3432,6 +3899,8 @@

      Ancestors

      Subclasses

      • ButtonElement
      • +
      • FeedbackButtonsElement
      • +
      • IconButtonElement
      • InputInteractiveElement
      • OverflowMenuElement
      • WorkflowButtonElement
      • @@ -3492,7 +3961,7 @@

        Inherited members

        """A simple button that simply opens a given URL. You will still receive an interaction payload and will need to send an acknowledgement response. This is a helper class that makes creating links simpler. - https://api.slack.com/reference/block-kit/block-elements#button + https://docs.slack.dev/reference/block-kit/block-elements/button-element/ Args: text (required): A text object that defines the button's text. @@ -3524,57 +3993,164 @@

        Inherited members

        show_unknown_key_warning(self, others)

        Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

        +https://docs.slack.dev/reference/block-kit/block-elements/

        A simple button that simply opens a given URL. You will still receive an interaction payload and will need to send an acknowledgement response. This is a helper class that makes creating links simpler. -https://api.slack.com/reference/block-kit/block-elements#button

        +https://docs.slack.dev/reference/block-kit/block-elements/button-element/

        +

        Args

        +
        +
        text : required
        +
        A text object that defines the button's text. +Can only be of type: plain_text. +Maximum length for the text in this field is 75 characters.
        +
        url : required
        +
        A URL to load in the user's browser when the button is clicked. +Maximum length for this field is 3000 characters. +If you're using url, you'll still receive an interaction payload +and will need to send an acknowledgement response.
        +
        action_id : required
        +
        An identifier for this action. +You can use this when you receive an interaction payload to identify the source of the action. +Should be unique among all other action_ids in the containing block. +Maximum length for this field is 255 characters.
        +
        style
        +
        Decorates buttons with alternative visual color schemes. Use this option with restraint. +"primary" gives buttons a green outline and text, ideal for affirmation or confirmation actions. +"primary" should only be used for one button within a set. +"danger" gives buttons a red outline and text, and should be used when the action is destructive. +Use "danger" even more sparingly than "primary". +If you don't include this field, the default button style will be used.
        +
        +

        Ancestors

        + +

        Inherited members

        + + +
        +class MarkdownBlock +(*, text:Β str, block_id:Β strΒ |Β NoneΒ =Β None, **others:Β dict) +
        +
        +
        + +Expand source code + +
        class MarkdownBlock(Block):
        +    type = "markdown"
        +    text_max_length = 12000
        +
        +    @property
        +    def attributes(self) -> Set[str]:  # type: ignore[override]
        +        return super().attributes.union({"text"})
        +
        +    def __init__(
        +        self,
        +        *,
        +        text: str,
        +        block_id: Optional[str] = None,
        +        **others: dict,
        +    ):
        +        """Displays formatted markdown.
        +        https://docs.slack.dev/reference/block-kit/blocks/markdown-block/
        +
        +        Args:
        +            block_id: A string acting as a unique identifier for a block. If not specified, one will be generated.
        +                Maximum length for this field is 255 characters.
        +                block_id should be unique for each message and each iteration of a message.
        +                If a message is updated, use a new block_id.
        +            text (required): The standard markdown-formatted text. Limit 12,000 characters max.
        +        """
        +        super().__init__(type=self.type, block_id=block_id)
        +        show_unknown_key_warning(self, others)
        +
        +        self.text = text
        +
        +    @JsonValidator("text attribute must be specified")
        +    def _validate_text(self):
        +        return self.text != ""
        +
        +    @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
        +    def _validate_alt_text_length(self):
        +        return len(self.text) <= self.text_max_length
        +
        +

        Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://docs.slack.dev/reference/block-kit/blocks

        +

        Displays formatted markdown. +https://docs.slack.dev/reference/block-kit/blocks/markdown-block/

        Args

        +
        block_id
        +
        A string acting as a unique identifier for a block. If not specified, one will be generated. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
        text : required
        -
        A text object that defines the button's text. -Can only be of type: plain_text. -Maximum length for the text in this field is 75 characters.
        -
        url : required
        -
        A URL to load in the user's browser when the button is clicked. -Maximum length for this field is 3000 characters. -If you're using url, you'll still receive an interaction payload -and will need to send an acknowledgement response.
        -
        action_id : required
        -
        An identifier for this action. -You can use this when you receive an interaction payload to identify the source of the action. -Should be unique among all other action_ids in the containing block. -Maximum length for this field is 255 characters.
        -
        style
        -
        Decorates buttons with alternative visual color schemes. Use this option with restraint. -"primary" gives buttons a green outline and text, ideal for affirmation or confirmation actions. -"primary" should only be used for one button within a set. -"danger" gives buttons a red outline and text, and should be used when the action is destructive. -Use "danger" even more sparingly than "primary". -If you don't include this field, the default button style will be used.
        +
        The standard markdown-formatted text. Limit 12,000 characters max.

        Ancestors

        +

        Class variables

        +
        +
        var text_max_length
        +
        +

        The type of the None singleton.

        +
        +
        var type
        +
        +

        The type of the None singleton.

        +
        +
        +

        Instance variables

        +
        +
        prop attributes :Β Set[str]
        +
        +
        + +Expand source code + +
        @property
        +def attributes(self) -> Set[str]:  # type: ignore[override]
        +    return super().attributes.union({"text"})
        +
        +

        Build an unordered collection of unique elements.

        +
        +

        Inherited members

        @@ -3600,7 +4176,7 @@

        Inherited members

        def __init__(self, *, text: str, verbatim: Optional[bool] = None): """A Markdown text object, meaning markdown characters will be parsed as formatting information. - https://api.slack.com/reference/block-kit/composition-objects#text + https://docs.slack.dev/reference/block-kit/composition-objects/text-object Args: text (required): The text for the block. This field accepts any of the standard text formatting markup @@ -3644,7 +4220,7 @@

        Inherited members

        mrkdwn typed text object

        A Markdown text object, meaning markdown characters will be parsed as formatting information. -https://api.slack.com/reference/block-kit/composition-objects#text

        +https://docs.slack.dev/reference/block-kit/composition-objects/text-object

        Args

        text : required
        @@ -3807,7 +4383,7 @@

        Inherited members

        **others: dict, ): """ - https://api.slack.com/reference/block-kit/block-elements#number + https://docs.slack.dev/reference/block-kit/block-elements/number-input-element/ Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -3841,8 +4417,8 @@

        Inherited members

        self.dispatch_action_config = dispatch_action_config

        Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

        -

        https://api.slack.com/reference/block-kit/block-elements#number

        +https://docs.slack.dev/reference/block-kit/block-elements/

        +

        https://docs.slack.dev/reference/block-kit/block-elements/number-input-element/

        Args

        action_id : required
        @@ -3936,7 +4512,7 @@

        Inherited members

        different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() logger = logging.getLogger(__name__) label_max_length = 75 @@ -3958,13 +4534,13 @@

        Inherited members

        (StaticDialogSelectElement) Blocks: - https://api.slack.com/reference/block-kit/composition-objects#option + https://docs.slack.dev/reference/block-kit/composition-objects/option-object Dialogs: - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements Legacy interactive attachments: - https://api.slack.com/legacy/interactive-message-field-guide#option_fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_fields Args: label: A short, user-facing string to label this option to users. @@ -4083,11 +4659,11 @@

        Inherited members

        SelectElement, OverflowMenuElement) or dialog element (StaticDialogSelectElement)

        Blocks: -https://api.slack.com/reference/block-kit/composition-objects#option

        +https://docs.slack.dev/reference/block-kit/composition-objects/option-object

        Dialogs: -https://api.slack.com/dialogs#select_elements

        +https://docs.slack.dev/legacy/legacy-dialogs/#select_elements

        Legacy interactive attachments: -https://api.slack.com/legacy/interactive-message-field-guide#option_fields

        +https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_fields

        Args

        label
        @@ -4109,7 +4685,7 @@

        Ancestors

      Class variables

      -
      var attributes
      +
      var attributes :Β Set[str]

      The type of the None singleton.

      @@ -4218,7 +4794,7 @@

      Inherited members

      different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() label_max_length = 75 options_max_length = 100 logger = logging.getLogger(__name__) @@ -4235,13 +4811,13 @@

      Inherited members

      UI) and a list of Option objects. Blocks: - https://api.slack.com/reference/block-kit/composition-objects#option-group + https://docs.slack.dev/reference/block-kit/composition-objects/option-group-object Dialogs: - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements Legacy interactive attachments: - https://api.slack.com/legacy/interactive-message-field-guide#option_groups_to_place_within_message_menu_actions + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_groups Args: label: Text to display at the top of this group of options. @@ -4303,11 +4879,11 @@

      Inherited members

      Create a group of Option objects - pass in a label (that will be part of the UI) and a list of Option objects.

      Blocks: -https://api.slack.com/reference/block-kit/composition-objects#option-group

      +https://docs.slack.dev/reference/block-kit/composition-objects/option-group-object

      Dialogs: -https://api.slack.com/dialogs#select_elements

      +https://docs.slack.dev/legacy/legacy-dialogs/#select_elements

      Legacy interactive attachments: -https://api.slack.com/legacy/interactive-message-field-guide#option_groups_to_place_within_message_menu_actions

      +https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_groups

      Args

      label
      @@ -4322,7 +4898,7 @@

      Ancestors

    Class variables

    -
    var attributes
    +
    var attributes :Β Set[str]

    The type of the None singleton.

    @@ -4396,7 +4972,7 @@

    Inherited members

    buttons. You can also specify simple URL links as overflow menu options, instead of actions. - https://api.slack.com/reference/block-kit/block-elements#overflow + https://docs.slack.dev/reference/block-kit/block-elements/overflow-menu-element Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -4419,7 +4995,7 @@

    Inherited members

    return self.options_min_length <= len(self.options) <= self.options_max_length

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    This is like a cross between a button and a select menu - when a user clicks on this overflow button, they will be presented with a list of options to choose from. Unlike the select menu, there is no typeahead field, and the @@ -4428,7 +5004,7 @@

    Inherited members

    menu, or to supply a list of less visually important actions after a row of buttons. You can also specify simple URL links as overflow menu options, instead of actions.

    -

    https://api.slack.com/reference/block-kit/block-elements#overflow

    +

    https://docs.slack.dev/reference/block-kit/block-elements/overflow-menu-element

    Args

    action_id : required
    @@ -4521,7 +5097,7 @@

    Inherited members

    where a user can enter freeform data. It can appear as a single-line field or a larger textarea using the multiline flag. Plain-text input elements can be used inside of SectionBlocks and ActionsBlocks. - https://api.slack.com/reference/block-kit/block-elements#input + https://docs.slack.dev/reference/block-kit/block-elements/plain-text-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -4557,12 +5133,12 @@

    Inherited members

    self.dispatch_action_config = dispatch_action_config

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    A plain-text input, similar to the HTML tag, creates a field where a user can enter freeform data. It can appear as a single-line field or a larger textarea using the multiline flag. Plain-text input elements can be used inside of SectionBlocks and ActionsBlocks. -https://api.slack.com/reference/block-kit/block-elements#input

    +https://docs.slack.dev/reference/block-kit/block-elements/plain-text-input-element

    Args

    action_id : required
    @@ -4664,7 +5240,7 @@

    Inherited members

    def __init__(self, *, text: str, emoji: Optional[bool] = None): """A plain text object, meaning markdown characters will not be parsed as formatting information. - https://api.slack.com/reference/block-kit/composition-objects#text + https://docs.slack.dev/reference/block-kit/composition-objects/text-object Args: text (required): The text for the block. This field accepts any of the standard text formatting markup @@ -4687,7 +5263,7 @@

    Inherited members

    plain_text typed text object

    A plain text object, meaning markdown characters will not be parsed as formatting information. -https://api.slack.com/reference/block-kit/composition-objects#text

    +https://docs.slack.dev/reference/block-kit/composition-objects/text-object

    Args

    text : required
    @@ -4796,7 +5372,7 @@

    Inherited members

    **others: dict, ): """A radio button group that allows a user to choose one item from a list of possible options. - https://api.slack.com/reference/block-kit/block-elements#radio + https://docs.slack.dev/reference/block-kit/block-elements/radio-button-group-element Args: action_id (required): An identifier for the action triggered when the radio button group is changed. @@ -4823,9 +5399,9 @@

    Inherited members

    self.initial_option = initial_option

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    A radio button group that allows a user to choose one item from a list of possible options. -https://api.slack.com/reference/block-kit/block-elements#radio

    +https://docs.slack.dev/reference/block-kit/block-elements/radio-button-group-element

    Args

    action_id : required
    @@ -4889,6 +5465,130 @@

    Inherited members

    +
    +class RawTextObject +(*, text:Β str) +
    +
    +
    + +Expand source code + +
    class RawTextObject(TextObject):
    +    """raw_text typed text object"""
    +
    +    type = "raw_text"
    +
    +    @property
    +    def attributes(self) -> Set[str]:  # type: ignore[override]
    +        return {"text", "type"}
    +
    +    def __init__(self, *, text: str):
    +        """A raw text object used in table block cells.
    +        https://docs.slack.dev/reference/block-kit/composition-objects/text-object/
    +        https://docs.slack.dev/reference/block-kit/blocks/table-block
    +
    +        Args:
    +            text (required): The text content for the table block cell.
    +        """
    +        super().__init__(text=text, type=self.type)
    +
    +    @staticmethod
    +    def from_str(text: str) -> "RawTextObject":
    +        """Transforms a string into a RawTextObject"""
    +        return RawTextObject(text=text)
    +
    +    @staticmethod
    +    def direct_from_string(text: str) -> Dict[str, Any]:
    +        """Transforms a string into the required object shape to act as a RawTextObject"""
    +        return RawTextObject.from_str(text).to_dict()
    +
    +    @JsonValidator("text attribute must have at least 1 character")
    +    def _validate_text_min_length(self):
    +        return len(self.text) >= 1
    +
    +

    raw_text typed text object

    +

    A raw text object used in table block cells. +https://docs.slack.dev/reference/block-kit/composition-objects/text-object/ +https://docs.slack.dev/reference/block-kit/blocks/table-block

    +

    Args

    +
    +
    text : required
    +
    The text content for the table block cell.
    +
    +

    Ancestors

    + +

    Class variables

    +
    +
    var type
    +
    +

    The type of the None singleton.

    +
    +
    +

    Static methods

    +
    +
    +def direct_from_string(text:Β str) ‑>Β Dict[str,Β Any] +
    +
    +
    + +Expand source code + +
    @staticmethod
    +def direct_from_string(text: str) -> Dict[str, Any]:
    +    """Transforms a string into the required object shape to act as a RawTextObject"""
    +    return RawTextObject.from_str(text).to_dict()
    +
    +

    Transforms a string into the required object shape to act as a RawTextObject

    +
    +
    +def from_str(text:Β str) ‑>Β RawTextObject +
    +
    +
    + +Expand source code + +
    @staticmethod
    +def from_str(text: str) -> "RawTextObject":
    +    """Transforms a string into a RawTextObject"""
    +    return RawTextObject(text=text)
    +
    +

    Transforms a string into a RawTextObject

    +
    +
    +

    Instance variables

    +
    +
    prop attributes :Β Set[str]
    +
    +
    + +Expand source code + +
    @property
    +def attributes(self) -> Set[str]:  # type: ignore[override]
    +    return {"text", "type"}
    +
    +

    Build an unordered collection of unique elements.

    +
    +
    +

    Inherited members

    + +
    class RichTextBlock (*,
    elements:Β Sequence[dictΒ |Β RichTextElement],
    block_id:Β strΒ |Β NoneΒ =Β None,
    **others:Β dict)
    @@ -4913,7 +5613,7 @@

    Inherited members

    **others: dict, ): """A block that is used to hold interactive elements. - https://api.slack.com/reference/block-kit/blocks#rich_text + https://docs.slack.dev/reference/block-kit/blocks/rich-text-block Args: elements (required): An array of rich text objects - @@ -4930,9 +5630,9 @@

    Inherited members

    Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

    +https://docs.slack.dev/reference/block-kit/blocks

    A block that is used to hold interactive elements. -https://api.slack.com/reference/block-kit/blocks#rich_text

    +https://docs.slack.dev/reference/block-kit/blocks/rich-text-block

    Args

    elements : required
    @@ -4998,7 +5698,7 @@

    Inherited members

    pass

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    Ancestors

    • BlockElement
    • @@ -5052,11 +5752,13 @@

      Inherited members

      italic: Optional[bool] = None, strike: Optional[bool] = None, code: Optional[bool] = None, + underline: Optional[bool] = None, ): self.bold = bold self.italic = italic self.strike = strike self.code = code + self.underline = underline def to_dict(self, *args) -> dict: result = { @@ -5064,6 +5766,7 @@

      Inherited members

      "italic": self.italic, "strike": self.strike, "code": self.code, + "underline": self.underline, } return {k: v for k, v in result.items() if v is not None} @@ -5269,42 +5972,42 @@

      Class variables

      var Broadcast

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

    var Channel

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var Color

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var Date

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var Emoji

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var Team

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var Text

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var TextStyle
    @@ -5313,12 +6016,12 @@

    Class variables

    var User

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    var UserGroup

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    @@ -5366,7 +6069,7 @@

    Class variables

    self.dispatch_action_config = dispatch_action_config

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    InteractiveElement that is usable in input blocks

    We generally recommend using the concrete subclasses for better supports of available properties.

    Ancestors

    @@ -5453,7 +6156,7 @@

    Inherited members

    self.border = border

    Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

    +https://docs.slack.dev/reference/block-kit/block-elements/

    Ancestors

    • RichTextElement
    • @@ -5524,7 +6227,7 @@

      Inherited members

      self.border = border

      Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

      +https://docs.slack.dev/reference/block-kit/block-elements/

      Ancestors

      • RichTextElement
      • @@ -5593,7 +6296,7 @@

        Inherited members

        self.elements = BlockElement.parse_all(elements)

        Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

        +https://docs.slack.dev/reference/block-kit/block-elements/

        Ancestors

        • RichTextElement
        • @@ -5662,7 +6365,7 @@

          Inherited members

          self.elements = BlockElement.parse_all(elements)

          Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

          +https://docs.slack.dev/reference/block-kit/block-elements/

          Ancestors

          +
          +class TableBlock +(*,
          rows:Β Sequence[Sequence[Dict[str,Β Any]]],
          column_settings:Β Sequence[Dict[str,Β Any]Β |Β None]Β |Β NoneΒ =Β None,
          block_id:Β strΒ |Β NoneΒ =Β None,
          **others:Β dict)
          +
          +
          +
          + +Expand source code + +
          class TableBlock(Block):
          +    type = "table"
          +
          +    @property
          +    def attributes(self) -> Set[str]:  # type: ignore[override]
          +        return super().attributes.union({"rows", "column_settings"})
          +
          +    def __init__(
          +        self,
          +        *,
          +        rows: Sequence[Sequence[Dict[str, Any]]],
          +        column_settings: Optional[Sequence[Optional[Dict[str, Any]]]] = None,
          +        block_id: Optional[str] = None,
          +        **others: dict,
          +    ):
          +        """Displays structured information in a table.
          +        https://docs.slack.dev/reference/block-kit/blocks/table-block
          +
          +        Args:
          +            rows (required): An array consisting of table rows. Maximum 100 rows.
          +                Each row object is an array with a max of 20 table cells.
          +                Table cells can have a type of raw_text or rich_text.
          +            column_settings: An array describing column behavior. If there are fewer items in the column_settings array
          +                than there are columns in the table, then the items in the the column_settings array will describe
          +                the same number of columns in the table as there are in the array itself.
          +                Any additional columns will have the default behavior. Maximum 20 items.
          +                See below for column settings schema.
          +            block_id: A unique identifier for a block. If not specified, a block_id will be generated.
          +                You can use this block_id when you receive an interaction payload to identify the source of the action.
          +                Maximum length for this field is 255 characters.
          +                block_id should be unique for each message and each iteration of a message.
          +                If a message is updated, use a new block_id.
          +        """
          +        super().__init__(type=self.type, block_id=block_id)
          +        show_unknown_key_warning(self, others)
          +
          +        self.rows = rows
          +        self.column_settings = column_settings
          +
          +    @JsonValidator("rows attribute must be specified")
          +    def _validate_rows(self):
          +        return self.rows is not None and len(self.rows) > 0
          +
          +

          Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://docs.slack.dev/reference/block-kit/blocks

          +

          Displays structured information in a table. +https://docs.slack.dev/reference/block-kit/blocks/table-block

          +

          Args

          +
          +
          rows : required
          +
          An array consisting of table rows. Maximum 100 rows. +Each row object is an array with a max of 20 table cells. +Table cells can have a type of raw_text or rich_text.
          +
          column_settings
          +
          An array describing column behavior. If there are fewer items in the column_settings array +than there are columns in the table, then the items in the the column_settings array will describe +the same number of columns in the table as there are in the array itself. +Any additional columns will have the default behavior. Maximum 20 items. +See below for column settings schema.
          +
          block_id
          +
          A unique identifier for a block. If not specified, a block_id will be generated. +You can use this block_id when you receive an interaction payload to identify the source of the action. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
          +
          +

          Ancestors

          + +

          Class variables

          +
          +
          var type
          +
          +

          The type of the None singleton.

          +
          +
          +

          Instance variables

          +
          +
          prop attributes :Β Set[str]
          +
          +
          + +Expand source code + +
          @property
          +def attributes(self) -> Set[str]:  # type: ignore[override]
          +    return super().attributes.union({"rows", "column_settings"})
          +
          +

          Build an unordered collection of unique elements.

          +
          +
          +

          Inherited members

          + +
          class TextObject (text:Β str,
          type:Β strΒ |Β NoneΒ =Β None,
          subtype:Β strΒ |Β NoneΒ =Β None,
          emoji:Β boolΒ |Β NoneΒ =Β None,
          **kwargs)
          @@ -6454,6 +7274,7 @@

          Subclasses

          Class variables

          @@ -6533,7 +7354,7 @@

          Inherited members

          On desktop clients, this time picker will take the form of a dropdown list with free-text entry for precise choices. On mobile clients, the time picker will use native time picker UIs. - https://api.slack.com/reference/block-kit/block-elements#timepicker + https://docs.slack.dev/reference/block-kit/block-elements/time-picker-element Args: action_id (required): An identifier for the action triggered when a time is selected. @@ -6568,12 +7389,12 @@

          Inherited members

          return self.initial_time is None or re.match(r"([0-1][0-9]|2[0-3]):([0-5][0-9])", self.initial_time) is not None

          Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

          +https://docs.slack.dev/reference/block-kit/block-elements/

          An element which allows selection of a time of day. On desktop clients, this time picker will take the form of a dropdown list with free-text entry for precise choices. On mobile clients, the time picker will use native time picker UIs. -https://api.slack.com/reference/block-kit/block-elements#timepicker

          +https://docs.slack.dev/reference/block-kit/block-elements/time-picker-element

          Args

          action_id : required
          @@ -6675,7 +7496,7 @@

          Inherited members

          """ A URL input element, similar to the Plain-text input element, creates a single line field where a user can enter URL-encoded data. - https://api.slack.com/reference/block-kit/block-elements#url + https://docs.slack.dev/reference/block-kit/block-elements/url-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -6702,10 +7523,10 @@

          Inherited members

          self.dispatch_action_config = dispatch_action_config

          Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

          +https://docs.slack.dev/reference/block-kit/block-elements/

          A URL input element, similar to the Plain-text input element, creates a single line field where a user can enter URL-encoded data. -https://api.slack.com/reference/block-kit/block-elements#url

          +https://docs.slack.dev/reference/block-kit/block-elements/url-input-element

          Args

          action_id : required
          @@ -6804,7 +7625,7 @@

          Inherited members

          """ This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#users_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#users_multi_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -6834,10 +7655,10 @@

          Inherited members

          self.max_selected_items = max_selected_items

          Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

          +https://docs.slack.dev/reference/block-kit/block-elements/

          This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. -https://api.slack.com/reference/block-kit/block-elements#users_multi_select

          +https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#users_multi_select

          Args

          action_id : required
          @@ -6933,7 +7754,7 @@

          Inherited members

          """ This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#users_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#users_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -6960,10 +7781,10 @@

          Inherited members

          self.initial_user = initial_user

          Block Elements are things that exists inside of your Blocks. -https://api.slack.com/reference/block-kit/block-elements

          +https://docs.slack.dev/reference/block-kit/block-elements/

          This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. -https://api.slack.com/reference/block-kit/block-elements#users_select

          +https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#users_select

          Args

          placeholder : required
          @@ -7076,7 +7897,7 @@

          Inherited members

          (e.g. link unfurls, messages, modals, App Home) β€” anywhere you can put blocks! To use the video block within your app, you must have the links.embed:write scope. - https://api.slack.com/reference/block-kit/blocks#video + https://docs.slack.dev/reference/block-kit/blocks/video-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -7134,12 +7955,12 @@

          Inherited members

          Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. -https://api.slack.com/reference/block-kit/blocks

          +https://docs.slack.dev/reference/block-kit/blocks

          A video block is designed to embed videos in all app surfaces (e.g. link unfurls, messages, modals, App Home) β€” anywhere you can put blocks! To use the video block within your app, you must have the links.embed:write scope. -https://api.slack.com/reference/block-kit/blocks#video

          +https://docs.slack.dev/reference/block-kit/blocks/video-block

          Args

          block_id
          @@ -7333,6 +8154,14 @@

          ContextActionsBlock

          + + +
        • ContextBlock

          • attributes
          • @@ -7404,6 +8233,23 @@

            FeedbackButtonObject

            + + +
          • +

            FeedbackButtonsElement

            + +
          • +
          • FileBlock

            • attributes
            • @@ -7419,6 +8265,12 @@

              IconButtonElement

              + + +
            • ImageBlock

              • alt_text_max_length
              • @@ -7465,6 +8317,14 @@

                LinkButtonElement

              • +

                MarkdownBlock

                + +
              • +
              • MarkdownTextObject

                • attributes
                • @@ -7536,6 +8396,15 @@

                  RawTextObject

                  + + +
                • RichTextBlock

                  • attributes
                  • @@ -7633,6 +8502,13 @@

                    TableBlock

                    + + +
                  • TextObject

                    • attributes
                    • @@ -7684,7 +8560,7 @@

                      -

                      Generated by pdoc 0.11.5.

                      +

                      Generated by pdoc 0.11.6.

                      diff --git a/docs/static/api-docs/slack_sdk/models/dialoags.html b/docs/reference/models/dialoags.html similarity index 96% rename from docs/static/api-docs/slack_sdk/models/dialoags.html rename to docs/reference/models/dialoags.html index 59d997edb..cc2ff46a2 100644 --- a/docs/static/api-docs/slack_sdk/models/dialoags.html +++ b/docs/reference/models/dialoags.html @@ -3,7 +3,7 @@ - + slack_sdk.models.dialoags API documentation @@ -247,7 +247,7 @@

                      Inherited members

                      Expand source code
                      class DialogBuilder(JsonObject):
                      -    attributes = {}  # type: ignore[assignment] # no attributes because to_dict has unique implementation
                      +    attributes: Set[str] = set()
                       
                           _callback_id: Optional[str]
                           _elements: List[Union[DialogTextComponent, AbstractDialogSelector]]
                      @@ -348,7 +348,7 @@ 

                      Inherited members

                      """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -403,7 +403,7 @@

                      Inherited members

                      character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -456,7 +456,7 @@

                      Inherited members

                      A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -499,7 +499,7 @@

                      Inherited members

                      A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -542,7 +542,7 @@

                      Inherited members

                      assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -577,7 +577,7 @@

                      Inherited members

                      You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -613,7 +613,7 @@

                      Inherited members

                      private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -687,7 +687,7 @@

                      Ancestors

                    Class variables

                    -
                    var attributes
                    +
                    var attributes :Β Set[str]

                    The type of the None singleton.

                    @@ -772,7 +772,7 @@

                    Args

                    You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -796,7 +796,7 @@

                    Args

                    You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

                    Args

                    name
                    @@ -835,7 +835,7 @@

                    Args

                    private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -860,7 +860,7 @@

                    Args

                    You can also provide a select menu with a list of conversations - including private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

                    Args

                    name
                    @@ -917,7 +917,7 @@

                    Args

                    A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -950,7 +950,7 @@

                    Args

                    a dropdown menu.

                    A list of options can be loaded from an external URL and used in your dialog menus.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_external

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external

                    Args

                    name
                    @@ -1074,7 +1074,7 @@

                    Args

                    A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1104,7 +1104,7 @@

                    Args

                    a dropdown menu.

                    A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects

                    -

                    https://api.slack.com/dialogs#attributes_select_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements

                    Args

                    name
                    @@ -1209,7 +1209,7 @@

                    Args

                    character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1249,7 +1249,7 @@

                    Args

                    relatively long answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000.

                    -

                    https://api.slack.com/dialogs#attributes_textarea_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements

                    Args

                    name
                    @@ -1303,7 +1303,7 @@

                    Args

                    """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1339,7 +1339,7 @@

                    Args

                    return self

                    Text elements are single-line plain text fields.

                    -

                    https://api.slack.com/dialogs#attributes_text_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements

                    Args

                    name
                    @@ -1445,7 +1445,7 @@

                    Args

                    assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -1471,7 +1471,7 @@

                    Args

                    when you are creating a bug tracking app, you want to include a field for an assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_users

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users

                    Args

                    name
                    @@ -1525,7 +1525,7 @@

                    Inherited members

                    You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -1547,7 +1547,7 @@

                    Inherited members

                    The base class for JSON serializable class objects

                    You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

                    Args

                    name
                    @@ -1618,7 +1618,7 @@

                    Inherited members

                    private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -1641,7 +1641,7 @@

                    Inherited members

                    You can also provide a select menu with a list of conversations - including private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

                    Args

                    name
                    @@ -1720,7 +1720,7 @@

                    Inherited members

                    A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -1750,7 +1750,7 @@

                    Inherited members

                    a dropdown menu.

                    A list of options can be loaded from an external URL and used in your dialog menus.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_external

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external

                    Args

                    name
                    @@ -1829,7 +1829,7 @@

                    Inherited members

                    single item from a list. True to web roots, this selection is displayed as a dropdown menu. - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements """ data_source = "static" @@ -1854,7 +1854,7 @@

                    Inherited members

                    A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1891,13 +1891,13 @@

                    Inherited members

                    Use the select element for multiple choice selections allowing users to pick a single item from a list. True to web roots, this selection is displayed as a dropdown menu.

                    -

                    https://api.slack.com/dialogs#select_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#select_elements

                    Use the select element for multiple choice selections allowing users to pick a single item from a list. True to web roots, this selection is displayed as a dropdown menu.

                    A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects

                    -

                    https://api.slack.com/dialogs#attributes_select_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements

                    Args

                    name
                    @@ -1982,7 +1982,7 @@

                    Inherited members

                    answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements """ type = "textarea" @@ -1992,7 +1992,7 @@

                    Inherited members

                    these on the world wide web. Use this element if you want a relatively long answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000.

                    -

                    https://api.slack.com/dialogs#textarea_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements

                    Ancestors

                    Ancestors

                    • DialogTextComponent
                    • @@ -2443,7 +2443,7 @@

                      Inherited members

                      assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -2467,7 +2467,7 @@

                      Inherited members

                      when you are creating a bug tracking app, you want to include a field for an assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope.

                      -

                      https://api.slack.com/dialogs#dynamic_select_elements_users

                      +

                      https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users

                      Args

                      name
                      @@ -2647,7 +2647,7 @@

                      -

                      Generated by pdoc 0.11.5.

                      +

                      Generated by pdoc 0.11.6.

                      diff --git a/docs/static/api-docs/slack_sdk/models/dialogs/index.html b/docs/reference/models/dialogs/index.html similarity index 96% rename from docs/static/api-docs/slack_sdk/models/dialogs/index.html rename to docs/reference/models/dialogs/index.html index 3f014bf2f..e0c6fe457 100644 --- a/docs/static/api-docs/slack_sdk/models/dialogs/index.html +++ b/docs/reference/models/dialogs/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.dialogs API documentation @@ -247,7 +247,7 @@

                      Inherited members

                      Expand source code
                      class DialogBuilder(JsonObject):
                      -    attributes = {}  # type: ignore[assignment] # no attributes because to_dict has unique implementation
                      +    attributes: Set[str] = set()
                       
                           _callback_id: Optional[str]
                           _elements: List[Union[DialogTextComponent, AbstractDialogSelector]]
                      @@ -348,7 +348,7 @@ 

                      Inherited members

                      """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -403,7 +403,7 @@

                      Inherited members

                      character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -456,7 +456,7 @@

                      Inherited members

                      A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -499,7 +499,7 @@

                      Inherited members

                      A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -542,7 +542,7 @@

                      Inherited members

                      assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -577,7 +577,7 @@

                      Inherited members

                      You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -613,7 +613,7 @@

                      Inherited members

                      private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -687,7 +687,7 @@

                      Ancestors

                    Class variables

                    -
                    var attributes
                    +
                    var attributes :Β Set[str]

                    The type of the None singleton.

                    @@ -772,7 +772,7 @@

                    Args

                    You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -796,7 +796,7 @@

                    Args

                    You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

                    Args

                    name
                    @@ -835,7 +835,7 @@

                    Args

                    private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -860,7 +860,7 @@

                    Args

                    You can also provide a select menu with a list of conversations - including private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

                    Args

                    name
                    @@ -917,7 +917,7 @@

                    Args

                    A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -950,7 +950,7 @@

                    Args

                    a dropdown menu.

                    A list of options can be loaded from an external URL and used in your dialog menus.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_external

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external

                    Args

                    name
                    @@ -1074,7 +1074,7 @@

                    Args

                    A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1104,7 +1104,7 @@

                    Args

                    a dropdown menu.

                    A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects

                    -

                    https://api.slack.com/dialogs#attributes_select_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements

                    Args

                    name
                    @@ -1209,7 +1209,7 @@

                    Args

                    character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1249,7 +1249,7 @@

                    Args

                    relatively long answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000.

                    -

                    https://api.slack.com/dialogs#attributes_textarea_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements

                    Args

                    name
                    @@ -1303,7 +1303,7 @@

                    Args

                    """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1339,7 +1339,7 @@

                    Args

                    return self

                    Text elements are single-line plain text fields.

                    -

                    https://api.slack.com/dialogs#attributes_text_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements

                    Args

                    name
                    @@ -1445,7 +1445,7 @@

                    Args

                    assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -1471,7 +1471,7 @@

                    Args

                    when you are creating a bug tracking app, you want to include a field for an assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_users

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users

                    Args

                    name
                    @@ -1525,7 +1525,7 @@

                    Inherited members

                    You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -1547,7 +1547,7 @@

                    Inherited members

                    The base class for JSON serializable class objects

                    You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

                    Args

                    name
                    @@ -1618,7 +1618,7 @@

                    Inherited members

                    private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -1641,7 +1641,7 @@

                    Inherited members

                    You can also provide a select menu with a list of conversations - including private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations

                    Args

                    name
                    @@ -1720,7 +1720,7 @@

                    Inherited members

                    A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -1750,7 +1750,7 @@

                    Inherited members

                    a dropdown menu.

                    A list of options can be loaded from an external URL and used in your dialog menus.

                    -

                    https://api.slack.com/dialogs#dynamic_select_elements_external

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external

                    Args

                    name
                    @@ -1829,7 +1829,7 @@

                    Inherited members

                    single item from a list. True to web roots, this selection is displayed as a dropdown menu. - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements """ data_source = "static" @@ -1854,7 +1854,7 @@

                    Inherited members

                    A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -1891,13 +1891,13 @@

                    Inherited members

                    Use the select element for multiple choice selections allowing users to pick a single item from a list. True to web roots, this selection is displayed as a dropdown menu.

                    -

                    https://api.slack.com/dialogs#select_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#select_elements

                    Use the select element for multiple choice selections allowing users to pick a single item from a list. True to web roots, this selection is displayed as a dropdown menu.

                    A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects

                    -

                    https://api.slack.com/dialogs#attributes_select_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements

                    Args

                    name
                    @@ -1982,7 +1982,7 @@

                    Inherited members

                    answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements """ type = "textarea" @@ -1992,7 +1992,7 @@

                    Inherited members

                    these on the world wide web. Use this element if you want a relatively long answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000.

                    -

                    https://api.slack.com/dialogs#textarea_elements

                    +

                    https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements

                    Ancestors

                    Ancestors

                    @@ -535,7 +590,7 @@

                    -

                    Generated by pdoc 0.11.5.

                    +

                    Generated by pdoc 0.11.6.

                    diff --git a/docs/static/api-docs/slack_sdk/models/messages/index.html b/docs/reference/models/messages/index.html similarity index 91% rename from docs/static/api-docs/slack_sdk/models/messages/index.html rename to docs/reference/models/messages/index.html index ae53391a3..5d10ced1c 100644 --- a/docs/static/api-docs/slack_sdk/models/messages/index.html +++ b/docs/reference/models/messages/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.messages API documentation @@ -64,13 +64,13 @@

                    Classes

                    class ChannelLink(Link):
                         def __init__(self):
                             """Represents an @channel link, which notifies everyone present in this channel.
                    -        https://api.slack.com/reference/surfaces/formatting
                    +        https://docs.slack.dev/messaging/formatting-message-text/
                             """
                             super().__init__(url="!channel", text="channel")

                    The base class for all model objects in this module

                    Represents an @channel link, which notifies everyone present in this channel. -https://api.slack.com/reference/surfaces/formatting

                    +https://docs.slack.dev/messaging/formatting-message-text/

                    Ancestors

                    • Link
                    • @@ -96,7 +96,7 @@

                      Ancestors

                      link: Optional[str] = None, ): """Text containing a date or time should display that date in the local timezone of the person seeing the text. - https://api.slack.com/reference/surfaces/formatting#date-formatting + https://docs.slack.dev/messaging/formatting-message-text/#date-formatting """ if isinstance(date, datetime): epoch = int(date.timestamp()) @@ -110,7 +110,7 @@

                      Ancestors

                      The base class for all model objects in this module

                      Text containing a date or time should display that date in the local timezone of the person seeing the text. -https://api.slack.com/reference/surfaces/formatting#date-formatting

                      +https://docs.slack.dev/messaging/formatting-message-text/#date-formatting

                    Ancestors

                    • Link
                    • @@ -128,13 +128,13 @@

                      Ancestors

                      class EveryoneLink(Link):
                           def __init__(self):
                               """Represents an @everyone link, which notifies all users of this workspace.
                      -        https://api.slack.com/reference/surfaces/formatting
                      +        https://docs.slack.dev/messaging/formatting-message-text/
                               """
                               super().__init__(url="!everyone", text="everyone")

                      The base class for all model objects in this module

                      Represents an @everyone link, which notifies all users of this workspace. -https://api.slack.com/reference/surfaces/formatting

                      +https://docs.slack.dev/messaging/formatting-message-text/

                    Ancestors

                    Ancestors

        • Ancestors

          Ancestors

          • Link
          • @@ -294,7 +294,7 @@

            -

            Generated by pdoc 0.11.5.

            +

            Generated by pdoc 0.11.6.

            diff --git a/docs/static/api-docs/slack_sdk/models/messages/message.html b/docs/reference/models/messages/message.html similarity index 97% rename from docs/static/api-docs/slack_sdk/models/messages/message.html rename to docs/reference/models/messages/message.html index 23f11b11e..6a7e7a85a 100644 --- a/docs/static/api-docs/slack_sdk/models/messages/message.html +++ b/docs/reference/models/messages/message.html @@ -3,7 +3,7 @@ - + slack_sdk.models.messages.message API documentation @@ -71,7 +71,7 @@

            Classes

            """ Create a message. - https://api.slack.com/messaging/composing#message-structure + https://docs.slack.dev/messaging/#message-structure Args: text: Plain or Slack Markdown-like text to display in the message. @@ -114,7 +114,7 @@

            Classes

            The base class for JSON serializable class objects

            Create a message.

            -

            https://api.slack.com/messaging/composing#message-structure

            +

            https://docs.slack.dev/messaging/#message-structure

            Args

            text
            @@ -204,7 +204,7 @@

            -

            Generated by pdoc 0.11.5.

            +

            Generated by pdoc 0.11.6.

            diff --git a/docs/reference/models/metadata/index.html b/docs/reference/models/metadata/index.html new file mode 100644 index 000000000..1c4d7a69c --- /dev/null +++ b/docs/reference/models/metadata/index.html @@ -0,0 +1,2680 @@ + + + + + + +slack_sdk.models.metadata API documentation + + + + + + + + + + + +
            +
            +
            +

            Module slack_sdk.models.metadata

            +
            +
            +
            +
            +
            +
            +

            Global variables

            +
            +
            var EntityType
            +
            +

            Custom field types

            +
            +
            +
            +
            +
            +
            +

            Classes

            +
            +
            +class ContentItemEntityFields +(preview:Β Dict[str,Β Any]Β |Β EntityImageFieldΒ |Β NoneΒ =Β None,
            description:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            created_by:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            date_created:Β Dict[str,Β Any]Β |Β EntityTimestampFieldΒ |Β NoneΒ =Β None,
            date_updated:Β Dict[str,Β Any]Β |Β EntityTimestampFieldΒ |Β NoneΒ =Β None,
            last_modified_by:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class ContentItemEntityFields(JsonObject):
            +    """Fields specific to content item entities"""
            +
            +    attributes = {
            +        "preview",
            +        "description",
            +        "created_by",
            +        "date_created",
            +        "date_updated",
            +        "last_modified_by",
            +    }
            +
            +    def __init__(
            +        self,
            +        preview: Optional[Union[Dict[str, Any], EntityImageField]] = None,
            +        description: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
            +        date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
            +        last_modified_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        **kwargs,
            +    ):
            +        self.preview = preview
            +        self.description = description
            +        self.created_by = created_by
            +        self.date_created = date_created
            +        self.date_updated = date_updated
            +        self.last_modified_by = last_modified_by
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Fields specific to content item entities

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityActionButton +(text:Β str,
            action_id:Β str,
            value:Β strΒ |Β NoneΒ =Β None,
            style:Β strΒ |Β NoneΒ =Β None,
            url:Β strΒ |Β NoneΒ =Β None,
            accessibility_label:Β strΒ |Β NoneΒ =Β None,
            processing_state:Β Dict[str,Β Any]Β |Β EntityActionProcessingStateΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityActionButton(JsonObject):
            +    """Action button for entity"""
            +
            +    attributes = {
            +        "text",
            +        "action_id",
            +        "value",
            +        "style",
            +        "url",
            +        "accessibility_label",
            +        "processing_state",
            +    }
            +
            +    def __init__(
            +        self,
            +        text: str,
            +        action_id: str,
            +        value: Optional[str] = None,
            +        style: Optional[str] = None,
            +        url: Optional[str] = None,
            +        accessibility_label: Optional[str] = None,
            +        processing_state: Optional[Union[Dict[str, Any], EntityActionProcessingState]] = None,
            +        **kwargs,
            +    ):
            +        self.text = text
            +        self.action_id = action_id
            +        self.value = value
            +        self.style = style
            +        self.url = url
            +        self.accessibility_label = accessibility_label
            +        self.processing_state = processing_state
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Action button for entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityActionProcessingState +(enabled:Β bool, interstitial_text:Β strΒ |Β NoneΒ =Β None, **kwargs) +
            +
            +
            + +Expand source code + +
            class EntityActionProcessingState(JsonObject):
            +    """Processing state configuration for entity action button"""
            +
            +    attributes = {
            +        "enabled",
            +        "interstitial_text",
            +    }
            +
            +    def __init__(
            +        self,
            +        enabled: bool,
            +        interstitial_text: Optional[str] = None,
            +        **kwargs,
            +    ):
            +        self.enabled = enabled
            +        self.interstitial_text = interstitial_text
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Processing state configuration for entity action button

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityActions +(primary_actions:Β List[Dict[str,Β Any]Β |Β EntityActionButton]Β |Β NoneΒ =Β None,
            overflow_actions:Β List[Dict[str,Β Any]Β |Β EntityActionButton]Β |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityActions(JsonObject):
            +    """Actions configuration for entity"""
            +
            +    attributes = {
            +        "primary_actions",
            +        "overflow_actions",
            +    }
            +
            +    def __init__(
            +        self,
            +        primary_actions: Optional[List[Union[Dict[str, Any], EntityActionButton]]] = None,
            +        overflow_actions: Optional[List[Union[Dict[str, Any], EntityActionButton]]] = None,
            +        **kwargs,
            +    ):
            +        self.primary_actions = primary_actions
            +        self.overflow_actions = overflow_actions
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Actions configuration for entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityArrayItemField +(type:Β strΒ |Β NoneΒ =Β None,
            label:Β strΒ |Β NoneΒ =Β None,
            value:Β strΒ |Β intΒ |Β NoneΒ =Β None,
            link:Β strΒ |Β NoneΒ =Β None,
            icon:Β Dict[str,Β Any]Β |Β EntityIconFieldΒ |Β NoneΒ =Β None,
            long:Β boolΒ |Β NoneΒ =Β None,
            format:Β strΒ |Β NoneΒ =Β None,
            image_url:Β strΒ |Β NoneΒ =Β None,
            slack_file:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
            alt_text:Β strΒ |Β NoneΒ =Β None,
            edit:Β Dict[str,Β Any]Β |Β EntityEditSupportΒ |Β NoneΒ =Β None,
            tag_color:Β strΒ |Β NoneΒ =Β None,
            user:Β Dict[str,Β Any]Β |Β EntityUserIDFieldΒ |Β EntityUserFieldΒ |Β NoneΒ =Β None,
            entity_ref:Β Dict[str,Β Any]Β |Β EntityRefFieldΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityArrayItemField(JsonObject):
            +    """Array item field for entity (similar to EntityTypedField but with optional type)"""
            +
            +    attributes = {
            +        "type",
            +        "label",
            +        "value",
            +        "link",
            +        "icon",
            +        "long",
            +        "format",
            +        "image_url",
            +        "slack_file",
            +        "alt_text",
            +        "edit",
            +        "tag_color",
            +        "user",
            +        "entity_ref",
            +    }
            +
            +    def __init__(
            +        self,
            +        type: Optional[str] = None,
            +        label: Optional[str] = None,
            +        value: Optional[Union[str, int]] = None,
            +        link: Optional[str] = None,
            +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
            +        long: Optional[bool] = None,
            +        format: Optional[str] = None,
            +        image_url: Optional[str] = None,
            +        slack_file: Optional[Dict[str, Any]] = None,
            +        alt_text: Optional[str] = None,
            +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
            +        tag_color: Optional[str] = None,
            +        user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None,
            +        entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None,
            +        **kwargs,
            +    ):
            +        self.type = type
            +        self.label = label
            +        self.value = value
            +        self.link = link
            +        self.icon = icon
            +        self.long = long
            +        self.format = format
            +        self.image_url = image_url
            +        self.slack_file = slack_file
            +        self.alt_text = alt_text
            +        self.edit = edit
            +        self.tag_color = tag_color
            +        self.user = user
            +        self.entity_ref = entity_ref
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Array item field for entity (similar to EntityTypedField but with optional type)

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityAttributes +(title:Β Dict[str,Β Any]Β |Β EntityTitle,
            display_type:Β strΒ |Β NoneΒ =Β None,
            display_id:Β strΒ |Β NoneΒ =Β None,
            product_icon:Β Dict[str,Β Any]Β |Β EntityIconFieldΒ |Β NoneΒ =Β None,
            product_name:Β strΒ |Β NoneΒ =Β None,
            locale:Β strΒ |Β NoneΒ =Β None,
            full_size_preview:Β Dict[str,Β Any]Β |Β EntityFullSizePreviewΒ |Β NoneΒ =Β None,
            metadata_last_modified:Β intΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityAttributes(JsonObject):
            +    """Attributes for an entity"""
            +
            +    attributes = {
            +        "title",
            +        "display_type",
            +        "display_id",
            +        "product_icon",
            +        "product_name",
            +        "locale",
            +        "full_size_preview",
            +        "metadata_last_modified",
            +    }
            +
            +    def __init__(
            +        self,
            +        title: Union[Dict[str, Any], EntityTitle],
            +        display_type: Optional[str] = None,
            +        display_id: Optional[str] = None,
            +        product_icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
            +        product_name: Optional[str] = None,
            +        locale: Optional[str] = None,
            +        full_size_preview: Optional[Union[Dict[str, Any], EntityFullSizePreview]] = None,
            +        metadata_last_modified: Optional[int] = None,
            +        **kwargs,
            +    ):
            +        self.title = title
            +        self.display_type = display_type
            +        self.display_id = display_id
            +        self.product_icon = product_icon
            +        self.product_name = product_name
            +        self.locale = locale
            +        self.full_size_preview = full_size_preview
            +        self.metadata_last_modified = metadata_last_modified
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Attributes for an entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityBooleanCheckboxField +(type:Β str, text:Β str, description:Β strΒ |Β None, **kwargs) +
            +
            +
            + +Expand source code + +
            class EntityBooleanCheckboxField(JsonObject):
            +    """Boolean checkbox properties"""
            +
            +    attributes = {"type", "text", "description"}
            +
            +    def __init__(
            +        self,
            +        type: str,
            +        text: str,
            +        description: Optional[str],
            +        **kwargs,
            +    ):
            +        self.type = type
            +        self.text = text
            +        self.description = description
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Boolean checkbox properties

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityBooleanTextField +(type:Β str,
            true_text:Β str,
            false_text:Β str,
            true_description:Β strΒ |Β None,
            false_description:Β strΒ |Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityBooleanTextField(JsonObject):
            +    """Boolean text properties"""
            +
            +    attributes = {"type", "true_text", "false_text", "true_description", "false_description"}
            +
            +    def __init__(
            +        self,
            +        type: str,
            +        true_text: str,
            +        false_text: str,
            +        true_description: Optional[str],
            +        false_description: Optional[str],
            +        **kwargs,
            +    ):
            +        self.type = type
            +        self.true_text = (true_text,)
            +        self.false_text = (false_text,)
            +        self.true_description = (true_description,)
            +        self.false_description = (false_description,)
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Boolean text properties

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityCustomField +(label:Β str,
            key:Β str,
            type:Β str,
            value:Β strΒ |Β intΒ |Β List[Dict[str,Β Any]Β |Β EntityArrayItemField]Β |Β NoneΒ =Β None,
            link:Β strΒ |Β NoneΒ =Β None,
            icon:Β Dict[str,Β Any]Β |Β EntityIconFieldΒ |Β NoneΒ =Β None,
            long:Β boolΒ |Β NoneΒ =Β None,
            format:Β strΒ |Β NoneΒ =Β None,
            image_url:Β strΒ |Β NoneΒ =Β None,
            slack_file:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
            alt_text:Β strΒ |Β NoneΒ =Β None,
            tag_color:Β strΒ |Β NoneΒ =Β None,
            edit:Β Dict[str,Β Any]Β |Β EntityEditSupportΒ |Β NoneΒ =Β None,
            item_type:Β strΒ |Β NoneΒ =Β None,
            user:Β Dict[str,Β Any]Β |Β EntityUserIDFieldΒ |Β EntityUserFieldΒ |Β NoneΒ =Β None,
            entity_ref:Β Dict[str,Β Any]Β |Β EntityRefFieldΒ |Β NoneΒ =Β None,
            boolean:Β Dict[str,Β Any]Β |Β EntityBooleanCheckboxFieldΒ |Β EntityBooleanTextFieldΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityCustomField(JsonObject):
            +    """Custom field for entity with flexible types"""
            +
            +    attributes = {
            +        "label",
            +        "key",
            +        "type",
            +        "value",
            +        "link",
            +        "icon",
            +        "long",
            +        "format",
            +        "image_url",
            +        "slack_file",
            +        "alt_text",
            +        "tag_color",
            +        "edit",
            +        "item_type",
            +        "user",
            +        "entity_ref",
            +        "boolean",
            +    }
            +
            +    def __init__(
            +        self,
            +        label: str,
            +        key: str,
            +        type: str,
            +        value: Optional[Union[str, int, List[Union[Dict[str, Any], EntityArrayItemField]]]] = None,
            +        link: Optional[str] = None,
            +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
            +        long: Optional[bool] = None,
            +        format: Optional[str] = None,
            +        image_url: Optional[str] = None,
            +        slack_file: Optional[Dict[str, Any]] = None,
            +        alt_text: Optional[str] = None,
            +        tag_color: Optional[str] = None,
            +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
            +        item_type: Optional[str] = None,
            +        user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None,
            +        entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None,
            +        boolean: Optional[Union[Dict[str, Any], EntityBooleanCheckboxField, EntityBooleanTextField]] = None,
            +        **kwargs,
            +    ):
            +        self.label = label
            +        self.key = key
            +        self.type = type
            +        self.value = value
            +        self.link = link
            +        self.icon = icon
            +        self.long = long
            +        self.format = format
            +        self.image_url = image_url
            +        self.slack_file = slack_file
            +        self.alt_text = alt_text
            +        self.tag_color = tag_color
            +        self.edit = edit
            +        self.item_type = item_type
            +        self.user = user
            +        self.entity_ref = entity_ref
            +        self.boolean = boolean
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +    @EnumValidator("type", CustomFieldType)
            +    def type_valid(self):
            +        return self.type is None or self.type in CustomFieldType
            +
            +

            Custom field for entity with flexible types

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Methods

            +
            +
            +def type_valid(self) +
            +
            +
            + +Expand source code + +
            @EnumValidator("type", CustomFieldType)
            +def type_valid(self):
            +    return self.type is None or self.type in CustomFieldType
            +
            +
            +
            +
            +

            Inherited members

            + +
            +
            +class EntityEditNumberConfig +(is_decimal_allowed:Β boolΒ |Β NoneΒ =Β None,
            min_value:Β intΒ |Β floatΒ |Β NoneΒ =Β None,
            max_value:Β intΒ |Β floatΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityEditNumberConfig(JsonObject):
            +    """Number configuration for entity edit support"""
            +
            +    attributes = {
            +        "is_decimal_allowed",
            +        "min_value",
            +        "max_value",
            +    }
            +
            +    def __init__(
            +        self,
            +        is_decimal_allowed: Optional[bool] = None,
            +        min_value: Optional[Union[int, float]] = None,
            +        max_value: Optional[Union[int, float]] = None,
            +        **kwargs,
            +    ):
            +        self.is_decimal_allowed = is_decimal_allowed
            +        self.min_value = min_value
            +        self.max_value = max_value
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Number configuration for entity edit support

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityEditSelectConfig +(current_value:Β strΒ |Β NoneΒ =Β None,
            current_values:Β List[str]Β |Β NoneΒ =Β None,
            static_options:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
            fetch_options_dynamically:Β boolΒ |Β NoneΒ =Β None,
            min_query_length:Β intΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityEditSelectConfig(JsonObject):
            +    """Select configuration for entity edit support"""
            +
            +    attributes = {
            +        "current_value",
            +        "current_values",
            +        "static_options",
            +        "fetch_options_dynamically",
            +        "min_query_length",
            +    }
            +
            +    def __init__(
            +        self,
            +        current_value: Optional[str] = None,
            +        current_values: Optional[List[str]] = None,
            +        static_options: Optional[List[Dict[str, Any]]] = None,  # Option[]
            +        fetch_options_dynamically: Optional[bool] = None,
            +        min_query_length: Optional[int] = None,
            +        **kwargs,
            +    ):
            +        self.current_value = current_value
            +        self.current_values = current_values
            +        self.static_options = static_options
            +        self.fetch_options_dynamically = fetch_options_dynamically
            +        self.min_query_length = min_query_length
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Select configuration for entity edit support

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityEditSupport +(enabled:Β bool,
            placeholder:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
            hint:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
            optional:Β boolΒ |Β NoneΒ =Β None,
            select:Β Dict[str,Β Any]Β |Β EntityEditSelectConfigΒ |Β NoneΒ =Β None,
            number:Β Dict[str,Β Any]Β |Β EntityEditNumberConfigΒ |Β NoneΒ =Β None,
            text:Β Dict[str,Β Any]Β |Β EntityEditTextConfigΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityEditSupport(JsonObject):
            +    """Edit support configuration for entity fields"""
            +
            +    attributes = {
            +        "enabled",
            +        "placeholder",
            +        "hint",
            +        "optional",
            +        "select",
            +        "number",
            +        "text",
            +    }
            +
            +    def __init__(
            +        self,
            +        enabled: bool,
            +        placeholder: Optional[Dict[str, Any]] = None,  # PlainTextElement
            +        hint: Optional[Dict[str, Any]] = None,  # PlainTextElement
            +        optional: Optional[bool] = None,
            +        select: Optional[Union[Dict[str, Any], EntityEditSelectConfig]] = None,
            +        number: Optional[Union[Dict[str, Any], EntityEditNumberConfig]] = None,
            +        text: Optional[Union[Dict[str, Any], EntityEditTextConfig]] = None,
            +        **kwargs,
            +    ):
            +        self.enabled = enabled
            +        self.placeholder = placeholder
            +        self.hint = hint
            +        self.optional = optional
            +        self.select = select
            +        self.number = number
            +        self.text = text
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Edit support configuration for entity fields

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityEditTextConfig +(min_length:Β intΒ |Β NoneΒ =Β None, max_length:Β intΒ |Β NoneΒ =Β None, **kwargs) +
            +
            +
            + +Expand source code + +
            class EntityEditTextConfig(JsonObject):
            +    """Text configuration for entity edit support"""
            +
            +    attributes = {
            +        "min_length",
            +        "max_length",
            +    }
            +
            +    def __init__(
            +        self,
            +        min_length: Optional[int] = None,
            +        max_length: Optional[int] = None,
            +        **kwargs,
            +    ):
            +        self.min_length = min_length
            +        self.max_length = max_length
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Text configuration for entity edit support

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityFullSizePreview +(is_supported:Β bool,
            preview_url:Β strΒ |Β NoneΒ =Β None,
            mime_type:Β strΒ |Β NoneΒ =Β None,
            error:Β Dict[str,Β Any]Β |Β EntityFullSizePreviewErrorΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityFullSizePreview(JsonObject):
            +    """Full-size preview configuration for entity"""
            +
            +    attributes = {
            +        "is_supported",
            +        "preview_url",
            +        "mime_type",
            +        "error",
            +    }
            +
            +    def __init__(
            +        self,
            +        is_supported: bool,
            +        preview_url: Optional[str] = None,
            +        mime_type: Optional[str] = None,
            +        error: Optional[Union[Dict[str, Any], EntityFullSizePreviewError]] = None,
            +        **kwargs,
            +    ):
            +        self.is_supported = is_supported
            +        self.preview_url = preview_url
            +        self.mime_type = mime_type
            +        self.error = error
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Full-size preview configuration for entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityFullSizePreviewError +(code:Β str, message:Β strΒ |Β NoneΒ =Β None, **kwargs) +
            +
            +
            + +Expand source code + +
            class EntityFullSizePreviewError(JsonObject):
            +    """Error information for full-size preview"""
            +
            +    attributes = {
            +        "code",
            +        "message",
            +    }
            +
            +    def __init__(
            +        self,
            +        code: str,
            +        message: Optional[str] = None,
            +        **kwargs,
            +    ):
            +        self.code = code
            +        self.message = message
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Error information for full-size preview

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityIconField +(alt_text:Β str,
            url:Β strΒ |Β NoneΒ =Β None,
            slack_file:Β Dict[str,Β Any]Β |Β EntityIconSlackFileΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityIconField(JsonObject):
            +    """Icon field for entity attributes"""
            +
            +    attributes = {
            +        "alt_text",
            +        "url",
            +        "slack_file",
            +    }
            +
            +    def __init__(
            +        self,
            +        alt_text: str,
            +        url: Optional[str] = None,
            +        slack_file: Optional[Union[Dict[str, Any], EntityIconSlackFile]] = None,
            +        **kwargs,
            +    ):
            +        self.alt_text = alt_text
            +        self.url = url
            +        self.slack_file = slack_file
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Icon field for entity attributes

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityIconSlackFile +(id:Β strΒ |Β NoneΒ =Β None, url:Β strΒ |Β NoneΒ =Β None, **kwargs) +
            +
            +
            + +Expand source code + +
            class EntityIconSlackFile(JsonObject):
            +    """Slack file reference for entity icon"""
            +
            +    attributes = {
            +        "id",
            +        "url",
            +    }
            +
            +    def __init__(
            +        self,
            +        id: Optional[str] = None,
            +        url: Optional[str] = None,
            +        **kwargs,
            +    ):
            +        self.id = id
            +        self.url = url
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Slack file reference for entity icon

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityImageField +(alt_text:Β str,
            label:Β strΒ |Β NoneΒ =Β None,
            image_url:Β strΒ |Β NoneΒ =Β None,
            slack_file:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
            title:Β strΒ |Β NoneΒ =Β None,
            type:Β strΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityImageField(JsonObject):
            +    """Image field for entity"""
            +
            +    attributes = {
            +        "alt_text",
            +        "label",
            +        "image_url",
            +        "slack_file",
            +        "title",
            +        "type",
            +    }
            +
            +    def __init__(
            +        self,
            +        alt_text: str,
            +        label: Optional[str] = None,
            +        image_url: Optional[str] = None,
            +        slack_file: Optional[Dict[str, Any]] = None,
            +        title: Optional[str] = None,
            +        type: Optional[str] = None,
            +        **kwargs,
            +    ):
            +        self.alt_text = alt_text
            +        self.label = label
            +        self.image_url = image_url
            +        self.slack_file = slack_file
            +        self.title = title
            +        self.type = type
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Image field for entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityMetadata +(entity_type:Β str,
            entity_payload:Β Dict[str,Β Any]Β |Β EntityPayload,
            external_ref:Β Dict[str,Β Any]Β |Β ExternalRef,
            url:Β str,
            app_unfurl_url:Β strΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityMetadata(JsonObject):
            +    """Work object entity metadata
            +
            +    https://docs.slack.dev/messaging/work-objects/
            +    """
            +
            +    attributes = {
            +        "entity_type",
            +        "entity_payload",
            +        "external_ref",
            +        "url",
            +        "app_unfurl_url",
            +    }
            +
            +    def __init__(
            +        self,
            +        entity_type: str,
            +        entity_payload: Union[Dict[str, Any], EntityPayload],
            +        external_ref: Union[Dict[str, Any], ExternalRef],
            +        url: str,
            +        app_unfurl_url: Optional[str] = None,
            +        **kwargs,
            +    ):
            +        self.entity_type = entity_type
            +        self.entity_payload = entity_payload
            +        self.external_ref = external_ref
            +        self.url = url
            +        self.app_unfurl_url = app_unfurl_url
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +    @EnumValidator("entity_type", EntityType)
            +    def entity_type_valid(self):
            +        return self.entity_type is None or self.entity_type in EntityType
            +
            + +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Methods

            +
            +
            +def entity_type_valid(self) +
            +
            +
            + +Expand source code + +
            @EnumValidator("entity_type", EntityType)
            +def entity_type_valid(self):
            +    return self.entity_type is None or self.entity_type in EntityType
            +
            +
            +
            +
            +

            Inherited members

            + +
            +
            +class EntityPayload +(attributes:Β Dict[str,Β Any]Β |Β EntityAttributes,
            fields:Β Dict[str,Β Any]Β |Β ContentItemEntityFieldsΒ |Β FileEntityFieldsΒ |Β IncidentEntityFieldsΒ |Β TaskEntityFieldsΒ |Β NoneΒ =Β None,
            custom_fields:Β List[Dict[str,Β Any]Β |Β EntityCustomField]Β |Β NoneΒ =Β None,
            slack_file:Β Dict[str,Β Any]Β |Β FileEntitySlackFileΒ |Β NoneΒ =Β None,
            display_order:Β List[str]Β |Β NoneΒ =Β None,
            actions:Β Dict[str,Β Any]Β |Β EntityActionsΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityPayload(JsonObject):
            +    """Payload schema for an entity"""
            +
            +    attributes = {
            +        "attributes",
            +        "fields",
            +        "custom_fields",
            +        "slack_file",
            +        "display_order",
            +        "actions",
            +    }
            +
            +    def __init__(
            +        self,
            +        attributes: Union[Dict[str, Any], EntityAttributes],
            +        fields: Optional[
            +            Union[Dict[str, Any], ContentItemEntityFields, FileEntityFields, IncidentEntityFields, TaskEntityFields]
            +        ] = None,
            +        custom_fields: Optional[List[Union[Dict[str, Any], EntityCustomField]]] = None,
            +        slack_file: Optional[Union[Dict[str, Any], FileEntitySlackFile]] = None,
            +        display_order: Optional[List[str]] = None,
            +        actions: Optional[Union[Dict[str, Any], EntityActions]] = None,
            +        **kwargs,
            +    ):
            +        # Store entity attributes data with a different internal name to avoid
            +        # shadowing the class-level 'attributes' set used for JSON serialization
            +        self._entity_attributes = attributes
            +        self.fields = fields
            +        self.custom_fields = custom_fields
            +        self.slack_file = slack_file
            +        self.display_order = display_order
            +        self.actions = actions
            +        self.additional_attributes = kwargs
            +
            +    @property
            +    def entity_attributes(self) -> Union[Dict[str, Any], EntityAttributes]:
            +        """Get the entity attributes data.
            +
            +        Note: Use this property to access the attributes data. The class-level
            +        'attributes' is reserved for the JSON serialization schema.
            +        """
            +        return self._entity_attributes
            +
            +    @entity_attributes.setter
            +    def entity_attributes(self, value: Union[Dict[str, Any], EntityAttributes]):
            +        """Set the entity attributes data."""
            +        self._entity_attributes = value
            +
            +    def get_object_attribute(self, key: str):
            +        if key == "attributes":
            +            return self._entity_attributes
            +        else:
            +            return getattr(self, key, None)
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Payload schema for an entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Instance variables

            +
            +
            prop entity_attributes :Β Dict[str,Β Any]Β |Β EntityAttributes
            +
            +
            + +Expand source code + +
            @property
            +def entity_attributes(self) -> Union[Dict[str, Any], EntityAttributes]:
            +    """Get the entity attributes data.
            +
            +    Note: Use this property to access the attributes data. The class-level
            +    'attributes' is reserved for the JSON serialization schema.
            +    """
            +    return self._entity_attributes
            +
            +

            Get the entity attributes data.

            +

            Note: Use this property to access the attributes data. The class-level +'attributes' is reserved for the JSON serialization schema.

            +
            +
            +

            Methods

            +
            +
            +def get_object_attribute(self, key:Β str) +
            +
            +
            + +Expand source code + +
            def get_object_attribute(self, key: str):
            +    if key == "attributes":
            +        return self._entity_attributes
            +    else:
            +        return getattr(self, key, None)
            +
            +
            +
            +
            +

            Inherited members

            + +
            +
            +class EntityRefField +(entity_url:Β str,
            external_ref:Β Dict[str,Β Any]Β |Β ExternalRef,
            title:Β str,
            display_type:Β strΒ |Β NoneΒ =Β None,
            icon:Β Dict[str,Β Any]Β |Β EntityIconFieldΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityRefField(JsonObject):
            +    """Entity reference field"""
            +
            +    attributes = {
            +        "entity_url",
            +        "external_ref",
            +        "title",
            +        "display_type",
            +        "icon",
            +    }
            +
            +    def __init__(
            +        self,
            +        entity_url: str,
            +        external_ref: Union[Dict[str, Any], ExternalRef],
            +        title: str,
            +        display_type: Optional[str] = None,
            +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
            +        **kwargs,
            +    ):
            +        self.entity_url = entity_url
            +        self.external_ref = external_ref
            +        self.title = title
            +        self.display_type = display_type
            +        self.icon = icon
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Entity reference field

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityStringField +(value:Β str,
            label:Β strΒ |Β NoneΒ =Β None,
            format:Β strΒ |Β NoneΒ =Β None,
            link:Β strΒ |Β NoneΒ =Β None,
            icon:Β Dict[str,Β Any]Β |Β EntityIconFieldΒ |Β NoneΒ =Β None,
            long:Β boolΒ |Β NoneΒ =Β None,
            type:Β strΒ |Β NoneΒ =Β None,
            tag_color:Β strΒ |Β NoneΒ =Β None,
            edit:Β Dict[str,Β Any]Β |Β EntityEditSupportΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityStringField(JsonObject):
            +    """String field for entity"""
            +
            +    attributes = {
            +        "value",
            +        "label",
            +        "format",
            +        "link",
            +        "icon",
            +        "long",
            +        "type",
            +        "tag_color",
            +        "edit",
            +    }
            +
            +    def __init__(
            +        self,
            +        value: str,
            +        label: Optional[str] = None,
            +        format: Optional[str] = None,
            +        link: Optional[str] = None,
            +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
            +        long: Optional[bool] = None,
            +        type: Optional[str] = None,
            +        tag_color: Optional[str] = None,
            +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
            +        **kwargs,
            +    ):
            +        self.value = value
            +        self.label = label
            +        self.format = format
            +        self.link = link
            +        self.icon = icon
            +        self.long = long
            +        self.type = type
            +        self.tag_color = tag_color
            +        self.edit = edit
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            String field for entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityTimestampField +(value:Β int,
            label:Β strΒ |Β NoneΒ =Β None,
            type:Β strΒ |Β NoneΒ =Β None,
            edit:Β Dict[str,Β Any]Β |Β EntityEditSupportΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityTimestampField(JsonObject):
            +    """Timestamp field for entity"""
            +
            +    attributes = {
            +        "value",
            +        "label",
            +        "type",
            +        "edit",
            +    }
            +
            +    def __init__(
            +        self,
            +        value: int,
            +        label: Optional[str] = None,
            +        type: Optional[str] = None,
            +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
            +        **kwargs,
            +    ):
            +        self.value = value
            +        self.label = label
            +        self.type = type
            +        self.edit = edit
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Timestamp field for entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityTitle +(text:Β str,
            edit:Β Dict[str,Β Any]Β |Β EntityEditSupportΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityTitle(JsonObject):
            +    """Title for entity attributes"""
            +
            +    attributes = {
            +        "text",
            +        "edit",
            +    }
            +
            +    def __init__(
            +        self,
            +        text: str,
            +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
            +        **kwargs,
            +    ):
            +        self.text = text
            +        self.edit = edit
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Title for entity attributes

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityTypedField +(type:Β str,
            label:Β strΒ |Β NoneΒ =Β None,
            value:Β strΒ |Β intΒ |Β NoneΒ =Β None,
            link:Β strΒ |Β NoneΒ =Β None,
            icon:Β Dict[str,Β Any]Β |Β EntityIconFieldΒ |Β NoneΒ =Β None,
            long:Β boolΒ |Β NoneΒ =Β None,
            format:Β strΒ |Β NoneΒ =Β None,
            image_url:Β strΒ |Β NoneΒ =Β None,
            slack_file:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
            alt_text:Β strΒ |Β NoneΒ =Β None,
            edit:Β Dict[str,Β Any]Β |Β EntityEditSupportΒ |Β NoneΒ =Β None,
            tag_color:Β strΒ |Β NoneΒ =Β None,
            user:Β Dict[str,Β Any]Β |Β EntityUserIDFieldΒ |Β EntityUserFieldΒ |Β NoneΒ =Β None,
            entity_ref:Β Dict[str,Β Any]Β |Β EntityRefFieldΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityTypedField(JsonObject):
            +    """Typed field for entity with various display options"""
            +
            +    attributes = {
            +        "type",
            +        "label",
            +        "value",
            +        "link",
            +        "icon",
            +        "long",
            +        "format",
            +        "image_url",
            +        "slack_file",
            +        "alt_text",
            +        "edit",
            +        "tag_color",
            +        "user",
            +        "entity_ref",
            +    }
            +
            +    def __init__(
            +        self,
            +        type: str,
            +        label: Optional[str] = None,
            +        value: Optional[Union[str, int]] = None,
            +        link: Optional[str] = None,
            +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
            +        long: Optional[bool] = None,
            +        format: Optional[str] = None,
            +        image_url: Optional[str] = None,
            +        slack_file: Optional[Dict[str, Any]] = None,
            +        alt_text: Optional[str] = None,
            +        edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None,
            +        tag_color: Optional[str] = None,
            +        user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None,
            +        entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None,
            +        **kwargs,
            +    ):
            +        self.type = type
            +        self.label = label
            +        self.value = value
            +        self.link = link
            +        self.icon = icon
            +        self.long = long
            +        self.format = format
            +        self.image_url = image_url
            +        self.slack_file = slack_file
            +        self.alt_text = alt_text
            +        self.edit = edit
            +        self.tag_color = tag_color
            +        self.user = user
            +        self.entity_ref = entity_ref
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Typed field for entity with various display options

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityUserField +(text:Β str,
            url:Β strΒ |Β NoneΒ =Β None,
            email:Β strΒ |Β NoneΒ =Β None,
            icon:Β Dict[str,Β Any]Β |Β EntityIconFieldΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EntityUserField(JsonObject):
            +    """User field for entity"""
            +
            +    attributes = {
            +        "text",
            +        "url",
            +        "email",
            +        "icon",
            +    }
            +
            +    def __init__(
            +        self,
            +        text: str,
            +        url: Optional[str] = None,
            +        email: Optional[str] = None,
            +        icon: Optional[Union[Dict[str, Any], EntityIconField]] = None,
            +        **kwargs,
            +    ):
            +        self.text = text
            +        self.url = url
            +        self.email = email
            +        self.icon = icon
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            User field for entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EntityUserIDField +(user_id:Β str, **kwargs) +
            +
            +
            + +Expand source code + +
            class EntityUserIDField(JsonObject):
            +    """User ID field for entity"""
            +
            +    attributes = {
            +        "user_id",
            +    }
            +
            +    def __init__(
            +        self,
            +        user_id: str,
            +        **kwargs,
            +    ):
            +        self.user_id = user_id
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            User ID field for entity

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class EventAndEntityMetadata +(event_type:Β strΒ |Β NoneΒ =Β None,
            event_payload:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
            entities:Β List[Dict[str,Β Any]Β |Β EntityMetadata]Β |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class EventAndEntityMetadata(JsonObject):
            +    """Message metadata with entities
            +
            +    https://docs.slack.dev/messaging/message-metadata/
            +    https://docs.slack.dev/messaging/work-objects/
            +    """
            +
            +    attributes = {"event_type", "event_payload", "entities"}
            +
            +    def __init__(
            +        self,
            +        event_type: Optional[str] = None,
            +        event_payload: Optional[Dict[str, Any]] = None,
            +        entities: Optional[List[Union[Dict[str, Any], EntityMetadata]]] = None,
            +        **kwargs,
            +    ):
            +        self.event_type = event_type
            +        self.event_payload = event_payload
            +        self.entities = entities
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            + +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class ExternalRef +(id:Β str, type:Β strΒ |Β NoneΒ =Β None, **kwargs) +
            +
            +
            + +Expand source code + +
            class ExternalRef(JsonObject):
            +    """Reference (and optional type) used to identify an entity within the developer's system"""
            +
            +    attributes = {
            +        "id",
            +        "type",
            +    }
            +
            +    def __init__(
            +        self,
            +        id: str,
            +        type: Optional[str] = None,
            +        **kwargs,
            +    ):
            +        self.id = id
            +        self.type = type
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Reference (and optional type) used to identify an entity within the developer's system

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class FileEntityFields +(preview:Β Dict[str,Β Any]Β |Β EntityImageFieldΒ |Β NoneΒ =Β None,
            created_by:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            date_created:Β Dict[str,Β Any]Β |Β EntityTimestampFieldΒ |Β NoneΒ =Β None,
            date_updated:Β Dict[str,Β Any]Β |Β EntityTimestampFieldΒ |Β NoneΒ =Β None,
            last_modified_by:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            file_size:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            mime_type:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            full_size_preview:Β Dict[str,Β Any]Β |Β EntityFullSizePreviewΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class FileEntityFields(JsonObject):
            +    """Fields specific to file entities"""
            +
            +    attributes = {
            +        "preview",
            +        "created_by",
            +        "date_created",
            +        "date_updated",
            +        "last_modified_by",
            +        "file_size",
            +        "mime_type",
            +        "full_size_preview",
            +    }
            +
            +    def __init__(
            +        self,
            +        preview: Optional[Union[Dict[str, Any], EntityImageField]] = None,
            +        created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
            +        date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
            +        last_modified_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        file_size: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        mime_type: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        full_size_preview: Optional[Union[Dict[str, Any], EntityFullSizePreview]] = None,
            +        **kwargs,
            +    ):
            +        self.preview = preview
            +        self.created_by = created_by
            +        self.date_created = date_created
            +        self.date_updated = date_updated
            +        self.last_modified_by = last_modified_by
            +        self.file_size = file_size
            +        self.mime_type = mime_type
            +        self.full_size_preview = full_size_preview
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Fields specific to file entities

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class FileEntitySlackFile +(id:Β str, type:Β strΒ |Β NoneΒ =Β None, **kwargs) +
            +
            +
            + +Expand source code + +
            class FileEntitySlackFile(JsonObject):
            +    """Slack file reference for file entities"""
            +
            +    attributes = {
            +        "id",
            +        "type",
            +    }
            +
            +    def __init__(
            +        self,
            +        id: str,
            +        type: Optional[str] = None,
            +        **kwargs,
            +    ):
            +        self.id = id
            +        self.type = type
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Slack file reference for file entities

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class IncidentEntityFields +(status:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            priority:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            urgency:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            created_by:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            assigned_to:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            date_created:Β Dict[str,Β Any]Β |Β EntityTimestampFieldΒ |Β NoneΒ =Β None,
            date_updated:Β Dict[str,Β Any]Β |Β EntityTimestampFieldΒ |Β NoneΒ =Β None,
            description:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            service:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class IncidentEntityFields(JsonObject):
            +    """Fields specific to incident entities"""
            +
            +    attributes = {
            +        "status",
            +        "priority",
            +        "urgency",
            +        "created_by",
            +        "assigned_to",
            +        "date_created",
            +        "date_updated",
            +        "description",
            +        "service",
            +    }
            +
            +    def __init__(
            +        self,
            +        status: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        priority: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        urgency: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        assigned_to: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
            +        date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
            +        description: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        service: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        **kwargs,
            +    ):
            +        self.status = status
            +        self.priority = priority
            +        self.urgency = urgency
            +        self.created_by = created_by
            +        self.assigned_to = assigned_to
            +        self.date_created = date_created
            +        self.date_updated = date_updated
            +        self.description = description
            +        self.service = service
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Fields specific to incident entities

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class Metadata +(event_type:Β str, event_payload:Β Dict[str,Β Any], **kwargs) +
            +
            +
            + +Expand source code + +
            class Metadata(JsonObject):
            +    """Message metadata
            +
            +    https://docs.slack.dev/messaging/message-metadata/
            +    """
            +
            +    attributes = {
            +        "event_type",
            +        "event_payload",
            +    }
            +
            +    def __init__(
            +        self,
            +        event_type: str,
            +        event_payload: Dict[str, Any],
            +        **kwargs,
            +    ):
            +        self.event_type = event_type
            +        self.event_payload = event_payload
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            + +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +class TaskEntityFields +(description:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            created_by:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            date_created:Β Dict[str,Β Any]Β |Β EntityTimestampFieldΒ |Β NoneΒ =Β None,
            date_updated:Β Dict[str,Β Any]Β |Β EntityTimestampFieldΒ |Β NoneΒ =Β None,
            assignee:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            status:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            due_date:Β Dict[str,Β Any]Β |Β EntityTypedFieldΒ |Β NoneΒ =Β None,
            priority:Β Dict[str,Β Any]Β |Β EntityStringFieldΒ |Β NoneΒ =Β None,
            **kwargs)
            +
            +
            +
            + +Expand source code + +
            class TaskEntityFields(JsonObject):
            +    """Fields specific to task entities"""
            +
            +    attributes = {
            +        "description",
            +        "created_by",
            +        "date_created",
            +        "date_updated",
            +        "assignee",
            +        "status",
            +        "due_date",
            +        "priority",
            +    }
            +
            +    def __init__(
            +        self,
            +        description: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
            +        date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None,
            +        assignee: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        status: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        due_date: Optional[Union[Dict[str, Any], EntityTypedField]] = None,
            +        priority: Optional[Union[Dict[str, Any], EntityStringField]] = None,
            +        **kwargs,
            +    ):
            +        self.description = description
            +        self.created_by = created_by
            +        self.date_created = date_created
            +        self.date_updated = date_updated
            +        self.assignee = assignee
            +        self.status = status
            +        self.due_date = due_date
            +        self.priority = priority
            +        self.additional_attributes = kwargs
            +
            +    def __str__(self):
            +        return str(self.get_non_null_attributes())
            +
            +    def __repr__(self):
            +        return self.__str__()
            +
            +

            Fields specific to task entities

            +

            Ancestors

            + +

            Class variables

            +
            +
            var attributes
            +
            +

            The type of the None singleton.

            +
            +
            +

            Inherited members

            + +
            +
            +
            +
            + +
            + + + diff --git a/docs/static/api-docs/slack_sdk/models/views/index.html b/docs/reference/models/views/index.html similarity index 98% rename from docs/static/api-docs/slack_sdk/models/views/index.html rename to docs/reference/models/views/index.html index 80dd55f85..d9e60359b 100644 --- a/docs/static/api-docs/slack_sdk/models/views/index.html +++ b/docs/reference/models/views/index.html @@ -3,7 +3,7 @@ - + slack_sdk.models.views API documentation @@ -58,7 +58,7 @@

            Classes

            class View(JsonObject):
                 """View object for modals and Home tabs.
             
            -    https://api.slack.com/reference/surfaces/views
            +    https://docs.slack.dev/reference/views/
                 """
             
                 types = ["modal", "home", "workflow_step"]
            @@ -175,7 +175,7 @@ 

            Classes

            return self.__str__()

            View object for modals and Home tabs.

            -

            https://api.slack.com/reference/surfaces/views

            +

            https://docs.slack.dev/reference/views/

            Ancestors

            • JsonObject
            • @@ -448,7 +448,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html b/docs/reference/oauth/authorize_url_generator/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html rename to docs/reference/oauth/authorize_url_generator/index.html index 06c784b4c..97e893156 100644 --- a/docs/static/api-docs/slack_sdk/oauth/authorize_url_generator/index.html +++ b/docs/reference/oauth/authorize_url_generator/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.authorize_url_generator API documentation @@ -223,7 +223,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/index.html b/docs/reference/oauth/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/index.html rename to docs/reference/oauth/index.html index a41f8f254..8fe69e5d0 100644 --- a/docs/static/api-docs/slack_sdk/oauth/index.html +++ b/docs/reference/oauth/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth API documentation @@ -37,7 +37,7 @@

              Module slack_sdk.oauth

              Modules for implementing the Slack OAuth flow

              -

              https://slack.dev/python-slack-sdk/oauth/

              +

              https://docs.slack.dev/tools/python-slack-sdk/oauth

              Sub-modules

              @@ -930,7 +930,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html b/docs/reference/oauth/installation_store/amazon_s3/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html rename to docs/reference/oauth/installation_store/amazon_s3/index.html index 75b0738e9..0b3afe30a 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/amazon_s3/index.html +++ b/docs/reference/oauth/installation_store/amazon_s3/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.amazon_s3 API documentation @@ -521,7 +521,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html b/docs/reference/oauth/installation_store/async_cacheable_installation_store.html similarity index 97% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html rename to docs/reference/oauth/installation_store/async_cacheable_installation_store.html index e72021ac5..a38205174 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_cacheable_installation_store.html +++ b/docs/reference/oauth/installation_store/async_cacheable_installation_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.async_cacheable_installation_store API documentation @@ -74,7 +74,7 @@

              Classes

              def logger(self) -> Logger: return self.underlying.logger - async def async_save(self, installation: Installation): # type: ignore[explicit-override] + async def async_save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -84,14 +84,14 @@

              Classes

              self.cached_installations.pop(key) return await self.underlying.async_save(installation) - async def async_save_bot(self, bot: Bot): # type: ignore[explicit-override] + async def async_save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return await self.underlying.async_save_bot(bot) - async def async_find_bot( # type: ignore[explicit-override] + async def async_find_bot( self, *, enterprise_id: Optional[str], @@ -112,7 +112,7 @@

              Classes

              self.cached_bots[key] = bot return bot - async def async_find_installation( # type: ignore[explicit-override] + async def async_find_installation( self, *, enterprise_id: Optional[str], @@ -287,7 +287,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html b/docs/reference/oauth/installation_store/async_installation_store.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html rename to docs/reference/oauth/installation_store/async_installation_store.html index 2117c2f15..e6e6583e4 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/async_installation_store.html +++ b/docs/reference/oauth/installation_store/async_installation_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.async_installation_store API documentation @@ -351,7 +351,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html b/docs/reference/oauth/installation_store/cacheable_installation_store.html similarity index 98% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html rename to docs/reference/oauth/installation_store/cacheable_installation_store.html index b33e183d2..54bb7662d 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/cacheable_installation_store.html +++ b/docs/reference/oauth/installation_store/cacheable_installation_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.cacheable_installation_store API documentation @@ -74,7 +74,7 @@

              Classes

              def logger(self) -> Logger: return self.underlying.logger - def save(self, installation: Installation): # type: ignore[explicit-override] + def save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -85,14 +85,14 @@

              Classes

              return self.underlying.save(installation) - def save_bot(self, bot: Bot): # type: ignore[explicit-override] + def save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return self.underlying.save_bot(bot) - def find_bot( # type: ignore[explicit-override] + def find_bot( self, *, enterprise_id: Optional[str], @@ -113,7 +113,7 @@

              Classes

              self.cached_bots[key] = bot return bot - def find_installation( # type: ignore[explicit-override] + def find_installation( self, *, enterprise_id: Optional[str], @@ -289,7 +289,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html b/docs/reference/oauth/installation_store/file/index.html similarity index 98% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html rename to docs/reference/oauth/installation_store/file/index.html index f7d3b5238..db77a087c 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/file/index.html +++ b/docs/reference/oauth/installation_store/file/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.file API documentation @@ -48,7 +48,7 @@

              Classes

              class FileInstallationStore -(*,
              base_dir:Β strΒ =Β '/Users/wbergamin/.bolt-app-installation',
              historical_data_enabled:Β boolΒ =Β True,
              client_id:Β strΒ |Β NoneΒ =Β None,
              logger:Β logging.LoggerΒ =Β <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
              +(*,
              base_dir:Β strΒ =Β '$HOME/.bolt-app-installation',
              historical_data_enabled:Β boolΒ =Β True,
              client_id:Β strΒ |Β NoneΒ =Β None,
              logger:Β logging.LoggerΒ =Β <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
              @@ -422,7 +422,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/index.html b/docs/reference/oauth/installation_store/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/index.html rename to docs/reference/oauth/installation_store/index.html index c0cbf6faa..4f90fb1c5 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/index.html +++ b/docs/reference/oauth/installation_store/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store API documentation @@ -327,7 +327,7 @@

              Methods

              class FileInstallationStore -(*,
              base_dir:Β strΒ =Β '/Users/wbergamin/.bolt-app-installation',
              historical_data_enabled:Β boolΒ =Β True,
              client_id:Β strΒ |Β NoneΒ =Β None,
              logger:Β logging.LoggerΒ =Β <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
              +(*,
              base_dir:Β strΒ =Β '$HOME/.bolt-app-installation',
              historical_data_enabled:Β boolΒ =Β True,
              client_id:Β strΒ |Β NoneΒ =Β None,
              logger:Β logging.LoggerΒ =Β <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
              @@ -1449,7 +1449,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html b/docs/reference/oauth/installation_store/installation_store.html similarity index 98% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html rename to docs/reference/oauth/installation_store/installation_store.html index a736b9818..86533f424 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/installation_store.html +++ b/docs/reference/oauth/installation_store/installation_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.installation_store API documentation @@ -37,7 +37,7 @@

              Module slack_sdk.oauth.installation_store.installation_s

              Slack installation data store

              -

              Refer to https://slack.dev/python-slack-sdk/oauth/ for details.

              +

              Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details.

              @@ -353,7 +353,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html b/docs/reference/oauth/installation_store/internals.html similarity index 98% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html rename to docs/reference/oauth/installation_store/internals.html index 8f20944dd..4bf376755 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/internals.html +++ b/docs/reference/oauth/installation_store/internals.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.internals API documentation @@ -60,7 +60,7 @@

              Module slack_sdk.oauth.installation_store.internals diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html b/docs/reference/oauth/installation_store/models/bot.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html rename to docs/reference/oauth/installation_store/models/bot.html index 28bd025c1..bb6182df2 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/bot.html +++ b/docs/reference/oauth/installation_store/models/bot.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.models.bot API documentation @@ -326,7 +326,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html b/docs/reference/oauth/installation_store/models/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html rename to docs/reference/oauth/installation_store/models/index.html index b4acceb9a..b96d16179 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/index.html +++ b/docs/reference/oauth/installation_store/models/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.models API documentation @@ -770,7 +770,7 @@

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html b/docs/reference/oauth/installation_store/models/installation.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html rename to docs/reference/oauth/installation_store/models/installation.html index d18c282b4..c0de92807 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/models/installation.html +++ b/docs/reference/oauth/installation_store/models/installation.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.models.installation API documentation @@ -494,7 +494,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html b/docs/reference/oauth/installation_store/sqlalchemy/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html rename to docs/reference/oauth/installation_store/sqlalchemy/index.html index dc0b60adc..8861dd476 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlalchemy/index.html +++ b/docs/reference/oauth/installation_store/sqlalchemy/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.sqlalchemy API documentation @@ -936,7 +936,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html b/docs/reference/oauth/installation_store/sqlite3/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html rename to docs/reference/oauth/installation_store/sqlite3/index.html index bd7e03e36..8fc6c563e 100644 --- a/docs/static/api-docs/slack_sdk/oauth/installation_store/sqlite3/index.html +++ b/docs/reference/oauth/installation_store/sqlite3/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.installation_store.sqlite3 API documentation @@ -901,7 +901,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html b/docs/reference/oauth/redirect_uri_page_renderer/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html rename to docs/reference/oauth/redirect_uri_page_renderer/index.html index 601448ece..627904d44 100644 --- a/docs/static/api-docs/slack_sdk/oauth/redirect_uri_page_renderer/index.html +++ b/docs/reference/oauth/redirect_uri_page_renderer/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.redirect_uri_page_renderer API documentation @@ -232,7 +232,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html b/docs/reference/oauth/state_store/amazon_s3/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html rename to docs/reference/oauth/state_store/amazon_s3/index.html index dfce0bc5a..40c6d5c4e 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/amazon_s3/index.html +++ b/docs/reference/oauth/state_store/amazon_s3/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.amazon_s3 API documentation @@ -251,7 +251,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html b/docs/reference/oauth/state_store/async_state_store.html similarity index 98% rename from docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html rename to docs/reference/oauth/state_store/async_state_store.html index bf9fb5fb6..3f1fa969b 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/async_state_store.html +++ b/docs/reference/oauth/state_store/async_state_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.async_state_store API documentation @@ -147,7 +147,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html b/docs/reference/oauth/state_store/file/index.html similarity index 97% rename from docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html rename to docs/reference/oauth/state_store/file/index.html index dbd9a07a6..62e7be40e 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/file/index.html +++ b/docs/reference/oauth/state_store/file/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.file API documentation @@ -48,7 +48,7 @@

              Classes

              class FileOAuthStateStore -(*,
              expiration_seconds:Β int,
              base_dir:Β strΒ =Β '/Users/wbergamin/.bolt-app-oauth-state',
              client_id:Β strΒ |Β NoneΒ =Β None,
              logger:Β logging.LoggerΒ =Β <Logger slack_sdk.oauth.state_store.file (WARNING)>)
              +(*,
              expiration_seconds:Β int,
              base_dir:Β strΒ =Β '$HOME/.bolt-app-oauth-state',
              client_id:Β strΒ |Β NoneΒ =Β None,
              logger:Β logging.LoggerΒ =Β <Logger slack_sdk.oauth.state_store.file (WARNING)>)
              @@ -244,7 +244,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/index.html b/docs/reference/oauth/state_store/index.html similarity index 97% rename from docs/static/api-docs/slack_sdk/oauth/state_store/index.html rename to docs/reference/oauth/state_store/index.html index 070b9691a..38a016b32 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/index.html +++ b/docs/reference/oauth/state_store/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store API documentation @@ -37,7 +37,7 @@

              Module slack_sdk.oauth.state_store

              OAuth state parameter data store

              -

              Refer to https://slack.dev/python-slack-sdk/oauth/ for details.

              +

              Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details.

              Sub-modules

              @@ -77,7 +77,7 @@

              Classes

              class FileOAuthStateStore -(*,
              expiration_seconds:Β int,
              base_dir:Β strΒ =Β '/Users/wbergamin/.bolt-app-oauth-state',
              client_id:Β strΒ |Β NoneΒ =Β None,
              logger:Β logging.LoggerΒ =Β <Logger slack_sdk.oauth.state_store.file (WARNING)>)
              +(*,
              expiration_seconds:Β int,
              base_dir:Β strΒ =Β '$HOME/.bolt-app-oauth-state',
              client_id:Β strΒ |Β NoneΒ =Β None,
              logger:Β logging.LoggerΒ =Β <Logger slack_sdk.oauth.state_store.file (WARNING)>)
              @@ -363,7 +363,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html b/docs/reference/oauth/state_store/sqlalchemy/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html rename to docs/reference/oauth/state_store/sqlalchemy/index.html index 5b12f945c..29fe36884 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlalchemy/index.html +++ b/docs/reference/oauth/state_store/sqlalchemy/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.sqlalchemy API documentation @@ -485,7 +485,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html b/docs/reference/oauth/state_store/sqlite3/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html rename to docs/reference/oauth/state_store/sqlite3/index.html index 90edb235f..cd0b75b8b 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/sqlite3/index.html +++ b/docs/reference/oauth/state_store/sqlite3/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.sqlite3 API documentation @@ -339,7 +339,7 @@

              diff --git a/docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html b/docs/reference/oauth/state_store/state_store.html similarity index 98% rename from docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html rename to docs/reference/oauth/state_store/state_store.html index 9aac29715..9734a2bba 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_store/state_store.html +++ b/docs/reference/oauth/state_store/state_store.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_store.state_store API documentation @@ -147,7 +147,7 @@

              diff --git a/docs/static/api-docs/slack_sdk/oauth/state_utils/index.html b/docs/reference/oauth/state_utils/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/state_utils/index.html rename to docs/reference/oauth/state_utils/index.html index aea2b6cf6..d732babfd 100644 --- a/docs/static/api-docs/slack_sdk/oauth/state_utils/index.html +++ b/docs/reference/oauth/state_utils/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.state_utils API documentation @@ -206,7 +206,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html b/docs/reference/oauth/token_rotation/async_rotator.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html rename to docs/reference/oauth/token_rotation/async_rotator.html index 3e37930b8..35d64f362 100644 --- a/docs/static/api-docs/slack_sdk/oauth/token_rotation/async_rotator.html +++ b/docs/reference/oauth/token_rotation/async_rotator.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.token_rotation.async_rotator API documentation @@ -418,7 +418,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html b/docs/reference/oauth/token_rotation/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html rename to docs/reference/oauth/token_rotation/index.html index fbc5eb8a8..979f9f80c 100644 --- a/docs/static/api-docs/slack_sdk/oauth/token_rotation/index.html +++ b/docs/reference/oauth/token_rotation/index.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.token_rotation API documentation @@ -427,7 +427,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html b/docs/reference/oauth/token_rotation/rotator.html similarity index 99% rename from docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html rename to docs/reference/oauth/token_rotation/rotator.html index 7bb25ffb3..afcccb48c 100644 --- a/docs/static/api-docs/slack_sdk/oauth/token_rotation/rotator.html +++ b/docs/reference/oauth/token_rotation/rotator.html @@ -3,7 +3,7 @@ - + slack_sdk.oauth.token_rotation.rotator API documentation @@ -410,7 +410,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html b/docs/reference/proxy_env_variable_loader.html similarity index 98% rename from docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html rename to docs/reference/proxy_env_variable_loader.html index 18553c3a1..f1eee3af3 100644 --- a/docs/static/api-docs/slack_sdk/proxy_env_variable_loader.html +++ b/docs/reference/proxy_env_variable_loader.html @@ -3,7 +3,7 @@ - + slack_sdk.proxy_env_variable_loader API documentation @@ -96,7 +96,7 @@

              Functions

              diff --git a/docs/static/api-docs/slack_sdk/rtm/index.html b/docs/reference/rtm/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/rtm/index.html rename to docs/reference/rtm/index.html index e770576e1..870fa3797 100644 --- a/docs/static/api-docs/slack_sdk/rtm/index.html +++ b/docs/reference/rtm/index.html @@ -3,7 +3,7 @@ - + slack_sdk.rtm API documentation @@ -998,7 +998,7 @@

              RTM diff --git a/docs/static/api-docs/slack_sdk/rtm/v2/index.html b/docs/reference/rtm/v2/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/rtm/v2/index.html rename to docs/reference/rtm/v2/index.html index 5ad721fc7..d0c0591ec 100644 --- a/docs/static/api-docs/slack_sdk/rtm/v2/index.html +++ b/docs/reference/rtm/v2/index.html @@ -3,7 +3,7 @@ - + slack_sdk.rtm.v2 API documentation @@ -984,7 +984,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/rtm_v2/index.html b/docs/reference/rtm_v2/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/rtm_v2/index.html rename to docs/reference/rtm_v2/index.html index ff8e91aa9..5d65bdc74 100644 --- a/docs/static/api-docs/slack_sdk/rtm_v2/index.html +++ b/docs/reference/rtm_v2/index.html @@ -3,7 +3,7 @@ - + slack_sdk.rtm_v2 API documentation @@ -985,7 +985,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/scim/async_client.html b/docs/reference/scim/async_client.html similarity index 97% rename from docs/static/api-docs/slack_sdk/scim/async_client.html rename to docs/reference/scim/async_client.html index e17087f7f..c91441c29 100644 --- a/docs/static/api-docs/slack_sdk/scim/async_client.html +++ b/docs/reference/scim/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.async_client API documentation @@ -87,7 +87,7 @@

              Classes

              retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -163,9 +163,9 @@

              Classes

              await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) @@ -228,9 +228,11 @@

              Classes

              await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) ) @@ -416,7 +418,7 @@

              Classes

              return resp

              API client for SCIM API -See https://api.slack.com/scim for more details

              +See https://docs.slack.dev/admins/scim-api/ for more details

              Args

              token
              @@ -620,9 +622,11 @@

              Methods

              await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) )

              @@ -641,9 +645,9 @@

              Methods

              await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) )

              @@ -828,7 +832,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/scim/index.html b/docs/reference/scim/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/scim/index.html rename to docs/reference/scim/index.html index 61e2f0741..1e6e1e228 100644 --- a/docs/static/api-docs/slack_sdk/scim/index.html +++ b/docs/reference/scim/index.html @@ -3,7 +3,7 @@ - + slack_sdk.scim API documentation @@ -40,7 +40,7 @@

              Module slack_sdk.scim

              SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack.

              -

              Refer to https://slack.dev/python-slack-sdk/scim/ for details.

              +

              Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details.

              Sub-modules

              @@ -301,7 +301,7 @@

              Inherited members

              retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -646,7 +646,7 @@

              Inherited members

              return resp

              API client for SCIM API -See https://api.slack.com/scim for more details

              +See https://docs.slack.dev/admins/scim-api/ for more details

              Args

              token
              @@ -1566,7 +1566,7 @@

              User diff --git a/docs/static/api-docs/slack_sdk/scim/v1/async_client.html b/docs/reference/scim/v1/async_client.html similarity index 97% rename from docs/static/api-docs/slack_sdk/scim/v1/async_client.html rename to docs/reference/scim/v1/async_client.html index e6a0a5c12..6a971bb80 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/async_client.html +++ b/docs/reference/scim/v1/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.async_client API documentation @@ -87,7 +87,7 @@

              Classes

              retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -163,9 +163,9 @@

              Classes

              await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) @@ -228,9 +228,11 @@

              Classes

              await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) ) @@ -416,7 +418,7 @@

              Classes

              return resp

              API client for SCIM API -See https://api.slack.com/scim for more details

              +See https://docs.slack.dev/admins/scim-api/ for more details

              Args

              token
              @@ -620,9 +622,11 @@

              Methods

              await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) ) @@ -641,9 +645,9 @@

              Methods

              await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) @@ -828,7 +832,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/scim/v1/client.html b/docs/reference/scim/v1/client.html similarity index 98% rename from docs/static/api-docs/slack_sdk/scim/v1/client.html rename to docs/reference/scim/v1/client.html index a36c6361a..4317f2394 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/client.html +++ b/docs/reference/scim/v1/client.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.client API documentation @@ -40,7 +40,7 @@

              Module slack_sdk.scim.v1.client

              SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack.

              -

              Refer to https://slack.dev/python-slack-sdk/scim/ for details.

              +

              Refer to https://docs.slack.dev/tools/python-slack-sdk/scim/ for details.

              @@ -86,7 +86,7 @@

              Classes

              retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -431,7 +431,7 @@

              Classes

              return resp

              API client for SCIM API -See https://api.slack.com/scim for more details

              +See https://docs.slack.dev/admins/scim-api/ for more details

              Args

              token
              @@ -826,7 +826,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/scim/v1/default_arg.html b/docs/reference/scim/v1/default_arg.html similarity index 98% rename from docs/static/api-docs/slack_sdk/scim/v1/default_arg.html rename to docs/reference/scim/v1/default_arg.html index 08134ff76..071fa3ca8 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/default_arg.html +++ b/docs/reference/scim/v1/default_arg.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.default_arg API documentation @@ -83,7 +83,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/scim/v1/group.html b/docs/reference/scim/v1/group.html similarity index 99% rename from docs/static/api-docs/slack_sdk/scim/v1/group.html rename to docs/reference/scim/v1/group.html index a8555fdc0..615d75d06 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/group.html +++ b/docs/reference/scim/v1/group.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.group API documentation @@ -306,7 +306,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/scim/v1/index.html b/docs/reference/scim/v1/index.html similarity index 97% rename from docs/static/api-docs/slack_sdk/scim/v1/index.html rename to docs/reference/scim/v1/index.html index ac0d0fa70..2cbda3da0 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/index.html +++ b/docs/reference/scim/v1/index.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1 API documentation @@ -40,7 +40,7 @@

              Module slack_sdk.scim.v1

              SCIM API is a set of APIs for provisioning and managing user accounts and groups. SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack.

              -

              Refer to https://slack.dev/python-slack-sdk/scim/ for details.

              +

              Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details.

              Sub-modules

              @@ -113,7 +113,7 @@

              Sub-modules

              diff --git a/docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html b/docs/reference/scim/v1/internal_utils.html similarity index 98% rename from docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html rename to docs/reference/scim/v1/internal_utils.html index e8c369720..c8aecfd94 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/internal_utils.html +++ b/docs/reference/scim/v1/internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.internal_utils API documentation @@ -60,7 +60,7 @@

              Module slack_sdk.scim.v1.internal_utils

              diff --git a/docs/static/api-docs/slack_sdk/scim/v1/response.html b/docs/reference/scim/v1/response.html similarity index 99% rename from docs/static/api-docs/slack_sdk/scim/v1/response.html rename to docs/reference/scim/v1/response.html index a38192090..83b638f69 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/response.html +++ b/docs/reference/scim/v1/response.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.response API documentation @@ -961,7 +961,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/scim/v1/types.html b/docs/reference/scim/v1/types.html similarity index 99% rename from docs/static/api-docs/slack_sdk/scim/v1/types.html rename to docs/reference/scim/v1/types.html index 16316fb1f..2d8b58aeb 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/types.html +++ b/docs/reference/scim/v1/types.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.types API documentation @@ -151,7 +151,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/scim/v1/user.html b/docs/reference/scim/v1/user.html similarity index 99% rename from docs/static/api-docs/slack_sdk/scim/v1/user.html rename to docs/reference/scim/v1/user.html index 729c5f07a..49e328355 100644 --- a/docs/static/api-docs/slack_sdk/scim/v1/user.html +++ b/docs/reference/scim/v1/user.html @@ -3,7 +3,7 @@ - + slack_sdk.scim.v1.user API documentation @@ -768,7 +768,7 @@

              -

              Generated by pdoc 0.11.5.

              +

              Generated by pdoc 0.11.6.

              diff --git a/docs/static/api-docs/slack_sdk/signature/index.html b/docs/reference/signature/index.html similarity index 97% rename from docs/static/api-docs/slack_sdk/signature/index.html rename to docs/reference/signature/index.html index 00d798948..ecc1f0831 100644 --- a/docs/static/api-docs/slack_sdk/signature/index.html +++ b/docs/reference/signature/index.html @@ -3,7 +3,7 @@ - + slack_sdk.signature API documentation @@ -93,7 +93,7 @@

              Methods

              Slack signs its requests using a secret that's unique to your app. With the help of signing secrets, your app can more confidently verify whether requests from us are authentic. - https://api.slack.com/authentication/verifying-requests-from-slack + https://docs.slack.dev/authentication/verifying-requests-from-slack/ """ self.signing_secret = signing_secret self.clock = clock @@ -150,7 +150,7 @@

              Methods

              Slack signs its requests using a secret that's unique to your app. With the help of signing secrets, your app can more confidently verify whether requests from us are authentic. -https://api.slack.com/authentication/verifying-requests-from-slack

              +https://docs.slack.dev/authentication/verifying-requests-from-slack/

          Methods

          @@ -268,7 +268,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html b/docs/reference/socket_mode/aiohttp/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html rename to docs/reference/socket_mode/aiohttp/index.html index 47a0a65a6..92c6225c1 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/aiohttp/index.html +++ b/docs/reference/socket_mode/aiohttp/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.aiohttp API documentation @@ -38,8 +38,8 @@

          Module slack_sdk.socket_mode.aiohttp

          aiohttp based Socket Mode client

          @@ -1065,7 +1065,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/async_client.html b/docs/reference/socket_mode/async_client.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/async_client.html rename to docs/reference/socket_mode/async_client.html index 8ca396e1b..20d07951a 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/async_client.html +++ b/docs/reference/socket_mode/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.async_client API documentation @@ -569,7 +569,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html b/docs/reference/socket_mode/async_listeners.html similarity index 98% rename from docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html rename to docs/reference/socket_mode/async_listeners.html index 1dd20bab0..e78b3c29e 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/async_listeners.html +++ b/docs/reference/socket_mode/async_listeners.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.async_listeners API documentation @@ -152,7 +152,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html b/docs/reference/socket_mode/builtin/client.html similarity index 98% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html rename to docs/reference/socket_mode/builtin/client.html index ea56feefa..8e55f2347 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/client.html +++ b/docs/reference/socket_mode/builtin/client.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin.client API documentation @@ -38,8 +38,8 @@

          Module slack_sdk.socket_mode.builtin.client

          The built-in Socket Mode client

          @@ -625,7 +625,7 @@

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html b/docs/reference/socket_mode/builtin/connection.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html rename to docs/reference/socket_mode/builtin/connection.html index a32ffb9c1..5c85bef91 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/connection.html +++ b/docs/reference/socket_mode/builtin/connection.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin.connection API documentation @@ -1055,7 +1055,7 @@

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html b/docs/reference/socket_mode/builtin/frame_header.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html rename to docs/reference/socket_mode/builtin/frame_header.html index 4af543f01..b728e0926 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/frame_header.html +++ b/docs/reference/socket_mode/builtin/frame_header.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin.frame_header API documentation @@ -199,7 +199,7 @@

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html b/docs/reference/socket_mode/builtin/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html rename to docs/reference/socket_mode/builtin/index.html index 83d5f641e..9f710eaf6 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/index.html +++ b/docs/reference/socket_mode/builtin/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin API documentation @@ -647,7 +647,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html b/docs/reference/socket_mode/builtin/internals.html similarity index 98% rename from docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html rename to docs/reference/socket_mode/builtin/internals.html index 9e47d439d..2977bc6c4 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/builtin/internals.html +++ b/docs/reference/socket_mode/builtin/internals.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.builtin.internals API documentation @@ -60,7 +60,7 @@

          Module slack_sdk.socket_mode.builtin.internals diff --git a/docs/static/api-docs/slack_sdk/socket_mode/client.html b/docs/reference/socket_mode/client.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/client.html rename to docs/reference/socket_mode/client.html index c861f0645..3c8c615f9 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/client.html +++ b/docs/reference/socket_mode/client.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.client API documentation @@ -167,7 +167,7 @@

          Classes

          for listener in self.message_listeners: try: - listener(self, message, raw_message) # type: ignore[call-arg, arg-type] + listener(self, message, raw_message) # type: ignore[call-arg, arg-type, misc] except Exception as e: self.logger.exception(f"Failed to run a message listener: {e}") @@ -431,7 +431,7 @@

          Methods

          for listener in self.message_listeners: try: - listener(self, message, raw_message) # type: ignore[call-arg, arg-type] + listener(self, message, raw_message) # type: ignore[call-arg, arg-type, misc] except Exception as e: self.logger.exception(f"Failed to run a message listener: {e}") @@ -531,7 +531,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/index.html b/docs/reference/socket_mode/index.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/index.html rename to docs/reference/socket_mode/index.html index 8bee1c5e2..381e969e5 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/index.html +++ b/docs/reference/socket_mode/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode API documentation @@ -40,7 +40,7 @@

          Module slack_sdk.socket_mode

          Socket Mode is a method of connecting your app to Slack’s APIs using WebSockets instead of HTTP. You can use slack_sdk.socket_mode.SocketModeClient for managing Socket Mode connections and performing interactions with Slack.

          -

          https://api.slack.com/apis/connections/socket

          +

          https://docs.slack.dev/apis/events-api/using-socket-mode/

          Sub-modules

          @@ -692,7 +692,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html b/docs/reference/socket_mode/interval_runner.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html rename to docs/reference/socket_mode/interval_runner.html index d5d9cdddc..54838d22f 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/interval_runner.html +++ b/docs/reference/socket_mode/interval_runner.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.interval_runner API documentation @@ -174,7 +174,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/listeners.html b/docs/reference/socket_mode/listeners.html similarity index 98% rename from docs/static/api-docs/slack_sdk/socket_mode/listeners.html rename to docs/reference/socket_mode/listeners.html index ab0b64d43..daabff8fd 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/listeners.html +++ b/docs/reference/socket_mode/listeners.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.listeners API documentation @@ -105,7 +105,7 @@

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/logger/index.html b/docs/reference/socket_mode/logger/index.html similarity index 98% rename from docs/static/api-docs/slack_sdk/socket_mode/logger/index.html rename to docs/reference/socket_mode/logger/index.html index 10477c7ea..0d02b13f3 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/logger/index.html +++ b/docs/reference/socket_mode/logger/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.logger API documentation @@ -72,7 +72,7 @@

          Sub-modules

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html b/docs/reference/socket_mode/logger/messages.html similarity index 98% rename from docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html rename to docs/reference/socket_mode/logger/messages.html index 70adfb489..eb2a0dffe 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/logger/messages.html +++ b/docs/reference/socket_mode/logger/messages.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.logger.messages API documentation @@ -82,7 +82,7 @@

          Functions

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/request.html b/docs/reference/socket_mode/request.html similarity index 99% rename from docs/static/api-docs/slack_sdk/socket_mode/request.html rename to docs/reference/socket_mode/request.html index 0ba83927d..75945aa40 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/request.html +++ b/docs/reference/socket_mode/request.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.request API documentation @@ -199,7 +199,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/response.html b/docs/reference/socket_mode/response.html similarity index 98% rename from docs/static/api-docs/slack_sdk/socket_mode/response.html rename to docs/reference/socket_mode/response.html index 21cfe4190..0142f7c9e 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/response.html +++ b/docs/reference/socket_mode/response.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.response API documentation @@ -140,7 +140,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html b/docs/reference/socket_mode/websocket_client/index.html similarity index 97% rename from docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html rename to docs/reference/socket_mode/websocket_client/index.html index e5cf3e0c6..b90aa9137 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/websocket_client/index.html +++ b/docs/reference/socket_mode/websocket_client/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.websocket_client API documentation @@ -38,8 +38,8 @@

          Module slack_sdk.socket_mode.websocket_client

          websocket-client bassd Socket Mode client

          @@ -91,7 +91,7 @@

          Classes

          auto_reconnect_enabled: bool default_auto_reconnect_enabled: bool - close: bool # type: ignore[assignment] + closed: bool connect_operation_lock: Lock on_open_listeners: List[Callable[[WebSocketApp], None]] @@ -213,10 +213,10 @@

          Classes

          self.current_session = websocket.WebSocketApp( self.wss_uri, - on_open=on_open, # type: ignore[arg-type] - on_message=on_message, # type: ignore[arg-type] - on_error=on_error, # type: ignore[arg-type] - on_close=on_close, # type: ignore[arg-type] + on_open=on_open, + on_message=on_message, + on_error=on_error, + on_close=on_close, ) self.auto_reconnect_enabled = self.default_auto_reconnect_enabled @@ -258,7 +258,7 @@

          Classes

          ) raise e - def close(self) -> None: # type: ignore[explicit-override, no-redef] + def close(self) -> None: self.closed = True self.auto_reconnect_enabled = False self.disconnect() @@ -384,7 +384,7 @@

          Methods

          Expand source code -
          def close(self) -> None:  # type: ignore[explicit-override, no-redef]
          +
          def close(self) -> None:
               self.closed = True
               self.auto_reconnect_enabled = False
               self.disconnect()
          @@ -441,10 +441,10 @@ 

          Methods

          self.current_session = websocket.WebSocketApp( self.wss_uri, - on_open=on_open, # type: ignore[arg-type] - on_message=on_message, # type: ignore[arg-type] - on_error=on_error, # type: ignore[arg-type] - on_close=on_close, # type: ignore[arg-type] + on_open=on_open, + on_message=on_message, + on_error=on_error, + on_close=on_close, ) self.auto_reconnect_enabled = self.default_auto_reconnect_enabled @@ -582,7 +582,7 @@

          diff --git a/docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html b/docs/reference/socket_mode/websockets/index.html similarity index 98% rename from docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html rename to docs/reference/socket_mode/websockets/index.html index 24c75097c..e38594eee 100644 --- a/docs/static/api-docs/slack_sdk/socket_mode/websockets/index.html +++ b/docs/reference/socket_mode/websockets/index.html @@ -3,7 +3,7 @@ - + slack_sdk.socket_mode.websockets API documentation @@ -38,8 +38,8 @@

          Module slack_sdk.socket_mode.websockets

          websockets bassd Socket Mode client

          @@ -633,7 +633,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/version.html b/docs/reference/version.html similarity index 98% rename from docs/static/api-docs/slack_sdk/version.html rename to docs/reference/version.html index feb4b1d6b..9f8e3c5bb 100644 --- a/docs/static/api-docs/slack_sdk/version.html +++ b/docs/reference/version.html @@ -3,7 +3,7 @@ - + slack_sdk.version API documentation @@ -61,7 +61,7 @@

          Module slack_sdk.version

          diff --git a/docs/static/api-docs/slack_sdk/web/async_base_client.html b/docs/reference/web/async_base_client.html similarity index 99% rename from docs/static/api-docs/slack_sdk/web/async_base_client.html rename to docs/reference/web/async_base_client.html index 608c48433..97615d924 100644 --- a/docs/static/api-docs/slack_sdk/web/async_base_client.html +++ b/docs/reference/web/async_base_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.async_base_client API documentation @@ -529,7 +529,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/reference/web/async_chat_stream.html b/docs/reference/web/async_chat_stream.html new file mode 100644 index 000000000..ca7bf2506 --- /dev/null +++ b/docs/reference/web/async_chat_stream.html @@ -0,0 +1,506 @@ + + + + + + +slack_sdk.web.async_chat_stream API documentation + + + + + + + + + + + +
          +
          +
          +

          Module slack_sdk.web.async_chat_stream

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          Classes

          +
          +
          +class AsyncChatStream +(client:Β AsyncWebClient,
          *,
          channel:Β str,
          logger:Β logging.Logger,
          thread_ts:Β str,
          buffer_size:Β int,
          recipient_team_id:Β strΒ |Β NoneΒ =Β None,
          recipient_user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs)
          +
          +
          +
          + +Expand source code + +
          class AsyncChatStream:
          +    """A helper class for streaming markdown text into a conversation using the chat streaming APIs.
          +
          +    This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API
          +    methods, with automatic buffering and state management.
          +    """
          +
          +    def __init__(
          +        self,
          +        client: "AsyncWebClient",
          +        *,
          +        channel: str,
          +        logger: logging.Logger,
          +        thread_ts: str,
          +        buffer_size: int,
          +        recipient_team_id: Optional[str] = None,
          +        recipient_user_id: Optional[str] = None,
          +        **kwargs,
          +    ):
          +        """Initialize a new ChatStream instance.
          +
          +        The __init__ method creates a unique ChatStream instance that keeps track of one chat stream.
          +
          +        Args:
          +            client: The WebClient instance to use for API calls.
          +            channel: An encoded ID that represents a channel, private group, or DM.
          +            logger: A logging channel for outputs.
          +            thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
          +              request.
          +            recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
          +              streaming to channels.
          +            recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +            buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value
          +              decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
          +            **kwargs: Additional arguments passed to the underlying API calls.
          +        """
          +        self._client = client
          +        self._logger = logger
          +        self._token: Optional[str] = kwargs.pop("token", None)
          +        self._stream_args = {
          +            "channel": channel,
          +            "thread_ts": thread_ts,
          +            "recipient_team_id": recipient_team_id,
          +            "recipient_user_id": recipient_user_id,
          +            **kwargs,
          +        }
          +        self._buffer = ""
          +        self._state = "starting"
          +        self._stream_ts: Optional[str] = None
          +        self._buffer_size = buffer_size
          +
          +    async def append(
          +        self,
          +        *,
          +        markdown_text: str,
          +        **kwargs,
          +    ) -> Optional[AsyncSlackResponse]:
          +        """Append to the stream.
          +
          +        The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream
          +        is stopped this method cannot be called.
          +
          +        Args:
          +            markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
          +              what will be appended to the message received so far.
          +            **kwargs: Additional arguments passed to the underlying API calls.
          +
          +        Returns:
          +            AsyncSlackResponse if the buffer was flushed, None if buffering.
          +
          +        Raises:
          +            SlackRequestError: If the stream is already completed.
          +
          +        Example:
          +            ```python
          +            streamer = client.chat_stream(
          +                channel="C0123456789",
          +                thread_ts="1700000001.123456",
          +                recipient_team_id="T0123456789",
          +                recipient_user_id="U0123456789",
          +            )
          +            streamer.append(markdown_text="**hello wo")
          +            streamer.append(markdown_text="rld!**")
          +            streamer.stop()
          +            ```
          +        """
          +        if self._state == "completed":
          +            raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}")
          +        if kwargs.get("token"):
          +            self._token = kwargs.pop("token")
          +        self._buffer += markdown_text
          +        if len(self._buffer) >= self._buffer_size:
          +            return await self._flush_buffer(**kwargs)
          +        details = {
          +            "buffer_length": len(self._buffer),
          +            "buffer_size": self._buffer_size,
          +            "channel": self._stream_args.get("channel"),
          +            "recipient_team_id": self._stream_args.get("recipient_team_id"),
          +            "recipient_user_id": self._stream_args.get("recipient_user_id"),
          +            "thread_ts": self._stream_args.get("thread_ts"),
          +        }
          +        self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}")
          +        return None
          +
          +    async def stop(
          +        self,
          +        *,
          +        markdown_text: Optional[str] = None,
          +        blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
          +        metadata: Optional[Union[Dict, Metadata]] = None,
          +        **kwargs,
          +    ) -> AsyncSlackResponse:
          +        """Stop the stream and finalize the message.
          +
          +        Args:
          +            blocks: A list of blocks that will be rendered at the bottom of the finalized message.
          +            markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
          +              what will be appended to the message received so far.
          +            metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
          +              post to Slack is accessible to any app or user who is a member of that workspace.
          +            **kwargs: Additional arguments passed to the underlying API calls.
          +
          +        Returns:
          +            AsyncSlackResponse from the chat.stopStream API call.
          +
          +        Raises:
          +            SlackRequestError: If the stream is already completed.
          +
          +        Example:
          +            ```python
          +            streamer = client.chat_stream(
          +                channel="C0123456789",
          +                thread_ts="1700000001.123456",
          +                recipient_team_id="T0123456789",
          +                recipient_user_id="U0123456789",
          +            )
          +            streamer.append(markdown_text="**hello wo")
          +            streamer.append(markdown_text="rld!**")
          +            streamer.stop()
          +            ```
          +        """
          +        if self._state == "completed":
          +            raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}")
          +        if kwargs.get("token"):
          +            self._token = kwargs.pop("token")
          +        if markdown_text:
          +            self._buffer += markdown_text
          +        if not self._stream_ts:
          +            response = await self._client.chat_startStream(
          +                **self._stream_args,
          +                token=self._token,
          +            )
          +            if not response.get("ts"):
          +                raise e.SlackRequestError("Failed to stop stream: stream not started")
          +            self._stream_ts = str(response["ts"])
          +            self._state = "in_progress"
          +        response = await self._client.chat_stopStream(
          +            token=self._token,
          +            channel=self._stream_args["channel"],
          +            ts=self._stream_ts,
          +            blocks=blocks,
          +            markdown_text=self._buffer,
          +            metadata=metadata,
          +            **kwargs,
          +        )
          +        self._state = "completed"
          +        return response
          +
          +    async def _flush_buffer(self, **kwargs) -> AsyncSlackResponse:
          +        """Flush the internal buffer by making appropriate API calls."""
          +        if not self._stream_ts:
          +            response = await self._client.chat_startStream(
          +                **self._stream_args,
          +                token=self._token,
          +                **kwargs,
          +                markdown_text=self._buffer,
          +            )
          +            self._stream_ts = response.get("ts")
          +            self._state = "in_progress"
          +        else:
          +            response = await self._client.chat_appendStream(
          +                token=self._token,
          +                channel=self._stream_args["channel"],
          +                ts=self._stream_ts,
          +                **kwargs,
          +                markdown_text=self._buffer,
          +            )
          +        self._buffer = ""
          +        return response
          +
          +

          A helper class for streaming markdown text into a conversation using the chat streaming APIs.

          +

          This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API +methods, with automatic buffering and state management.

          +

          Initialize a new ChatStream instance.

          +

          The init method creates a unique ChatStream instance that keeps track of one chat stream.

          +

          Args

          +
          +
          client
          +
          The WebClient instance to use for API calls.
          +
          channel
          +
          An encoded ID that represents a channel, private group, or DM.
          +
          logger
          +
          A logging channel for outputs.
          +
          thread_ts
          +
          Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
          +
          recipient_team_id
          +
          The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
          +
          recipient_user_id
          +
          The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +
          buffer_size
          +
          The length of markdown_text to buffer in-memory before calling a method. Increasing this value +decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Methods

          +
          +
          +async def append(self, *, markdown_text:Β str, **kwargs) ‑>Β AsyncSlackResponseΒ |Β None +
          +
          +
          + +Expand source code + +
          async def append(
          +    self,
          +    *,
          +    markdown_text: str,
          +    **kwargs,
          +) -> Optional[AsyncSlackResponse]:
          +    """Append to the stream.
          +
          +    The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream
          +    is stopped this method cannot be called.
          +
          +    Args:
          +        markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
          +          what will be appended to the message received so far.
          +        **kwargs: Additional arguments passed to the underlying API calls.
          +
          +    Returns:
          +        AsyncSlackResponse if the buffer was flushed, None if buffering.
          +
          +    Raises:
          +        SlackRequestError: If the stream is already completed.
          +
          +    Example:
          +        ```python
          +        streamer = client.chat_stream(
          +            channel="C0123456789",
          +            thread_ts="1700000001.123456",
          +            recipient_team_id="T0123456789",
          +            recipient_user_id="U0123456789",
          +        )
          +        streamer.append(markdown_text="**hello wo")
          +        streamer.append(markdown_text="rld!**")
          +        streamer.stop()
          +        ```
          +    """
          +    if self._state == "completed":
          +        raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}")
          +    if kwargs.get("token"):
          +        self._token = kwargs.pop("token")
          +    self._buffer += markdown_text
          +    if len(self._buffer) >= self._buffer_size:
          +        return await self._flush_buffer(**kwargs)
          +    details = {
          +        "buffer_length": len(self._buffer),
          +        "buffer_size": self._buffer_size,
          +        "channel": self._stream_args.get("channel"),
          +        "recipient_team_id": self._stream_args.get("recipient_team_id"),
          +        "recipient_user_id": self._stream_args.get("recipient_user_id"),
          +        "thread_ts": self._stream_args.get("thread_ts"),
          +    }
          +    self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}")
          +    return None
          +
          +

          Append to the stream.

          +

          The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream +is stopped this method cannot be called.

          +

          Args

          +
          +
          markdown_text
          +
          Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is +what will be appended to the message received so far.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Returns

          +

          AsyncSlackResponse if the buffer was flushed, None if buffering.

          +

          Raises

          +
          +
          SlackRequestError
          +
          If the stream is already completed.
          +
          +

          Example

          +
          streamer = client.chat_stream(
          +    channel="C0123456789",
          +    thread_ts="1700000001.123456",
          +    recipient_team_id="T0123456789",
          +    recipient_user_id="U0123456789",
          +)
          +streamer.append(markdown_text="**hello wo")
          +streamer.append(markdown_text="rld!**")
          +streamer.stop()
          +
          +
          +
          +async def stop(self,
          *,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def stop(
          +    self,
          +    *,
          +    markdown_text: Optional[str] = None,
          +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
          +    metadata: Optional[Union[Dict, Metadata]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Stop the stream and finalize the message.
          +
          +    Args:
          +        blocks: A list of blocks that will be rendered at the bottom of the finalized message.
          +        markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
          +          what will be appended to the message received so far.
          +        metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
          +          post to Slack is accessible to any app or user who is a member of that workspace.
          +        **kwargs: Additional arguments passed to the underlying API calls.
          +
          +    Returns:
          +        AsyncSlackResponse from the chat.stopStream API call.
          +
          +    Raises:
          +        SlackRequestError: If the stream is already completed.
          +
          +    Example:
          +        ```python
          +        streamer = client.chat_stream(
          +            channel="C0123456789",
          +            thread_ts="1700000001.123456",
          +            recipient_team_id="T0123456789",
          +            recipient_user_id="U0123456789",
          +        )
          +        streamer.append(markdown_text="**hello wo")
          +        streamer.append(markdown_text="rld!**")
          +        streamer.stop()
          +        ```
          +    """
          +    if self._state == "completed":
          +        raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}")
          +    if kwargs.get("token"):
          +        self._token = kwargs.pop("token")
          +    if markdown_text:
          +        self._buffer += markdown_text
          +    if not self._stream_ts:
          +        response = await self._client.chat_startStream(
          +            **self._stream_args,
          +            token=self._token,
          +        )
          +        if not response.get("ts"):
          +            raise e.SlackRequestError("Failed to stop stream: stream not started")
          +        self._stream_ts = str(response["ts"])
          +        self._state = "in_progress"
          +    response = await self._client.chat_stopStream(
          +        token=self._token,
          +        channel=self._stream_args["channel"],
          +        ts=self._stream_ts,
          +        blocks=blocks,
          +        markdown_text=self._buffer,
          +        metadata=metadata,
          +        **kwargs,
          +    )
          +    self._state = "completed"
          +    return response
          +
          +

          Stop the stream and finalize the message.

          +

          Args

          +
          +
          blocks
          +
          A list of blocks that will be rendered at the bottom of the finalized message.
          +
          markdown_text
          +
          Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is +what will be appended to the message received so far.
          +
          metadata
          +
          JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you +post to Slack is accessible to any app or user who is a member of that workspace.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Returns

          +

          AsyncSlackResponse from the chat.stopStream API call.

          +

          Raises

          +
          +
          SlackRequestError
          +
          If the stream is already completed.
          +
          +

          Example

          +
          streamer = client.chat_stream(
          +    channel="C0123456789",
          +    thread_ts="1700000001.123456",
          +    recipient_team_id="T0123456789",
          +    recipient_user_id="U0123456789",
          +)
          +streamer.append(markdown_text="**hello wo")
          +streamer.append(markdown_text="rld!**")
          +streamer.stop()
          +
          +
          +
          +
          +
          +
          +
          + +
          + + + diff --git a/docs/static/api-docs/slack_sdk/web/async_client.html b/docs/reference/web/async_client.html similarity index 81% rename from docs/static/api-docs/slack_sdk/web/async_client.html rename to docs/reference/web/async_client.html index 1f540de1e..2ec1ba84a 100644 --- a/docs/static/api-docs/slack_sdk/web/async_client.html +++ b/docs/reference/web/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.async_client API documentation @@ -59,7 +59,7 @@

          Classes

          class AsyncWebClient(AsyncBaseClient):
               """A WebClient allows apps to communicate with the Slack Platform's Web API.
           
          -    https://api.slack.com/methods
          +    https://docs.slack.dev/reference/methods
           
               The Slack Web API is an interface for querying information from
               and enacting change in a Slack workspace.
          @@ -130,7 +130,7 @@ 

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -152,7 +152,7 @@

          Classes

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -179,7 +179,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -200,7 +200,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -220,7 +220,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -240,7 +240,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -264,7 +264,7 @@

          Classes

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -291,7 +291,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -313,7 +313,7 @@

          Classes

          ) -> AsyncSlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -344,7 +344,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -372,7 +372,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -389,7 +389,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -411,7 +411,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -431,7 +431,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -450,7 +450,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -460,6 +460,60 @@

          Classes

          kwargs.update({"entity_type": entity_type}) return await self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + async def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return await self.api_call("admin.conversations.createForObjects", params=kwargs) + + async def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Link a Salesforce record to a channel. + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return await self.api_call("admin.conversations.linkObjects", params=kwargs) + + async def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> AsyncSlackResponse: + """Unlink a Salesforce record from a channel. + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return await self.api_call("admin.conversations.unlinkObjects", params=kwargs) + async def admin_barriers_create( self, *, @@ -469,7 +523,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -489,7 +543,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return await self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -504,7 +558,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -525,7 +579,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -545,7 +599,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -565,7 +619,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.delete", params=kwargs) @@ -578,7 +632,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -595,7 +649,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.archive", params=kwargs) @@ -607,7 +661,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.unarchive", params=kwargs) @@ -620,7 +674,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return await self.api_call("admin.conversations.rename", params=kwargs) @@ -638,7 +692,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -669,7 +723,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -681,7 +735,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -694,7 +748,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -710,7 +764,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -723,7 +777,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -743,7 +797,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -771,7 +825,7 @@

          Classes

          """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -798,7 +852,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -821,7 +875,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -844,7 +898,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -869,7 +923,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -893,7 +947,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -911,7 +965,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -923,7 +977,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -936,7 +990,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return await self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -948,7 +1002,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return await self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -973,7 +1027,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -991,7 +1045,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return await self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1004,7 +1058,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return await self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1017,7 +1071,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1029,7 +1083,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return await self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1042,7 +1096,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return await self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1057,7 +1111,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1080,7 +1134,7 @@

          Classes

          ) -> AsyncSlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1098,7 +1152,7 @@

          Classes

          ) -> AsyncSlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1122,7 +1176,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1147,7 +1201,7 @@

          Classes

          ) -> AsyncSlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1169,7 +1223,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1191,7 +1245,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1211,7 +1265,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1233,7 +1287,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return await self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1248,7 +1302,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1268,7 +1322,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1285,7 +1339,7 @@

          Classes

          ) -> AsyncSlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1303,7 +1357,7 @@

          Classes

          ) -> AsyncSlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1325,7 +1379,7 @@

          Classes

          ) -> AsyncSlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1342,7 +1396,7 @@

          Classes

          ) -> AsyncSlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1360,7 +1414,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1374,7 +1428,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1394,7 +1448,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1413,7 +1467,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1434,7 +1488,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1455,7 +1509,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1475,7 +1529,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.list", params=kwargs) @@ -1489,7 +1543,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1501,7 +1555,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return await self.api_call("admin.teams.settings.info", params=kwargs) @@ -1514,7 +1568,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return await self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1527,7 +1581,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return await self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1540,7 +1594,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return await self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1553,7 +1607,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return await self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1567,7 +1621,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1585,7 +1639,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1603,7 +1657,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1622,7 +1676,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1642,7 +1696,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1674,7 +1728,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1698,7 +1752,7 @@

          Classes

          async def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1706,7 +1760,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1727,7 +1781,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.remove", params=kwargs) @@ -1740,7 +1794,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setAdmin", params=kwargs) @@ -1754,7 +1808,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setExpiration", params=kwargs) @@ -1767,7 +1821,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setOwner", params=kwargs) @@ -1780,7 +1834,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setRegular", params=kwargs) @@ -1801,7 +1855,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1831,7 +1885,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1852,7 +1906,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1872,7 +1926,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1891,7 +1945,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1906,7 +1960,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return await self.api_call("api.test", params=kwargs) @@ -1919,7 +1973,7 @@

          Classes

          ) -> AsyncSlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return await self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1934,7 +1988,7 @@

          Classes

          ) -> AsyncSlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return await self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1947,7 +2001,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return await self.api_call("apps.uninstall", params=kwargs) @@ -1959,7 +2013,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1974,7 +2028,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.delete", params=kwargs) @@ -1986,7 +2040,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.export", params=kwargs) @@ -1999,7 +2053,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2016,7 +2070,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2032,7 +2086,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return await self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2043,13 +2097,17 @@

          Classes

          channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return await self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("assistant.threads.setStatus", json=kwargs) async def assistant_threads_setTitle( self, @@ -2059,8 +2117,8 @@

          Classes

          title: str, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return await self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2074,8 +2132,8 @@

          Classes

          prompts: List[Dict[str, str]], **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2089,7 +2147,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return await self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2099,7 +2157,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return await self.api_call("auth.test", params=kwargs) @@ -2111,7 +2169,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return await self.api_call("auth.teams.list", params=kwargs) @@ -2129,7 +2187,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2155,7 +2213,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2175,7 +2233,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return await self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2188,7 +2246,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return await self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2201,7 +2259,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return await self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2220,7 +2278,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2247,7 +2305,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return await self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2259,7 +2317,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return await self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2272,7 +2330,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2286,7 +2344,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2302,7 +2360,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2322,7 +2380,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return await self.api_call("canvases.create", json=kwargs) @@ -2335,7 +2393,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return await self.api_call("canvases.edit", json=kwargs) @@ -2347,7 +2405,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return await self.api_call("canvases.delete", params=kwargs) @@ -2362,7 +2420,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2387,7 +2445,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2410,7 +2468,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return await self.api_call("canvases.sections.lookup", params=kwargs) @@ -2418,7 +2476,7 @@

          Classes

          # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def channels_archive( @@ -2588,6 +2646,27 @@

          Classes

          # -------------------------- + async def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> AsyncSlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.appendStream", json=kwargs) + async def chat_delete( self, *, @@ -2597,7 +2676,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return await self.api_call("chat.delete", params=kwargs) @@ -2611,7 +2690,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2630,7 +2709,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return await self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2643,7 +2722,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return await self.api_call("chat.meMessage", params=kwargs) @@ -2663,10 +2742,11 @@

          Classes

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2682,11 +2762,12 @@

          Classes

          "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postEphemeral", json=kwargs) @@ -2709,11 +2790,12 @@

          Classes

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2734,11 +2816,12 @@

          Classes

          "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postMessage", json=kwargs) @@ -2747,7 +2830,7 @@

          Classes

          *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2758,10 +2841,11 @@

          Classes

          unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2778,14 +2862,155 @@

          Classes

          "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs) + async def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return await self.api_call("chat.scheduledMessages.list", params=kwargs) + + async def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.startStream", json=kwargs) + + async def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.stopStream", json=kwargs) + + async def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> AsyncChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = await client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + await streamer.append(markdown_text="**hello wo") + await streamer.append(markdown_text="rld!**") + await streamer.stop() + ``` + """ + return AsyncChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + async def chat_unfurl( self, *, @@ -2794,6 +3019,7 @@

          Classes

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2801,7 +3027,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2810,6 +3036,7 @@

          Classes

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -2835,10 +3062,11 @@

          Classes

          parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2852,6 +3080,7 @@

          Classes

          "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2860,36 +3089,10 @@

          Classes

          kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs) - async def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> AsyncSlackResponse: - """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return await self.api_call("chat.scheduledMessages.list", params=kwargs) - async def conversations_acceptSharedInvite( self, *, @@ -2902,7 +3105,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2926,7 +3129,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2938,7 +3141,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.archive", params=kwargs) @@ -2950,7 +3153,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return await self.api_call("conversations.close", params=kwargs) @@ -2964,7 +3167,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return await self.api_call("conversations.create", params=kwargs) @@ -2977,7 +3180,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -2986,7 +3189,7 @@

          Classes

          self, *, action: str, channel: str, target_team: str, **kwargs ) -> AsyncSlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3010,7 +3213,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3034,7 +3237,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3054,7 +3257,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3077,7 +3280,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3099,7 +3302,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return await self.api_call("conversations.join", params=kwargs) @@ -3112,7 +3315,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return await self.api_call("conversations.kick", params=kwargs) @@ -3124,7 +3327,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return await self.api_call("conversations.leave", params=kwargs) @@ -3140,7 +3343,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3166,7 +3369,7 @@

          Classes

          ) -> AsyncSlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return await self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3179,7 +3382,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return await self.api_call("conversations.mark", params=kwargs) @@ -3193,7 +3396,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return await self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3207,7 +3410,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3226,7 +3429,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return await self.api_call("conversations.rename", params=kwargs) @@ -3245,7 +3448,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3271,7 +3474,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3292,7 +3495,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return await self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3310,7 +3513,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3337,7 +3540,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return await self.api_call("conversations.setPurpose", params=kwargs) @@ -3350,7 +3553,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return await self.api_call("conversations.setTopic", params=kwargs) @@ -3362,7 +3565,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.unarchive", params=kwargs) @@ -3375,7 +3578,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return await self.api_call("conversations.canvases.create", json=kwargs) @@ -3388,7 +3591,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3400,7 +3603,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return await self.api_call("dnd.endDnd", params=kwargs) @@ -3409,7 +3612,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return await self.api_call("dnd.endSnooze", params=kwargs) @@ -3421,7 +3624,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3433,7 +3636,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return await self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3445,7 +3648,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3460,11 +3663,35 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return await self.api_call("emoji.list", http_verb="GET", params=kwargs) + async def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return await self.api_call("entity.presentDetails", json=kwargs) + async def files_comments_delete( self, *, @@ -3473,7 +3700,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return await self.api_call("files.comments.delete", params=kwargs) @@ -3485,7 +3712,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return await self.api_call("files.delete", params=kwargs) @@ -3501,7 +3728,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3529,7 +3756,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3557,7 +3784,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3573,7 +3800,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3598,7 +3825,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3637,7 +3864,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3672,7 +3899,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3686,7 +3913,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3704,7 +3931,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return await self.api_call("files.revokePublicURL", params=kwargs) @@ -3716,7 +3943,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return await self.api_call("files.sharedPublicURL", params=kwargs) @@ -3735,7 +3962,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3788,12 +4015,12 @@

          Classes

          ) -> AsyncSlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3879,7 +4106,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3902,7 +4129,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3925,7 +4152,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return await self.api_call("functions.completeSuccess", params=kwargs) @@ -3938,7 +4165,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return await self.api_call("functions.completeError", params=kwargs) @@ -3946,7 +4173,7 @@

          Classes

          # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def groups_archive( @@ -4127,7 +4354,7 @@

          Classes

          # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def im_close( @@ -4203,7 +4430,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4215,7 +4442,7 @@

          Classes

          # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def mpim_close( @@ -4302,7 +4529,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4328,7 +4555,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4348,7 +4575,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return await self.api_call("oauth.v2.exchange", params=kwargs) @@ -4364,7 +4591,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4385,7 +4612,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return await self.api_call("openid.connect.userInfo", params=kwargs) @@ -4397,7 +4624,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.add", params=kwargs) @@ -4409,7 +4636,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return await self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4422,7 +4649,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.remove", params=kwargs) @@ -4436,7 +4663,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return await self.api_call("reactions.add", params=kwargs) @@ -4452,7 +4679,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4478,7 +4705,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4504,7 +4731,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4528,7 +4755,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4549,7 +4776,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.complete", params=kwargs) @@ -4562,7 +4789,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.delete", params=kwargs) @@ -4575,7 +4802,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4587,7 +4814,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return await self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4600,7 +4827,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return await self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4618,7 +4845,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4646,7 +4873,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4674,7 +4901,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4703,7 +4930,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4719,134 +4946,377 @@

          Classes

          ) return await self.api_call("search.messages", http_verb="GET", params=kwargs) - async def stars_add( + async def slackLists_access_delete( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> AsyncSlackResponse: - """Adds a star to an item. - https://api.slack.com/methods/stars.add + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete """ - kwargs.update( - { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, - } - ) - return await self.api_call("stars.add", params=kwargs) + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.access.delete", json=kwargs) - async def stars_list( + async def slackLists_access_set( self, *, - count: Optional[int] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, - page: Optional[int] = None, - team_id: Optional[str] = None, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> AsyncSlackResponse: - """Lists stars for a user. - https://api.slack.com/methods/stars.list + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set """ - kwargs.update( - { - "count": count, - "cursor": cursor, - "limit": limit, - "page": page, - "team_id": team_id, - } - ) - return await self.api_call("stars.list", http_verb="GET", params=kwargs) + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.access.set", json=kwargs) - async def stars_remove( + async def slackLists_create( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, **kwargs, ) -> AsyncSlackResponse: - """Removes a star from an item. - https://api.slack.com/methods/stars.remove + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create """ kwargs.update( { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, } ) - return await self.api_call("stars.remove", params=kwargs) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.create", json=kwargs) - async def team_accessLogs( + async def slackLists_download_get( self, *, - before: Optional[Union[int, str]] = None, - count: Optional[Union[int, str]] = None, - page: Optional[Union[int, str]] = None, - team_id: Optional[str] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, + list_id: str, + job_id: str, **kwargs, ) -> AsyncSlackResponse: - """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get """ kwargs.update( { - "before": before, - "count": count, - "page": page, - "team_id": team_id, - "cursor": cursor, - "limit": limit, + "list_id": list_id, + "job_id": job_id, } ) - return await self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.download.get", json=kwargs) - async def team_billableInfo( + async def slackLists_download_start( self, *, - team_id: Optional[str] = None, - user: Optional[str] = None, + list_id: str, + include_archived: Optional[bool] = None, **kwargs, ) -> AsyncSlackResponse: - """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start """ - kwargs.update({"team_id": team_id, "user": user}) - return await self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.download.start", json=kwargs) - async def team_billing_info( + async def slackLists_items_create( self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, **kwargs, ) -> AsyncSlackResponse: - """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create """ - return await self.api_call("team.billing.info", params=kwargs) + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.create", json=kwargs) - async def team_externalTeams_disconnect( + async def slackLists_items_delete( self, *, - target_team: str, + list_id: str, + id: str, **kwargs, ) -> AsyncSlackResponse: - """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete """ kwargs.update( { - "target_team": target_team, + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.delete", json=kwargs) + + async def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> AsyncSlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + async def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.info", json=kwargs) + + async def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.list", json=kwargs) + + async def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> AsyncSlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.update", json=kwargs) + + async def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.update", json=kwargs) + + async def stars_add( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Adds a star to an item. + https://docs.slack.dev/reference/methods/stars.add + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return await self.api_call("stars.add", params=kwargs) + + async def stars_list( + self, + *, + count: Optional[int] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + page: Optional[int] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Lists stars for a user. + https://docs.slack.dev/reference/methods/stars.list + """ + kwargs.update( + { + "count": count, + "cursor": cursor, + "limit": limit, + "page": page, + "team_id": team_id, + } + ) + return await self.api_call("stars.list", http_verb="GET", params=kwargs) + + async def stars_remove( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Removes a star from an item. + https://docs.slack.dev/reference/methods/stars.remove + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return await self.api_call("stars.remove", params=kwargs) + + async def team_accessLogs( + self, + *, + before: Optional[Union[int, str]] = None, + count: Optional[Union[int, str]] = None, + page: Optional[Union[int, str]] = None, + team_id: Optional[str] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Gets the access logs for the current team. + https://docs.slack.dev/reference/methods/team.accessLogs + """ + kwargs.update( + { + "before": before, + "count": count, + "page": page, + "team_id": team_id, + "cursor": cursor, + "limit": limit, + } + ) + return await self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + + async def team_billableInfo( + self, + *, + team_id: Optional[str] = None, + user: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Gets billable users information for the current team. + https://docs.slack.dev/reference/methods/team.billableInfo + """ + kwargs.update({"team_id": team_id, "user": user}) + return await self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + + async def team_billing_info( + self, + **kwargs, + ) -> AsyncSlackResponse: + """Reads a workspace's billing plan information. + https://docs.slack.dev/reference/methods/team.billing.info + """ + return await self.api_call("team.billing.info", params=kwargs) + + async def team_externalTeams_disconnect( + self, + *, + target_team: str, + **kwargs, + ) -> AsyncSlackResponse: + """Disconnects an external organization. + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect + """ + kwargs.update( + { + "target_team": target_team, } ) return await self.api_call("team.externalTeams.disconnect", params=kwargs) @@ -4864,7 +5334,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4895,7 +5365,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return await self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4913,7 +5383,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4935,7 +5405,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return await self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4945,7 +5415,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return await self.api_call("team.preferences.list", params=kwargs) @@ -4961,7 +5431,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -4987,7 +5457,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.disable", params=kwargs) @@ -5001,7 +5471,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.enable", params=kwargs) @@ -5016,7 +5486,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5041,7 +5511,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5068,7 +5538,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5089,7 +5559,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5116,7 +5586,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5138,7 +5608,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return await self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5149,7 +5619,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return await self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5159,7 +5629,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return await self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5171,7 +5641,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return await self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5186,7 +5656,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5205,7 +5675,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return await self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5220,7 +5690,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return await self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5232,7 +5702,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return await self.api_call("users.setPresence", params=kwargs) @@ -5243,7 +5713,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return await self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5256,7 +5726,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return await self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5271,7 +5741,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5294,8 +5764,8 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5318,9 +5788,9 @@

          Classes

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5343,9 +5813,9 @@

          Classes

          """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5372,8 +5842,8 @@

          Classes

          ) -> AsyncSlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5384,6 +5854,72 @@

          Classes

          # NOTE: Intentionally using json for the "view" parameter return await self.api_call("views.publish", json=kwargs) + async def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.add", params=kwargs) + + async def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return await self.api_call("workflows.featured.list", params=kwargs) + + async def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.remove", params=kwargs) + + async def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.set", params=kwargs) + async def workflows_stepCompleted( self, *, @@ -5392,7 +5928,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5409,7 +5945,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5430,7 +5966,7 @@

          Classes

          **kwargs, ) -> AsyncSlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5442,7 +5978,7 @@

          Classes

          return await self.api_call("workflows.updateStep", json=kwargs)

          A WebClient allows apps to communicate with the Slack Platform's Web API.

          -

          https://api.slack.com/methods

          +

          https://docs.slack.dev/reference/methods

          The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

          This client handles constructing and sending HTTP requests to Slack @@ -5522,7 +6058,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5532,7 +6068,7 @@

          Methods

          return await self.api_call("admin.analytics.getFile", params=kwargs)

          Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

          +https://docs.slack.dev/reference/methods/admin.analytics.getFile

          async def admin_apps_activities_list(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          component_id:Β strΒ |Β NoneΒ =Β None,
          component_type:Β strΒ |Β NoneΒ =Β None,
          log_event_type:Β strΒ |Β NoneΒ =Β None,
          max_date_created:Β intΒ |Β NoneΒ =Β None,
          min_date_created:Β intΒ |Β NoneΒ =Β None,
          min_log_level:Β strΒ |Β NoneΒ =Β None,
          sort_direction:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          trace_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5561,7 +6097,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5583,7 +6119,7 @@

          Methods

          return await self.api_call("admin.apps.activities.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.apps.activities.list

          async def admin_apps_approve(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          request_id:Β strΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5606,7 +6142,7 @@

          Methods

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5627,7 +6163,7 @@

          Methods

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

          +https://docs.slack.dev/reference/methods/admin.apps.approve

          async def admin_apps_approved_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5647,7 +6183,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -5660,7 +6196,7 @@

          Methods

          return await self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

          List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

          +https://docs.slack.dev/reference/methods/admin.apps.approved.list

          async def admin_apps_clearResolution(self,
          *,
          app_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5679,7 +6215,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -5691,7 +6227,7 @@

          Methods

          return await self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

          async def admin_apps_config_lookup(self, *, app_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -5708,7 +6244,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -5717,7 +6253,7 @@

          Methods

          return await self.api_call("admin.apps.config.lookup", params=kwargs)

          Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

          +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

          async def admin_apps_config_set(self,
          *,
          app_id:Β str,
          domain_restrictions:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          workflow_auth_strategy:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5736,7 +6272,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -5749,7 +6285,7 @@

          Methods

          return await self.api_call("admin.apps.config.set", params=kwargs)

          Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

          +https://docs.slack.dev/reference/methods/admin.apps.config.set

          async def admin_apps_requests_cancel(self,
          *,
          request_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5768,7 +6304,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -5780,7 +6316,7 @@

          Methods

          return await self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

          List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

          +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

          async def admin_apps_requests_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5799,7 +6335,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -5811,7 +6347,7 @@

          Methods

          return await self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

          List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

          +https://docs.slack.dev/reference/methods/admin.apps.requests.list

          async def admin_apps_restrict(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          request_id:Β strΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5834,7 +6370,7 @@

          Methods

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -5855,7 +6391,7 @@

          Methods

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

          +https://docs.slack.dev/reference/methods/admin.apps.restrict

          async def admin_apps_restricted_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5875,7 +6411,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -5888,7 +6424,7 @@

          Methods

          return await self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

          List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

          +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

          async def admin_apps_uninstall(self,
          *,
          app_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5908,7 +6444,7 @@

          Methods

          ) -> AsyncSlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -5922,7 +6458,7 @@

          Methods

          Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

          +https://docs.slack.dev/reference/methods/admin.apps.uninstall

          async def admin_auth_policy_assignEntities(self,
          *,
          entity_ids:Β strΒ |Β Sequence[str],
          policy_name:Β str,
          entity_type:Β str,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5941,7 +6477,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -5952,7 +6488,7 @@

          Methods

          return await self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

          Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

          async def admin_auth_policy_getEntities(self,
          *,
          policy_name:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          entity_type:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -5972,7 +6508,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -5984,7 +6520,7 @@

          Methods

          return await self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

          Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

          async def admin_auth_policy_removeEntities(self,
          *,
          entity_ids:Β strΒ |Β Sequence[str],
          policy_name:Β str,
          entity_type:Β str,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6003,7 +6539,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6014,7 +6550,7 @@

          Methods

          return await self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

          Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

          async def admin_barriers_create(self,
          *,
          barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
          primary_usergroup_id:Β str,
          restricted_subjects:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6033,7 +6569,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6047,7 +6583,7 @@

          Methods

          return await self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.barriers.create

          async def admin_barriers_delete(self, *, barrier_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6064,13 +6600,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return await self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

          Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

          +https://docs.slack.dev/reference/methods/admin.barriers.delete

          async def admin_barriers_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -6088,7 +6624,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6098,7 +6634,7 @@

          Methods

          return await self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

          Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

          +https://docs.slack.dev/reference/methods/admin.barriers.list

          async def admin_barriers_update(self,
          *,
          barrier_id:Β str,
          barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
          primary_usergroup_id:Β str,
          restricted_subjects:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6118,7 +6654,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6132,7 +6668,7 @@

          Methods

          return await self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

          Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

          +https://docs.slack.dev/reference/methods/admin.barriers.update

          async def admin_conversations_archive(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6149,13 +6685,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.archive", params=kwargs)

          Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

          +https://docs.slack.dev/reference/methods/admin.conversations.archive

          async def admin_conversations_bulkArchive(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -6172,13 +6708,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return await self.api_call("admin.conversations.bulkArchive", params=kwargs)

          Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

          +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

          async def admin_conversations_bulkDelete(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -6219,7 +6755,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6230,7 +6766,7 @@

          Methods

          return await self.api_call("admin.conversations.bulkMove", params=kwargs)

          Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

          +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

          async def admin_conversations_convertToPrivate(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6247,13 +6783,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPrivate", params=kwargs)

          Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

          +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

          async def admin_conversations_convertToPublic(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6270,13 +6806,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPublic", params=kwargs)

          Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

          +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

          async def admin_conversations_create(self,
          *,
          is_private:Β bool,
          name:Β str,
          description:Β strΒ |Β NoneΒ =Β None,
          org_wide:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6297,7 +6833,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6311,7 +6847,34 @@

          Methods

          return await self.api_call("admin.conversations.create", params=kwargs)

          Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

          +https://docs.slack.dev/reference/methods/admin.conversations.create

          + +
          +async def admin_conversations_createForObjects(self,
          *,
          object_id:Β str,
          salesforce_org_id:Β str,
          invite_object_team:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def admin_conversations_createForObjects(
          +    self,
          +    *,
          +    object_id: str,
          +    salesforce_org_id: str,
          +    invite_object_team: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Create a Salesforce channel for the corresponding object provided.
          +    https://docs.slack.dev/reference/methods/admin.conversations.createForObjects
          +    """
          +    kwargs.update(
          +        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
          +    )
          +    return await self.api_call("admin.conversations.createForObjects", params=kwargs)
          +
          +

          Create a Salesforce channel for the corresponding object provided. +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

          async def admin_conversations_delete(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6328,13 +6891,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.delete

          async def admin_conversations_disconnectShared(self,
          *,
          channel_id:Β str,
          leaving_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6352,7 +6915,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6362,7 +6925,7 @@

          Methods

          return await self.api_call("admin.conversations.disconnectShared", params=kwargs)

          Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

          +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

          async def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
          *,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6384,7 +6947,7 @@

          Methods

          """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6405,7 +6968,7 @@

          Methods

          List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

          +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

          async def admin_conversations_getConversationPrefs(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6422,13 +6985,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

          Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

          +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

          async def admin_conversations_getCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6445,13 +7008,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

          async def admin_conversations_getTeams(self,
          *,
          channel_id:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6470,7 +7033,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6482,7 +7045,7 @@

          Methods

          return await self.api_call("admin.conversations.getTeams", params=kwargs)

          Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

          +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

          async def admin_conversations_invite(self, *, channel_id:Β str, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -6500,7 +7063,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6511,34 +7074,65 @@

          Methods

          return await self.api_call("admin.conversations.invite", params=kwargs)

          Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

          +https://docs.slack.dev/reference/methods/admin.conversations.invite

          -
          -async def admin_conversations_lookup(self,
          *,
          last_message_activity_before:Β int,
          team_ids:Β strΒ |Β Sequence[str],
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          max_member_count:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +async def admin_conversations_linkObjects(self, *, channel:Β str, record_id:Β str, salesforce_org_id:Β str, **kwargs) ‑>Β AsyncSlackResponse
          Expand source code -
          async def admin_conversations_lookup(
          +
          async def admin_conversations_linkObjects(
               self,
               *,
          -    last_message_activity_before: int,
          -    team_ids: Union[str, Sequence[str]],
          -    cursor: Optional[str] = None,
          -    limit: Optional[int] = None,
          -    max_member_count: Optional[int] = None,
          +    channel: str,
          +    record_id: str,
          +    salesforce_org_id: str,
               **kwargs,
           ) -> AsyncSlackResponse:
          -    """Returns channels on the given team using the filters.
          -    https://api.slack.com/methods/admin.conversations.lookup
          +    """Link a Salesforce record to a channel.
          +    https://docs.slack.dev/reference/methods/admin.conversations.linkObjects
               """
               kwargs.update(
                   {
          -            "last_message_activity_before": last_message_activity_before,
          -            "cursor": cursor,
          -            "limit": limit,
          +            "channel": channel,
          +            "record_id": record_id,
          +            "salesforce_org_id": salesforce_org_id,
          +        }
          +    )
          +    return await self.api_call("admin.conversations.linkObjects", params=kwargs)
          +
          + +
          +
          +async def admin_conversations_lookup(self,
          *,
          last_message_activity_before:Β int,
          team_ids:Β strΒ |Β Sequence[str],
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          max_member_count:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def admin_conversations_lookup(
          +    self,
          +    *,
          +    last_message_activity_before: int,
          +    team_ids: Union[str, Sequence[str]],
          +    cursor: Optional[str] = None,
          +    limit: Optional[int] = None,
          +    max_member_count: Optional[int] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Returns channels on the given team using the filters.
          +    https://docs.slack.dev/reference/methods/admin.conversations.lookup
          +    """
          +    kwargs.update(
          +        {
          +            "last_message_activity_before": last_message_activity_before,
          +            "cursor": cursor,
          +            "limit": limit,
                       "max_member_count": max_member_count,
                   }
               )
          @@ -6549,7 +7143,7 @@ 

          Methods

          return await self.api_call("admin.conversations.lookup", params=kwargs)

          Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

          +https://docs.slack.dev/reference/methods/admin.conversations.lookup

          async def admin_conversations_removeCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6566,13 +7160,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

          async def admin_conversations_rename(self, *, channel_id:Β str, name:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6590,13 +7184,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return await self.api_call("admin.conversations.rename", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.rename

          async def admin_conversations_restrictAccess_addGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -6615,7 +7209,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6631,7 +7225,7 @@

          Methods

          )

          Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

          async def admin_conversations_restrictAccess_listGroups(self, *, channel_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -6649,7 +7243,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -6664,7 +7258,7 @@

          Methods

          )
          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

          async def admin_conversations_restrictAccess_removeGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6683,7 +7277,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -6699,7 +7293,7 @@

          Methods

          )

          Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

          async def admin_conversations_setConversationPrefs(self, *, channel_id:Β str, prefs:Β strΒ |Β Dict[str,Β str], **kwargs) ‑>Β AsyncSlackResponse @@ -6765,7 +7359,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -6775,7 +7369,7 @@

          Methods

          return await self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

          Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

          +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

          async def admin_conversations_setCustomRetention(self, *, channel_id:Β str, duration_days:Β int, **kwargs) ‑>Β AsyncSlackResponse @@ -6793,13 +7387,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return await self.api_call("admin.conversations.setCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

          async def admin_conversations_setTeams(self,
          *,
          channel_id:Β str,
          org_channel:Β boolΒ |Β NoneΒ =Β None,
          target_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6819,7 +7413,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -6835,7 +7429,7 @@

          Methods

          return await self.api_call("admin.conversations.setTeams", params=kwargs)

          Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

          +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

          async def admin_conversations_unarchive(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6852,13 +7446,42 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.unarchive", params=kwargs)

          Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

          +https://docs.slack.dev/reference/methods/admin.conversations.archive

          + +
          +async def admin_conversations_unlinkObjects(self, *, channel:Β str, new_name:Β str, **kwargs) ‑>Β AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def admin_conversations_unlinkObjects(
          +    self,
          +    *,
          +    channel: str,
          +    new_name: str,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Unlink a Salesforce record from a channel.
          +    https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "new_name": new_name,
          +        }
          +    )
          +    return await self.api_call("admin.conversations.unlinkObjects", params=kwargs)
          +
          +
          async def admin_emoji_add(self, *, name:Β str, url:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6876,13 +7499,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return await self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.add

          async def admin_emoji_addAlias(self, *, alias_for:Β str, name:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6900,13 +7523,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return await self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

          async def admin_emoji_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -6924,13 +7547,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

          List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

          +https://docs.slack.dev/reference/methods/admin.emoji.list

          async def admin_emoji_remove(self, *, name:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6947,13 +7570,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return await self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

          Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

          +https://docs.slack.dev/reference/methods/admin.emoji.remove

          async def admin_emoji_rename(self, *, name:Β str, new_name:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -6971,13 +7594,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return await self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.rename

          async def admin_functions_list(self,
          *,
          app_ids:Β strΒ |Β Sequence[str],
          team_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -6997,7 +7620,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7013,7 +7636,7 @@

          Methods

          return await self.api_call("admin.functions.list", params=kwargs)

          Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

          +https://docs.slack.dev/reference/methods/admin.functions.list

          async def admin_functions_permissions_lookup(self, *, function_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -7031,7 +7654,7 @@

          Methods

          ) -> AsyncSlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7041,7 +7664,7 @@

          Methods

          Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

          +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

          async def admin_functions_permissions_set(self,
          *,
          function_id:Β str,
          visibility:Β str,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7061,7 +7684,7 @@

          Methods

          ) -> AsyncSlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7078,7 +7701,7 @@

          Methods

          Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

          +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

          async def admin_inviteRequests_approve(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -7096,13 +7719,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.approve", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

          async def admin_inviteRequests_approved_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7121,7 +7744,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7133,7 +7756,7 @@

          Methods

          return await self.api_call("admin.inviteRequests.approved.list", params=kwargs)

          List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

          async def admin_inviteRequests_denied_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7152,7 +7775,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7164,7 +7787,7 @@

          Methods

          return await self.api_call("admin.inviteRequests.denied.list", params=kwargs)

          List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

          async def admin_inviteRequests_deny(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -7182,13 +7805,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.deny", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

          async def admin_inviteRequests_list(self, **kwargs) ‑>Β AsyncSlackResponse @@ -7224,7 +7847,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7238,7 +7861,7 @@

          Methods

          return await self.api_call("admin.roles.addAssignments", params=kwargs)

          Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

          async def admin_roles_listAssignments(self,
          *,
          role_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          entity_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7260,7 +7883,7 @@

          Methods

          ) -> AsyncSlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7275,7 +7898,7 @@

          Methods

          Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

          async def admin_roles_removeAssignments(self,
          *,
          role_id:Β str,
          entity_ids:Β strΒ |Β Sequence[str],
          user_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7294,7 +7917,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7308,7 +7931,7 @@

          Methods

          return await self.api_call("admin.roles.removeAssignments", params=kwargs)

          Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

          async def admin_teams_admins_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -7327,7 +7950,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7339,7 +7962,7 @@

          Methods

          return await self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

          List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

          async def admin_teams_create(self,
          *,
          team_domain:Β str,
          team_name:Β str,
          team_description:Β strΒ |Β NoneΒ =Β None,
          team_discoverability:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7359,7 +7982,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7372,7 +7995,7 @@

          Methods

          return await self.api_call("admin.teams.create", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.create

          async def admin_teams_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -7390,13 +8013,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.list", params=kwargs)

          List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

          +https://docs.slack.dev/reference/methods/admin.teams.list

          async def admin_teams_owners_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -7415,13 +8038,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

          List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

          +https://docs.slack.dev/reference/methods/admin.teams.owners.list

          async def admin_teams_settings_info(self, *, team_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -7438,13 +8061,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return await self.api_call("admin.teams.settings.info", params=kwargs)

          Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

          +https://docs.slack.dev/reference/methods/admin.teams.settings.info

          async def admin_teams_settings_setDefaultChannels(self, *, team_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -7462,7 +8085,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7472,7 +8095,7 @@

          Methods

          return await self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

          async def admin_teams_settings_setDescription(self, *, team_id:Β str, description:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -7490,13 +8113,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return await self.api_call("admin.teams.settings.setDescription", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

          async def admin_teams_settings_setDiscoverability(self, *, team_id:Β str, discoverability:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -7514,13 +8137,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return await self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

          async def admin_teams_settings_setIcon(self, *, team_id:Β str, image_url:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -7538,13 +8161,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return await self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

          async def admin_teams_settings_setName(self, *, team_id:Β str, name:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -7562,13 +8185,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return await self.api_call("admin.teams.settings.setName", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

          async def admin_usergroups_addChannels(self,
          *,
          channel_ids:Β strΒ |Β Sequence[str],
          usergroup_id:Β str,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7587,7 +8210,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7597,7 +8220,7 @@

          Methods

          return await self.api_call("admin.usergroups.addChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

          async def admin_usergroups_addTeams(self,
          *,
          usergroup_id:Β str,
          team_ids:Β strΒ |Β Sequence[str],
          auto_provision:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7616,7 +8239,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7626,7 +8249,7 @@

          Methods

          return await self.api_call("admin.usergroups.addTeams", params=kwargs)

          Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

          +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

          async def admin_usergroups_listChannels(self,
          *,
          usergroup_id:Β str,
          include_num_members:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7645,7 +8268,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -7657,7 +8280,7 @@

          Methods

          return await self.api_call("admin.usergroups.listChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

          async def admin_usergroups_removeChannels(self, *, usergroup_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -7675,7 +8298,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7685,7 +8308,7 @@

          Methods

          return await self.api_call("admin.usergroups.removeChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

          async def admin_users_assign(self,
          *,
          team_id:Β str,
          user_id:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          is_restricted:Β boolΒ |Β NoneΒ =Β None,
          is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7706,7 +8329,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -7723,7 +8346,7 @@

          Methods

          return await self.api_call("admin.users.assign", params=kwargs)

          Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

          +https://docs.slack.dev/reference/methods/admin.users.assign

          async def admin_users_invite(self,
          *,
          team_id:Β str,
          email:Β str,
          channel_ids:Β strΒ |Β Sequence[str],
          custom_message:Β strΒ |Β NoneΒ =Β None,
          email_password_policy_enabled:Β boolΒ |Β NoneΒ =Β None,
          guest_expiration_ts:Β strΒ |Β floatΒ |Β NoneΒ =Β None,
          is_restricted:Β boolΒ |Β NoneΒ =Β None,
          is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
          real_name:Β strΒ |Β NoneΒ =Β None,
          resend:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7749,7 +8372,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -7771,10 +8394,10 @@

          Methods

          return await self.api_call("admin.users.invite", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.users.invite

          -async def admin_users_list(self,
          *,
          team_id:Β str,
          include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
          is_active:Β boolΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +async def admin_users_list(self,
          *,
          team_id:Β strΒ |Β NoneΒ =Β None,
          include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
          is_active:Β boolΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7784,7 +8407,7 @@

          Methods

          async def admin_users_list(
               self,
               *,
          -    team_id: str,
          +    team_id: Optional[str] = None,
               include_deactivated_user_workspaces: Optional[bool] = None,
               is_active: Optional[bool] = None,
               cursor: Optional[str] = None,
          @@ -7792,7 +8415,7 @@ 

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -7806,7 +8429,7 @@

          Methods

          return await self.api_call("admin.users.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.users.list

          async def admin_users_remove(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -7824,13 +8447,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.remove", params=kwargs)

          Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

          +https://docs.slack.dev/reference/methods/admin.users.remove

          async def admin_users_session_clearSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -7848,7 +8471,7 @@

          Methods

          ) -> AsyncSlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7858,7 +8481,7 @@

          Methods

          Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

          async def admin_users_session_getSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -7876,7 +8499,7 @@

          Methods

          ) -> AsyncSlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7886,7 +8509,7 @@

          Methods

          Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

          async def admin_users_session_invalidate(self, *, session_id:Β str, team_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -7904,13 +8527,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return await self.api_call("admin.users.session.invalidate", params=kwargs)

          Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

          +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

          async def admin_users_session_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7930,7 +8553,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -7943,7 +8566,7 @@

          Methods

          return await self.api_call("admin.users.session.list", params=kwargs)

          Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

          +https://docs.slack.dev/reference/methods/admin.users.session.list

          async def admin_users_session_reset(self,
          *,
          user_id:Β str,
          mobile_only:Β boolΒ |Β NoneΒ =Β None,
          web_only:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7962,7 +8585,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -7974,7 +8597,7 @@

          Methods

          return await self.api_call("admin.users.session.reset", params=kwargs)

          Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

          +https://docs.slack.dev/reference/methods/admin.users.session.reset

          async def admin_users_session_resetBulk(self,
          *,
          user_ids:Β strΒ |Β Sequence[str],
          mobile_only:Β boolΒ |Β NoneΒ =Β None,
          web_only:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -7993,7 +8616,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8008,7 +8631,7 @@

          Methods

          return await self.api_call("admin.users.session.resetBulk", params=kwargs)

          Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

          +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

          async def admin_users_session_setSettings(self,
          *,
          user_ids:Β strΒ |Β Sequence[str],
          desktop_app_browser_quit:Β boolΒ |Β NoneΒ =Β None,
          duration:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8028,7 +8651,7 @@

          Methods

          ) -> AsyncSlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8044,7 +8667,7 @@

          Methods

          Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

          async def admin_users_setAdmin(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8062,13 +8685,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setAdmin", params=kwargs)

          Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

          +https://docs.slack.dev/reference/methods/admin.users.setAdmin

          async def admin_users_setExpiration(self, *, expiration_ts:Β int, user_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -8087,13 +8710,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setExpiration", params=kwargs)

          Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

          +https://docs.slack.dev/reference/methods/admin.users.setExpiration

          async def admin_users_setOwner(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8111,13 +8734,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setOwner", params=kwargs)

          Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

          +https://docs.slack.dev/reference/methods/admin.users.setOwner

          async def admin_users_setRegular(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8135,13 +8758,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setRegular", params=kwargs)

          Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

          +https://docs.slack.dev/reference/methods/admin.users.setRegular

          async def admin_users_unsupportedVersions_export(self,
          *,
          date_end_of_support:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          date_sessions_started:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8160,7 +8783,7 @@

          Methods

          ) -> AsyncSlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8172,7 +8795,7 @@

          Methods

          Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

          +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

          async def admin_workflows_collaborators_add(self,
          *,
          collaborator_ids:Β strΒ |Β Sequence[str],
          workflow_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8190,7 +8813,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8203,7 +8826,7 @@

          Methods

          return await self.api_call("admin.workflows.collaborators.add", params=kwargs)

          Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

          +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

          async def admin_workflows_collaborators_remove(self,
          *,
          collaborator_ids:Β strΒ |Β Sequence[str],
          workflow_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8221,7 +8844,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8234,7 +8857,7 @@

          Methods

          return await self.api_call("admin.workflows.collaborators.remove", params=kwargs)

          Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

          +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

          async def admin_workflows_permissions_lookup(self,
          *,
          workflow_ids:Β strΒ |Β Sequence[str],
          max_workflow_triggers:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8252,7 +8875,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8266,7 +8889,7 @@

          Methods

          return await self.api_call("admin.workflows.permissions.lookup", params=kwargs)

          Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

          +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

          async def admin_workflows_unpublish(self, *, workflow_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β AsyncSlackResponse @@ -8332,7 +8955,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8341,7 +8964,7 @@

          Methods

          return await self.api_call("admin.workflows.unpublish", params=kwargs)

          Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

          +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

          async def api_test(self, *, error:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -8358,13 +8981,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return await self.api_call("api.test", params=kwargs)

          Checks API calling code. -https://api.slack.com/methods/api.test

          +https://docs.slack.dev/reference/methods/api.test

          async def apps_connections_open(self, *, app_token:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8382,14 +9005,14 @@

          Methods

          ) -> AsyncSlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return await self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

          Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

          +https://docs.slack.dev/reference/methods/apps.connections.open

          async def apps_event_authorizations_list(self,
          *,
          event_context:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8409,14 +9032,14 @@

          Methods

          ) -> AsyncSlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return await self.api_call("apps.event.authorizations.list", params=kwargs)

          Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

          +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

          async def apps_manifest_create(self, *, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β AsyncSlackResponse @@ -8433,7 +9056,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8442,7 +9065,7 @@

          Methods

          return await self.api_call("apps.manifest.create", params=kwargs)

          Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

          +https://docs.slack.dev/reference/methods/apps.manifest.create

          async def apps_manifest_delete(self, *, app_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8459,13 +9082,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.delete", params=kwargs)

          Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

          +https://docs.slack.dev/reference/methods/apps.manifest.delete

          async def apps_manifest_export(self, *, app_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8482,13 +9105,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.export", params=kwargs)

          Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

          +https://docs.slack.dev/reference/methods/apps.manifest.export

          async def apps_manifest_update(self, *, app_id:Β str, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β AsyncSlackResponse @@ -8506,7 +9129,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8516,7 +9139,7 @@

          Methods

          return await self.api_call("apps.manifest.update", params=kwargs)

          Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

          +https://docs.slack.dev/reference/methods/apps.manifest.update

          async def apps_manifest_validate(self, *, manifest:Β strΒ |Β Dict[str,Β Any], app_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -8534,7 +9157,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8544,7 +9167,7 @@

          Methods

          return await self.api_call("apps.manifest.validate", params=kwargs)
          +https://docs.slack.dev/reference/methods/apps.manifest.validate

          async def apps_uninstall(self, *, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8562,16 +9185,16 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return await self.api_call("apps.uninstall", params=kwargs)

          Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

          +https://docs.slack.dev/reference/methods/apps.uninstall

          -async def assistant_threads_setStatus(self, *, channel_id:Β str, thread_ts:Β str, status:Β str, **kwargs) ‑>Β AsyncSlackResponse +async def assistant_threads_setStatus(self,
          *,
          channel_id:Β str,
          thread_ts:Β str,
          status:Β str,
          loading_messages:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8584,16 +9207,20 @@

          Methods

          channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return await self.api_call("assistant.threads.setStatus", params=kwargs)
          + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("assistant.threads.setStatus", json=kwargs)
          - +
          async def assistant_threads_setSuggestedPrompts(self,
          *,
          channel_id:Β str,
          thread_ts:Β str,
          title:Β strΒ |Β NoneΒ =Β None,
          prompts:Β List[Dict[str,Β str]],
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8612,16 +9239,16 @@

          Methods

          prompts: List[Dict[str, str]], **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: kwargs.update({"title": title}) return await self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
          - +

          Set suggested prompts for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

          async def assistant_threads_setTitle(self, *, channel_id:Β str, thread_ts:Β str, title:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8639,14 +9266,14 @@

          Methods

          title: str, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return await self.api_call("assistant.threads.setTitle", params=kwargs)
          - +

          Set the title for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

          async def auth_revoke(self, *, test:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -8663,13 +9290,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return await self.api_call("auth.revoke", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/auth.revoke

          async def auth_teams_list(self,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          include_icon:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8687,13 +9314,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return await self.api_call("auth.teams.list", params=kwargs)

          List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

          +https://docs.slack.dev/reference/methods/auth.teams.list

          async def auth_test(self, **kwargs) ‑>Β AsyncSlackResponse @@ -8708,12 +9335,12 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return await self.api_call("auth.test", params=kwargs)

          Checks authentication & identity. -https://api.slack.com/methods/auth.test

          +https://docs.slack.dev/reference/methods/auth.test

          async def bookmarks_add(self,
          *,
          channel_id:Β str,
          title:Β str,
          type:Β str,
          emoji:Β strΒ |Β NoneΒ =Β None,
          entity_id:Β strΒ |Β NoneΒ =Β None,
          link:Β strΒ |Β NoneΒ =Β None,
          parent_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8736,7 +9363,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -8752,7 +9379,7 @@

          Methods

          return await self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/bookmarks.add

          async def bookmarks_edit(self,
          *,
          bookmark_id:Β str,
          channel_id:Β str,
          emoji:Β strΒ |Β NoneΒ =Β None,
          link:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8773,7 +9400,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -8787,7 +9414,7 @@

          Methods

          return await self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/bookmarks.edit

          async def bookmarks_list(self, *, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8804,13 +9431,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return await self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

          List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

          +https://docs.slack.dev/reference/methods/bookmarks.list

          async def bookmarks_remove(self, *, bookmark_id:Β str, channel_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8828,13 +9455,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return await self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

          Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

          +https://docs.slack.dev/reference/methods/bookmarks.remove

          async def bots_info(self, *, bot:Β strΒ |Β NoneΒ =Β None, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -8852,13 +9479,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return await self.api_call("bots.info", http_verb="GET", params=kwargs)

          Gets information about a bot user. -https://api.slack.com/methods/bots.info

          +https://docs.slack.dev/reference/methods/bots.info

          async def calls_add(self,
          *,
          external_unique_id:Β str,
          join_url:Β str,
          created_by:Β strΒ |Β NoneΒ =Β None,
          date_start:Β intΒ |Β NoneΒ =Β None,
          desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
          external_display_id:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          users:Β strΒ |Β Sequence[Dict[str,Β str]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -8882,7 +9509,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -8902,7 +9529,7 @@

          Methods

          return await self.api_call("calls.add", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/calls.add

          async def calls_end(self, *, id:Β str, duration:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -8920,13 +9547,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return await self.api_call("calls.end", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/calls.end

          async def calls_info(self, *, id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -8943,13 +9570,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return await self.api_call("calls.info", http_verb="POST", params=kwargs)

          Returns information about a Call. -https://api.slack.com/methods/calls.info

          +https://docs.slack.dev/reference/methods/calls.info

          async def calls_participants_add(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β AsyncSlackResponse @@ -8967,14 +9594,14 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return await self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

          Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

          +https://docs.slack.dev/reference/methods/calls.participants.add

          async def calls_participants_remove(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β AsyncSlackResponse @@ -8992,14 +9619,14 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return await self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

          Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

          +https://docs.slack.dev/reference/methods/calls.participants.remove

          async def calls_update(self,
          *,
          id:Β str,
          desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
          join_url:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9019,7 +9646,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9032,7 +9659,7 @@

          Methods

          return await self.api_call("calls.update", http_verb="POST", params=kwargs)

          Updates information about a Call. -https://api.slack.com/methods/calls.update

          +https://docs.slack.dev/reference/methods/calls.update

          async def canvases_access_delete(self,
          *,
          canvas_id:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9051,7 +9678,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9067,7 +9694,7 @@

          Methods

          return await self.api_call("canvases.access.delete", params=kwargs)

          Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

          +https://docs.slack.dev/reference/methods/canvases.access.delete

          async def canvases_access_set(self,
          *,
          canvas_id:Β str,
          access_level:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9087,7 +9714,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9104,7 +9731,7 @@

          Methods

          return await self.api_call("canvases.access.set", params=kwargs)

          Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

          +https://docs.slack.dev/reference/methods/canvases.access.set

          async def canvases_create(self, *, title:Β strΒ |Β NoneΒ =Β None, document_content:Β Dict[str,Β str], **kwargs) ‑>Β AsyncSlackResponse @@ -9122,13 +9749,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return await self.api_call("canvases.create", json=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.create

          async def canvases_delete(self, *, canvas_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -9145,13 +9772,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return await self.api_call("canvases.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.delete

          async def canvases_edit(self, *, canvas_id:Β str, changes:Β Sequence[Dict[str,Β Any]], **kwargs) ‑>Β AsyncSlackResponse @@ -9169,13 +9796,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return await self.api_call("canvases.edit", json=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.edit

          async def canvases_sections_lookup(self, *, canvas_id:Β str, criteria:Β Dict[str,Β Any], **kwargs) ‑>Β AsyncSlackResponse @@ -9193,13 +9820,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return await self.api_call("canvases.sections.lookup", params=kwargs)

          Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

          +https://docs.slack.dev/reference/methods/canvases.sections.lookup

          async def channels_archive(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -9516,6 +10143,38 @@

          Methods

          Unarchives a channel.

          +
          +async def chat_appendStream(self, *, channel:Β str, ts:Β str, markdown_text:Β str, **kwargs) ‑>Β AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def chat_appendStream(
          +    self,
          +    *,
          +    channel: str,
          +    ts: str,
          +    markdown_text: str,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Appends text to an existing streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.appendStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "ts": ts,
          +            "markdown_text": markdown_text,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("chat.appendStream", json=kwargs)
          +
          +

          Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

          +
          async def chat_delete(self, *, channel:Β str, ts:Β str, as_user:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse
          @@ -9533,13 +10192,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return await self.api_call("chat.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.delete

          async def chat_deleteScheduledMessage(self,
          *,
          channel:Β str,
          scheduled_message_id:Β str,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9558,7 +10217,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9570,7 +10229,7 @@

          Methods

          return await self.api_call("chat.deleteScheduledMessage", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

          async def chat_meMessage(self, *, channel:Β str, text:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -9612,16 +10271,16 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return await self.api_call("chat.meMessage", params=kwargs)

          Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

          +https://docs.slack.dev/reference/methods/chat.meMessage

          -async def chat_postEphemeral(self,
          *,
          channel:Β str,
          user:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +async def chat_postEphemeral(self,
          *,
          channel:Β str,
          user:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9643,10 +10302,11 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -9662,19 +10322,20 @@

          Methods

          "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postEphemeral", json=kwargs)

          Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

          +https://docs.slack.dev/reference/methods/chat.postEphemeral

          -async def chat_postMessage(self,
          *,
          channel:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          container_id:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          mrkdwn:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +async def chat_postMessage(self,
          *,
          channel:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          container_id:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          mrkdwn:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9700,11 +10361,12 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -9725,19 +10387,20 @@

          Methods

          "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postMessage", json=kwargs)

          Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

          +https://docs.slack.dev/reference/methods/chat.postMessage

          -async def chat_scheduleMessage(self,
          *,
          channel:Β str,
          post_at:Β strΒ |Β int,
          text:Β str,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +async def chat_scheduleMessage(self,
          *,
          channel:Β str,
          post_at:Β strΒ |Β int,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9749,7 +10412,7 @@

          Methods

          *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9760,10 +10423,11 @@

          Methods

          unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -9780,16 +10444,17 @@

          Methods

          "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs)
          +https://docs.slack.dev/reference/methods/chat.scheduleMessage

          async def chat_scheduledMessages_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9811,7 +10476,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -9826,10 +10491,199 @@

          Methods

          return await self.api_call("chat.scheduledMessages.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

          + +
          +async def chat_startStream(self,
          *,
          channel:Β str,
          thread_ts:Β str,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          recipient_team_id:Β strΒ |Β NoneΒ =Β None,
          recipient_user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def chat_startStream(
          +    self,
          +    *,
          +    channel: str,
          +    thread_ts: str,
          +    markdown_text: Optional[str] = None,
          +    recipient_team_id: Optional[str] = None,
          +    recipient_user_id: Optional[str] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Starts a new streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.startStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "thread_ts": thread_ts,
          +            "markdown_text": markdown_text,
          +            "recipient_team_id": recipient_team_id,
          +            "recipient_user_id": recipient_user_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("chat.startStream", json=kwargs)
          +
          +

          Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

          +
          +
          +async def chat_stopStream(self,
          *,
          channel:Β str,
          ts:Β str,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def chat_stopStream(
          +    self,
          +    *,
          +    channel: str,
          +    ts: str,
          +    markdown_text: Optional[str] = None,
          +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
          +    metadata: Optional[Union[Dict, Metadata]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Stops a streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.stopStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "ts": ts,
          +            "markdown_text": markdown_text,
          +            "blocks": blocks,
          +            "metadata": metadata,
          +        }
          +    )
          +    _parse_web_class_objects(kwargs)
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("chat.stopStream", json=kwargs)
          +
          + +
          +
          +async def chat_stream(self,
          *,
          buffer_size:Β intΒ =Β 256,
          channel:Β str,
          thread_ts:Β str,
          recipient_team_id:Β strΒ |Β NoneΒ =Β None,
          recipient_user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncChatStream
          +
          +
          +
          + +Expand source code + +
          async def chat_stream(
          +    self,
          +    *,
          +    buffer_size: int = 256,
          +    channel: str,
          +    thread_ts: str,
          +    recipient_team_id: Optional[str] = None,
          +    recipient_user_id: Optional[str] = None,
          +    **kwargs,
          +) -> AsyncChatStream:
          +    """Stream markdown text into a conversation.
          +
          +    This method starts a new chat stream in a conversation that can be appended to. After appending an entire message,
          +    the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.
          +
          +    The following methods are used:
          +
          +    - chat.startStream: Starts a new streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.startStream).
          +    - chat.appendStream: Appends text to an existing streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.appendStream).
          +    - chat.stopStream: Stops a streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.stopStream).
          +
          +    Args:
          +        buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this
          +          value decreases the number of method calls made for the same amount of text, which is useful to avoid rate
          +          limits. Default: 256.
          +        channel: An encoded ID that represents a channel, private group, or DM.
          +        thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
          +          request.
          +        recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
          +          streaming to channels.
          +        recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +        **kwargs: Additional arguments passed to the underlying API calls.
          +
          +    Returns:
          +        ChatStream instance for managing the stream
          +
          +    Example:
          +        ```python
          +        streamer = await client.chat_stream(
          +            channel="C0123456789",
          +            thread_ts="1700000001.123456",
          +            recipient_team_id="T0123456789",
          +            recipient_user_id="U0123456789",
          +        )
          +        await streamer.append(markdown_text="**hello wo")
          +        await streamer.append(markdown_text="rld!**")
          +        await streamer.stop()
          +        ```
          +    """
          +    return AsyncChatStream(
          +        self,
          +        logger=self._logger,
          +        channel=channel,
          +        thread_ts=thread_ts,
          +        recipient_team_id=recipient_team_id,
          +        recipient_user_id=recipient_user_id,
          +        buffer_size=buffer_size,
          +        **kwargs,
          +    )
          +
          +

          Stream markdown text into a conversation.

          +

          This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, +the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.

          +

          The following methods are used:

          +
            +
          • chat.startStream: Starts a new streaming conversation. +Reference.
          • +
          • chat.appendStream: Appends text to an existing streaming conversation. +Reference.
          • +
          • chat.stopStream: Stops a streaming conversation. +Reference.
          • +
          +

          Args

          +
          +
          buffer_size
          +
          The length of markdown_text to buffer in-memory before calling a stream method. Increasing this +value decreases the number of method calls made for the same amount of text, which is useful to avoid rate +limits. Default: 256.
          +
          channel
          +
          An encoded ID that represents a channel, private group, or DM.
          +
          thread_ts
          +
          Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
          +
          recipient_team_id
          +
          The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
          +
          recipient_user_id
          +
          The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Returns

          +

          ChatStream instance for managing the stream

          +

          Example

          +
          streamer = await client.chat_stream(
          +    channel="C0123456789",
          +    thread_ts="1700000001.123456",
          +    recipient_team_id="T0123456789",
          +    recipient_user_id="U0123456789",
          +)
          +await streamer.append(markdown_text="**hello wo")
          +await streamer.append(markdown_text="rld!**")
          +await streamer.stop()
          +
          -async def chat_unfurl(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          ts:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          unfurl_id:Β strΒ |Β NoneΒ =Β None,
          unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
          user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          user_auth_message:Β strΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +async def chat_unfurl(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          ts:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          unfurl_id:Β strΒ |Β NoneΒ =Β None,
          unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
          user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          user_auth_message:Β strΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9844,6 +10698,7 @@

          Methods

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -9851,7 +10706,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -9860,6 +10715,7 @@

          Methods

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -9872,10 +10728,10 @@

          Methods

          return await self.api_call("chat.unfurl", json=kwargs)

          Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

          +https://docs.slack.dev/reference/methods/chat.unfurl

          -async def chat_update(self,
          *,
          channel:Β str,
          ts:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +async def chat_update(self,
          *,
          channel:Β str,
          ts:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9896,10 +10752,11 @@

          Methods

          parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -9913,6 +10770,7 @@

          Methods

          "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -9921,12 +10779,12 @@

          Methods

          kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs)

          Updates a message in a channel. -https://api.slack.com/methods/chat.update

          +https://docs.slack.dev/reference/methods/chat.update

          async def conversations_acceptSharedInvite(self,
          *,
          channel_name:Β str,
          channel_id:Β strΒ |Β NoneΒ =Β None,
          invite_id:Β strΒ |Β NoneΒ =Β None,
          free_trial_accepted:Β boolΒ |Β NoneΒ =Β None,
          is_private:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -9948,7 +10806,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -9965,7 +10823,7 @@

          Methods

          return await self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

          Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

          async def conversations_approveSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -9983,13 +10841,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

          Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

          async def conversations_archive(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10006,13 +10864,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.archive", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.archive

          async def conversations_canvases_create(self, *, channel_id:Β str, document_content:Β Dict[str,Β str], **kwargs) ‑>Β AsyncSlackResponse @@ -10030,13 +10888,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return await self.api_call("conversations.canvases.create", json=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.canvases.create

          async def conversations_close(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10053,13 +10911,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return await self.api_call("conversations.close", params=kwargs)

          Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

          +https://docs.slack.dev/reference/methods/conversations.close

          async def conversations_create(self,
          *,
          name:Β str,
          is_private:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10078,13 +10936,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return await self.api_call("conversations.create", params=kwargs)

          Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

          +https://docs.slack.dev/reference/methods/conversations.create

          async def conversations_declineSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -10102,13 +10960,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

          Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

          async def conversations_externalInvitePermissions_set(self, *, action:Β str, channel:Β str, target_team:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10122,7 +10980,7 @@

          Methods

          self, *, action: str, channel: str, target_team: str, **kwargs ) -> AsyncSlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10134,7 +10992,7 @@

          Methods

          return await self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

          Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

          +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

          async def conversations_history(self,
          *,
          channel:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          inclusive:Β boolΒ |Β NoneΒ =Β None,
          include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10157,7 +11015,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10173,7 +11031,7 @@

          Methods

          return await self.api_call("conversations.history", http_verb="GET", params=kwargs)

          Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

          +https://docs.slack.dev/reference/methods/conversations.history

          async def conversations_info(self,
          *,
          channel:Β str,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          include_num_members:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10192,7 +11050,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10204,7 +11062,7 @@

          Methods

          return await self.api_call("conversations.info", http_verb="GET", params=kwargs)

          Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

          +https://docs.slack.dev/reference/methods/conversations.info

          async def conversations_invite(self,
          *,
          channel:Β str,
          users:Β strΒ |Β Sequence[str],
          force:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10223,7 +11081,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10238,7 +11096,7 @@

          Methods

          return await self.api_call("conversations.invite", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.invite

          async def conversations_inviteShared(self,
          *,
          channel:Β str,
          emails:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10257,7 +11115,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10273,7 +11131,7 @@

          Methods

          return await self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

          Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

          +https://docs.slack.dev/reference/methods/conversations.inviteShared

          async def conversations_join(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10290,13 +11148,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return await self.api_call("conversations.join", params=kwargs)

          Joins an existing conversation. -https://api.slack.com/methods/conversations.join

          +https://docs.slack.dev/reference/methods/conversations.join

          async def conversations_kick(self, *, channel:Β str, user:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10314,13 +11172,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return await self.api_call("conversations.kick", params=kwargs)

          Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

          +https://docs.slack.dev/reference/methods/conversations.kick

          async def conversations_leave(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10337,13 +11195,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return await self.api_call("conversations.leave", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.leave

          async def conversations_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          exclude_archived:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10364,7 +11222,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10381,7 +11239,7 @@

          Methods

          return await self.api_call("conversations.list", http_verb="GET", params=kwargs)

          Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

          +https://docs.slack.dev/reference/methods/conversations.list

          async def conversations_listConnectInvites(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10401,14 +11259,14 @@

          Methods

          ) -> AsyncSlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return await self.api_call("conversations.listConnectInvites", params=kwargs)

          List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

          +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

          async def conversations_mark(self, *, channel:Β str, ts:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10426,13 +11284,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return await self.api_call("conversations.mark", params=kwargs)

          Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

          +https://docs.slack.dev/reference/methods/conversations.mark

          async def conversations_members(self, *, channel:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -10451,13 +11309,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return await self.api_call("conversations.members", http_verb="GET", params=kwargs)

          Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

          +https://docs.slack.dev/reference/methods/conversations.members

          async def conversations_open(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          return_im:Β boolΒ |Β NoneΒ =Β None,
          users:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10476,7 +11334,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10488,7 +11346,7 @@

          Methods

          return await self.api_call("conversations.open", params=kwargs)

          Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

          +https://docs.slack.dev/reference/methods/conversations.open

          async def conversations_rename(self, *, channel:Β str, name:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10506,13 +11364,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return await self.api_call("conversations.rename", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.rename

          async def conversations_replies(self,
          *,
          channel:Β str,
          ts:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          inclusive:Β boolΒ |Β NoneΒ =Β None,
          include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10536,7 +11394,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10553,7 +11411,7 @@

          Methods

          return await self.api_call("conversations.replies", http_verb="GET", params=kwargs)

          Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

          +https://docs.slack.dev/reference/methods/conversations.replies

          async def conversations_requestSharedInvite_approve(self,
          *,
          invite_id:Β str,
          channel_id:Β strΒ |Β NoneΒ =Β None,
          is_external_limited:Β strΒ |Β NoneΒ =Β None,
          message:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10573,7 +11431,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10587,7 +11445,7 @@

          Methods

          return await self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

          Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

          async def conversations_requestSharedInvite_deny(self, *, invite_id:Β str, message:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -10605,13 +11463,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return await self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

          Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

          async def conversations_requestSharedInvite_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          include_approved:Β boolΒ |Β NoneΒ =Β None,
          include_denied:Β boolΒ |Β NoneΒ =Β None,
          include_expired:Β boolΒ |Β NoneΒ =Β None,
          invite_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10634,7 +11492,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -10654,7 +11512,7 @@

          Methods

          return await self.api_call("conversations.requestSharedInvite.list", params=kwargs)

          Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

          async def conversations_setPurpose(self, *, channel:Β str, purpose:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10672,13 +11530,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return await self.api_call("conversations.setPurpose", params=kwargs)

          Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

          +https://docs.slack.dev/reference/methods/conversations.setPurpose

          async def conversations_setTopic(self, *, channel:Β str, topic:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10696,13 +11554,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return await self.api_call("conversations.setTopic", params=kwargs)

          Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

          +https://docs.slack.dev/reference/methods/conversations.setTopic

          async def conversations_unarchive(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10719,13 +11577,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.unarchive", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.unarchive

          async def dialog_open(self, *, dialog:Β Dict[str,Β Any], trigger_id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10743,7 +11601,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -10751,7 +11609,7 @@

          Methods

          return await self.api_call("dialog.open", json=kwargs)

          Open a dialog with a user. -https://api.slack.com/methods/dialog.open

          +https://docs.slack.dev/reference/methods/dialog.open

          async def dnd_endDnd(self, **kwargs) ‑>Β AsyncSlackResponse @@ -10766,12 +11624,12 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return await self.api_call("dnd.endDnd", params=kwargs)

          Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

          +https://docs.slack.dev/reference/methods/dnd.endDnd

          async def dnd_endSnooze(self, **kwargs) ‑>Β AsyncSlackResponse @@ -10786,12 +11644,12 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return await self.api_call("dnd.endSnooze", params=kwargs)

          Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

          +https://docs.slack.dev/reference/methods/dnd.endSnooze

          async def dnd_info(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -10809,13 +11667,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("dnd.info", http_verb="GET", params=kwargs)

          Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

          +https://docs.slack.dev/reference/methods/dnd.info

          async def dnd_setSnooze(self, *, num_minutes:Β strΒ |Β int, **kwargs) ‑>Β AsyncSlackResponse @@ -10832,13 +11690,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return await self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

          Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

          +https://docs.slack.dev/reference/methods/dnd.setSnooze

          async def dnd_teamInfo(self, users:Β strΒ |Β Sequence[str], team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -10855,7 +11713,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -10865,7 +11723,7 @@

          Methods

          return await self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

          Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

          +https://docs.slack.dev/reference/methods/dnd.teamInfo

          async def emoji_list(self, include_categories:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -10881,13 +11739,48 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return await self.api_call("emoji.list", http_verb="GET", params=kwargs)

          Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

          +https://docs.slack.dev/reference/methods/emoji.list

          + +
          +async def entity_presentDetails(self,
          trigger_id:Β str,
          metadata:Β DictΒ |Β EntityMetadataΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          error:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def entity_presentDetails(
          +    self,
          +    trigger_id: str,
          +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
          +    user_auth_required: Optional[bool] = None,
          +    user_auth_url: Optional[str] = None,
          +    error: Optional[Dict[str, Any]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Provides entity details for the flexpane.
          +    https://docs.slack.dev/reference/methods/entity.presentDetails/
          +    """
          +    kwargs.update({"trigger_id": trigger_id})
          +    if metadata is not None:
          +        kwargs.update({"metadata": metadata})
          +    if user_auth_required is not None:
          +        kwargs.update({"user_auth_required": user_auth_required})
          +    if user_auth_url is not None:
          +        kwargs.update({"user_auth_url": user_auth_url})
          +    if error is not None:
          +        kwargs.update({"error": error})
          +    _parse_web_class_objects(kwargs)
          +    return await self.api_call("entity.presentDetails", json=kwargs)
          +
          +

          Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

          async def files_comments_delete(self, *, file:Β str, id:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10905,13 +11798,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return await self.api_call("files.comments.delete", params=kwargs)

          Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

          +https://docs.slack.dev/reference/methods/files.comments.delete

          async def files_completeUploadExternal(self,
          *,
          files:Β List[Dict[str,Β str]],
          channel_id:Β strΒ |Β NoneΒ =Β None,
          channels:Β List[str]Β |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10932,7 +11825,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -10948,7 +11841,7 @@

          Methods

          return await self.api_call("files.completeUploadExternal", params=kwargs)

          Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

          +https://docs.slack.dev/reference/methods/files.completeUploadExternal

          async def files_delete(self, *, file:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -10965,13 +11858,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return await self.api_call("files.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/files.delete

          async def files_getUploadURLExternal(self,
          *,
          filename:Β str,
          length:Β int,
          alt_txt:Β strΒ |Β NoneΒ =Β None,
          snippet_type:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -10991,7 +11884,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11004,7 +11897,7 @@

          Methods

          return await self.api_call("files.getUploadURLExternal", params=kwargs)

          Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

          +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

          async def files_info(self,
          *,
          file:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -11025,7 +11918,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11039,7 +11932,7 @@

          Methods

          return await self.api_call("files.info", http_verb="GET", params=kwargs)

          Gets information about a team file. -https://api.slack.com/methods/files.info

          +https://docs.slack.dev/reference/methods/files.info

          async def files_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          count:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          show_files_hidden_by_limit:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          ts_from:Β strΒ |Β NoneΒ =Β None,
          ts_to:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -11064,7 +11957,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11085,7 +11978,7 @@

          Methods

          return await self.api_call("files.list", http_verb="GET", params=kwargs)

          Lists & filters team files. -https://api.slack.com/methods/files.list

          +https://docs.slack.dev/reference/methods/files.list

          async def files_remote_add(self,
          *,
          external_id:Β str,
          external_url:Β str,
          title:Β str,
          filetype:Β strΒ |Β NoneΒ =Β None,
          indexable_file_contents:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          preview_image:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -11107,7 +12000,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11134,7 +12027,7 @@

          Methods

          )

          Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

          +https://docs.slack.dev/reference/methods/files.remote.add

          async def files_remote_info(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -11152,13 +12045,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.info", http_verb="GET", params=kwargs)

          Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

          +https://docs.slack.dev/reference/methods/files.remote.info

          async def files_remote_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          ts_from:Β strΒ |Β NoneΒ =Β None,
          ts_to:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -11179,7 +12072,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11193,7 +12086,7 @@

          Methods

          return await self.api_call("files.remote.list", http_verb="GET", params=kwargs)

          Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

          +https://docs.slack.dev/reference/methods/files.remote.list

          async def files_remote_remove(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -11211,13 +12104,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/files.remote.remove

          async def files_remote_share(self,
          *,
          channels:Β strΒ |Β Sequence[str],
          external_id:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -11236,7 +12129,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11248,7 +12141,7 @@

          Methods

          return await self.api_call("files.remote.share", http_verb="GET", params=kwargs)

          Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

          +https://docs.slack.dev/reference/methods/files.remote.share

          async def files_remote_update(self,
          *,
          external_id:Β strΒ |Β NoneΒ =Β None,
          external_url:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          filetype:Β strΒ |Β NoneΒ =Β None,
          indexable_file_contents:Β strΒ |Β NoneΒ =Β None,
          preview_image:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -11271,7 +12164,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11299,7 +12192,7 @@

          Methods

          )

          Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

          +https://docs.slack.dev/reference/methods/files.remote.update

          async def files_revokePublicURL(self, *, file:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -11316,13 +12209,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return await self.api_call("files.revokePublicURL", params=kwargs)

          Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

          +https://docs.slack.dev/reference/methods/files.revokePublicURL

          async def files_sharedPublicURL(self, *, file:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -11339,13 +12232,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return await self.api_call("files.sharedPublicURL", params=kwargs)

          Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

          +https://docs.slack.dev/reference/methods/files.sharedPublicURL

          async def files_upload(self,
          *,
          file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
          filename:Β strΒ |Β NoneΒ =Β None,
          filetype:Β strΒ |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -11369,7 +12262,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11402,7 +12295,7 @@

          Methods

          return await self.api_call("files.upload", data=kwargs)

          Uploads or creates a file. -https://api.slack.com/methods/files.upload

          +https://docs.slack.dev/reference/methods/files.upload

          async def files_upload_v2(self,
          *,
          filename:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β os.PathLikeΒ |Β NoneΒ =Β None,
          content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          alt_txt:Β strΒ |Β NoneΒ =Β None,
          snippet_type:Β strΒ |Β NoneΒ =Β None,
          file_uploads:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          channel:Β strΒ |Β NoneΒ =Β None,
          channels:Β List[str]Β |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          request_file_info:Β boolΒ =Β True,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -11433,12 +12326,12 @@

          Methods

          ) -> AsyncSlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11517,14 +12410,14 @@

          Methods

          This wrapper method provides an easy way to upload files using the following endpoints:

          @@ -11544,13 +12437,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return await self.api_call("functions.completeError", params=kwargs)

          Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

          +https://docs.slack.dev/reference/methods/functions.completeError

          async def functions_completeSuccess(self, *, function_execution_id:Β str, outputs:Β Dict[str,Β Any], **kwargs) ‑>Β AsyncSlackResponse @@ -11568,13 +12461,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return await self.api_call("functions.completeSuccess", params=kwargs)

          Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

          +https://docs.slack.dev/reference/methods/functions.completeSuccess

          async def groups_archive(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -12050,7 +12943,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12060,7 +12953,7 @@

          Methods

          return await self.api_call("migration.exchange", http_verb="GET", params=kwargs)

          For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

          +https://docs.slack.dev/reference/methods/migration.exchange

          async def mpim_close(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -12207,7 +13100,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12219,7 +13112,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

          +https://docs.slack.dev/reference/methods/oauth.access

          async def oauth_v2_access(self,
          *,
          client_id:Β str,
          client_secret:Β str,
          code:Β strΒ |Β NoneΒ =Β None,
          redirect_uri:Β strΒ |Β NoneΒ =Β None,
          grant_type:Β strΒ |Β NoneΒ =Β None,
          refresh_token:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12245,7 +13138,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12262,7 +13155,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

          +https://docs.slack.dev/reference/methods/oauth.v2.access

          async def oauth_v2_exchange(self, *, token:Β str, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -12281,13 +13174,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return await self.api_call("oauth.v2.exchange", params=kwargs)

          Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

          +https://docs.slack.dev/reference/methods/oauth.v2.exchange

          async def openid_connect_token(self,
          client_id:Β str,
          client_secret:Β str,
          code:Β strΒ |Β NoneΒ =Β None,
          redirect_uri:Β strΒ |Β NoneΒ =Β None,
          grant_type:Β strΒ |Β NoneΒ =Β None,
          refresh_token:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12308,7 +13201,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12325,7 +13218,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

          +https://docs.slack.dev/reference/methods/openid.connect.token

          async def openid_connect_userInfo(self, **kwargs) ‑>Β AsyncSlackResponse @@ -12340,12 +13233,12 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return await self.api_call("openid.connect.userInfo", params=kwargs)

          Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

          +https://docs.slack.dev/reference/methods/openid.connect.userInfo

          async def pins_add(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -12363,13 +13256,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.add", params=kwargs)

          Pins an item to a channel. -https://api.slack.com/methods/pins.add

          +https://docs.slack.dev/reference/methods/pins.add

          async def pins_list(self, *, channel:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -12386,13 +13279,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return await self.api_call("pins.list", http_verb="GET", params=kwargs)

          Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

          +https://docs.slack.dev/reference/methods/pins.list

          async def pins_remove(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -12410,13 +13303,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.remove", params=kwargs)

          Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

          +https://docs.slack.dev/reference/methods/pins.remove

          async def reactions_add(self, *, channel:Β str, name:Β str, timestamp:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -12435,13 +13328,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return await self.api_call("reactions.add", params=kwargs)

          Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

          +https://docs.slack.dev/reference/methods/reactions.add

          async def reactions_get(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          full:Β boolΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12462,7 +13355,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12476,7 +13369,7 @@

          Methods

          return await self.api_call("reactions.get", http_verb="GET", params=kwargs)

          Gets reactions for an item. -https://api.slack.com/methods/reactions.get

          +https://docs.slack.dev/reference/methods/reactions.get

          async def reactions_list(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          full:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12499,7 +13392,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12515,7 +13408,7 @@

          Methods

          return await self.api_call("reactions.list", http_verb="GET", params=kwargs)

          Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

          +https://docs.slack.dev/reference/methods/reactions.list

          async def reactions_remove(self,
          *,
          name:Β str,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12536,7 +13429,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12550,7 +13443,7 @@

          Methods

          return await self.api_call("reactions.remove", params=kwargs)

          Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

          +https://docs.slack.dev/reference/methods/reactions.remove

          async def reminders_add(self,
          *,
          text:Β str,
          time:Β str,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          recurrence:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12571,7 +13464,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12585,7 +13478,7 @@

          Methods

          return await self.api_call("reminders.add", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.add

          async def reminders_complete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -12603,13 +13496,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.complete", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.complete

          async def reminders_delete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -12627,13 +13520,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.delete

          async def reminders_info(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -12651,13 +13544,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.info", http_verb="GET", params=kwargs)

          Gets information about a reminder. -https://api.slack.com/methods/reminders.info

          +https://docs.slack.dev/reference/methods/reminders.info

          async def reminders_list(self, *, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -12674,13 +13567,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return await self.api_call("reminders.list", http_verb="GET", params=kwargs)

          Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

          +https://docs.slack.dev/reference/methods/reminders.list

          async def rtm_connect(self,
          *,
          batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
          presence_sub:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12698,13 +13591,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return await self.api_call("rtm.connect", http_verb="GET", params=kwargs)

          Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

          +https://docs.slack.dev/reference/methods/rtm.connect

          async def rtm_start(self,
          *,
          batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          mpim_aware:Β boolΒ |Β NoneΒ =Β None,
          no_latest:Β boolΒ |Β NoneΒ =Β None,
          no_unreads:Β boolΒ |Β NoneΒ =Β None,
          presence_sub:Β boolΒ |Β NoneΒ =Β None,
          simple_latest:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12727,7 +13620,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -12743,7 +13636,7 @@

          Methods

          return await self.api_call("rtm.start", http_verb="GET", params=kwargs)

          Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

          +https://docs.slack.dev/reference/methods/rtm.start

          async def search_all(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12766,7 +13659,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -12782,7 +13675,7 @@

          Methods

          return await self.api_call("search.all", http_verb="GET", params=kwargs)

          Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

          +https://docs.slack.dev/reference/methods/search.all

          async def search_files(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12805,7 +13698,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -12821,7 +13714,7 @@

          Methods

          return await self.api_call("search.files", http_verb="GET", params=kwargs)

          Searches for files matching a query. -https://api.slack.com/methods/search.files

          +https://docs.slack.dev/reference/methods/search.files

          async def search_messages(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12845,7 +13738,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -12862,7 +13755,382 @@

          Methods

          return await self.api_call("search.messages", http_verb="GET", params=kwargs)

          Searches for messages matching a query. -https://api.slack.com/methods/search.messages

          +https://docs.slack.dev/reference/methods/search.messages

          + +
          +async def slackLists_access_delete(self,
          *,
          list_id:Β str,
          channel_ids:Β List[str]Β |Β NoneΒ =Β None,
          user_ids:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_access_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Revoke access to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.delete
          +    """
          +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.access.delete", json=kwargs)
          +
          +

          Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

          +
          +
          +async def slackLists_access_set(self,
          *,
          list_id:Β str,
          access_level:Β str,
          channel_ids:Β List[str]Β |Β NoneΒ =Β None,
          user_ids:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_access_set(
          +    self,
          +    *,
          +    list_id: str,
          +    access_level: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Set the access level to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.set
          +    """
          +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.access.set", json=kwargs)
          +
          +

          Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

          +
          +
          +async def slackLists_create(self,
          *,
          name:Β str,
          description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
          schema:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          copy_from_list_id:Β strΒ |Β NoneΒ =Β None,
          include_copied_list_records:Β boolΒ |Β NoneΒ =Β None,
          todo_mode:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_create(
          +    self,
          +    *,
          +    name: str,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    schema: Optional[List[Dict[str, Any]]] = None,
          +    copy_from_list_id: Optional[str] = None,
          +    include_copied_list_records: Optional[bool] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Creates a List.
          +    https://docs.slack.dev/reference/methods/slackLists.create
          +    """
          +    kwargs.update(
          +        {
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "schema": schema,
          +            "copy_from_list_id": copy_from_list_id,
          +            "include_copied_list_records": include_copied_list_records,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.create", json=kwargs)
          +
          + +
          +
          +async def slackLists_download_get(self, *, list_id:Β str, job_id:Β str, **kwargs) ‑>Β AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_download_get(
          +    self,
          +    *,
          +    list_id: str,
          +    job_id: str,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Retrieve List download URL from an export job to download List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.get
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "job_id": job_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.download.get", json=kwargs)
          +
          +

          Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

          +
          +
          +async def slackLists_download_start(self, *, list_id:Β str, include_archived:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_download_start(
          +    self,
          +    *,
          +    list_id: str,
          +    include_archived: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Initiate a job to export List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.start
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "include_archived": include_archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.download.start", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_create(self,
          *,
          list_id:Β str,
          duplicated_item_id:Β strΒ |Β NoneΒ =Β None,
          parent_item_id:Β strΒ |Β NoneΒ =Β None,
          initial_fields:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_items_create(
          +    self,
          +    *,
          +    list_id: str,
          +    duplicated_item_id: Optional[str] = None,
          +    parent_item_id: Optional[str] = None,
          +    initial_fields: Optional[List[Dict[str, Any]]] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Add a new item to an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.create
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "duplicated_item_id": duplicated_item_id,
          +            "parent_item_id": parent_item_id,
          +            "initial_fields": initial_fields,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.create", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_delete(self, *, list_id:Β str, id:Β str, **kwargs) ‑>Β AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_items_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Deletes an item from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.delete
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.delete", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_deleteMultiple(self, *, list_id:Β str, ids:Β List[str], **kwargs) ‑>Β AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_items_deleteMultiple(
          +    self,
          +    *,
          +    list_id: str,
          +    ids: List[str],
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Deletes multiple items from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "ids": ids,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.deleteMultiple", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_info(self, *, list_id:Β str, id:Β str, include_is_subscribed:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_items_info(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    include_is_subscribed: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Get a row from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.info
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +            "include_is_subscribed": include_is_subscribed,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.info", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_list(self,
          *,
          list_id:Β str,
          limit:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          archived:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_items_list(
          +    self,
          +    *,
          +    list_id: str,
          +    limit: Optional[int] = None,
          +    cursor: Optional[str] = None,
          +    archived: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Get records from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.list
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "limit": limit,
          +            "cursor": cursor,
          +            "archived": archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.list", json=kwargs)
          +
          + +
          +
          +async def slackLists_items_update(self, *, list_id:Β str, cells:Β List[Dict[str,Β Any]], **kwargs) ‑>Β AsyncSlackResponse +
          +
          +
          + +Expand source code + +
          async def slackLists_items_update(
          +    self,
          +    *,
          +    list_id: str,
          +    cells: List[Dict[str, Any]],
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Updates cells in a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.update
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "cells": cells,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.items.update", json=kwargs)
          +
          + +
          +
          +async def slackLists_update(self,
          *,
          id:Β str,
          name:Β strΒ |Β NoneΒ =Β None,
          description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
          todo_mode:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          +
          +
          +
          + +Expand source code + +
          async def slackLists_update(
          +    self,
          +    *,
          +    id: str,
          +    name: Optional[str] = None,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Update a List.
          +    https://docs.slack.dev/reference/methods/slackLists.update
          +    """
          +    kwargs.update(
          +        {
          +            "id": id,
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return await self.api_call("slackLists.update", json=kwargs)
          +
          +
          async def stars_add(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12882,7 +14150,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -12895,7 +14163,7 @@

          Methods

          return await self.api_call("stars.add", params=kwargs)
          +https://docs.slack.dev/reference/methods/stars.add

          async def stars_list(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12916,7 +14184,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -12930,7 +14198,7 @@

          Methods

          return await self.api_call("stars.list", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/stars.list

          async def stars_remove(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12950,7 +14218,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -12963,7 +14231,7 @@

          Methods

          return await self.api_call("stars.remove", params=kwargs)

          Removes a star from an item. -https://api.slack.com/methods/stars.remove

          +https://docs.slack.dev/reference/methods/stars.remove

          async def team_accessLogs(self,
          *,
          before:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -12985,7 +14253,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13000,7 +14268,7 @@

          Methods

          return await self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

          Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

          +https://docs.slack.dev/reference/methods/team.accessLogs

          async def team_billableInfo(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -13018,13 +14286,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

          Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

          +https://docs.slack.dev/reference/methods/team.billableInfo

          async def team_billing_info(self, **kwargs) ‑>Β AsyncSlackResponse @@ -13039,12 +14307,12 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return await self.api_call("team.billing.info", params=kwargs)

          Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

          +https://docs.slack.dev/reference/methods/team.billing.info

          async def team_externalTeams_disconnect(self, *, target_team:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -13061,7 +14329,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13071,7 +14339,7 @@

          Methods

          return await self.api_call("team.externalTeams.disconnect", params=kwargs)
          +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

          async def team_externalTeams_list(self,
          *,
          connection_status_filter:Β strΒ |Β NoneΒ =Β None,
          slack_connect_pref_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
          sort_direction:Β strΒ |Β NoneΒ =Β None,
          sort_field:Β strΒ |Β NoneΒ =Β None,
          workspace_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13094,7 +14362,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13118,7 +14386,7 @@

          Methods

          return await self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

          Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

          +https://docs.slack.dev/reference/methods/team.externalTeams.list

          async def team_info(self, *, team:Β strΒ |Β NoneΒ =Β None, domain:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -13136,13 +14404,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return await self.api_call("team.info", http_verb="GET", params=kwargs)

          Gets information about the current team. -https://api.slack.com/methods/team.info

          +https://docs.slack.dev/reference/methods/team.info

          async def team_integrationLogs(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          change_type:Β strΒ |Β NoneΒ =Β None,
          count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          service_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13165,7 +14433,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13181,7 +14449,7 @@

          Methods

          return await self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

          Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

          +https://docs.slack.dev/reference/methods/team.integrationLogs

          async def team_preferences_list(self, **kwargs) ‑>Β AsyncSlackResponse @@ -13196,12 +14464,12 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return await self.api_call("team.preferences.list", params=kwargs)

          Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

          +https://docs.slack.dev/reference/methods/team.preferences.list

          async def team_profile_get(self, *, visibility:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -13218,13 +14486,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return await self.api_call("team.profile.get", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/team.profile.get

          async def tooling_tokens_rotate(self, *, refresh_token:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -13241,13 +14509,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return await self.api_call("tooling.tokens.rotate", params=kwargs)

          Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

          +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

          async def usergroups_create(self,
          *,
          name:Β str,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          description:Β strΒ |Β NoneΒ =Β None,
          handle:Β strΒ |Β NoneΒ =Β None,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13269,7 +14537,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13287,7 +14555,7 @@

          Methods

          return await self.api_call("usergroups.create", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.create

          async def usergroups_disable(self,
          *,
          usergroup:Β str,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13306,13 +14574,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.disable", params=kwargs)

          Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

          +https://docs.slack.dev/reference/methods/usergroups.disable

          async def usergroups_enable(self,
          *,
          usergroup:Β str,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13331,13 +14599,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.enable", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.enable

          async def usergroups_list(self,
          *,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          include_disabled:Β boolΒ |Β NoneΒ =Β None,
          include_users:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13357,7 +14625,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13370,7 +14638,7 @@

          Methods

          return await self.api_call("usergroups.list", http_verb="GET", params=kwargs)

          List all User Groups for a team -https://api.slack.com/methods/usergroups.list

          +https://docs.slack.dev/reference/methods/usergroups.list

          async def usergroups_update(self,
          *,
          usergroup:Β str,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          description:Β strΒ |Β NoneΒ =Β None,
          handle:Β strΒ |Β NoneΒ =Β None,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          name:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13393,7 +14661,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13412,7 +14680,7 @@

          Methods

          return await self.api_call("usergroups.update", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.update

          async def usergroups_users_list(self,
          *,
          usergroup:Β str,
          include_disabled:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13431,7 +14699,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13443,7 +14711,7 @@

          Methods

          return await self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.users.list

          async def usergroups_users_update(self,
          *,
          usergroup:Β str,
          users:Β strΒ |Β Sequence[str],
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13463,7 +14731,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13479,7 +14747,7 @@

          Methods

          return await self.api_call("usergroups.users.update", params=kwargs)

          Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

          +https://docs.slack.dev/reference/methods/usergroups.users.update

          async def users_conversations(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          exclude_archived:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13501,7 +14769,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13519,7 +14787,7 @@

          Methods

          return await self.api_call("users.conversations", http_verb="GET", params=kwargs)

          List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

          +https://docs.slack.dev/reference/methods/users.conversations

          async def users_deletePhoto(self, **kwargs) ‑>Β AsyncSlackResponse @@ -13534,12 +14802,12 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return await self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.deletePhoto

          async def users_discoverableContacts_lookup(self, email:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -13555,13 +14823,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return await self.api_call("users.discoverableContacts.lookup", params=kwargs)

          Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

          +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

          async def users_getPresence(self, *, user:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -13578,13 +14846,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return await self.api_call("users.getPresence", http_verb="GET", params=kwargs)

          Gets user presence information. -https://api.slack.com/methods/users.getPresence

          +https://docs.slack.dev/reference/methods/users.getPresence

          async def users_identity(self, **kwargs) ‑>Β AsyncSlackResponse @@ -13599,12 +14867,12 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return await self.api_call("users.identity", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.identity

          async def users_info(self, *, user:Β str, include_locale:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -13622,13 +14890,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return await self.api_call("users.info", http_verb="GET", params=kwargs)

          Gets information about a user. -https://api.slack.com/methods/users.info

          +https://docs.slack.dev/reference/methods/users.info

          async def users_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13648,7 +14916,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -13661,7 +14929,7 @@

          Methods

          return await self.api_call("users.list", http_verb="GET", params=kwargs)

          Lists all users in a Slack team. -https://api.slack.com/methods/users.list

          +https://docs.slack.dev/reference/methods/users.list

          async def users_lookupByEmail(self, *, email:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -13678,13 +14946,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return await self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

          Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

          +https://docs.slack.dev/reference/methods/users.lookupByEmail

          async def users_profile_get(self, *, user:Β strΒ |Β NoneΒ =Β None, include_labels:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -13702,13 +14970,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return await self.api_call("users.profile.get", http_verb="GET", params=kwargs)

          Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

          +https://docs.slack.dev/reference/methods/users.profile.get

          async def users_profile_set(self,
          *,
          name:Β strΒ |Β NoneΒ =Β None,
          value:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          profile:Β DictΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13728,7 +14996,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -13743,7 +15011,7 @@

          Methods

          return await self.api_call("users.profile.set", json=kwargs)

          Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

          +https://docs.slack.dev/reference/methods/users.profile.set

          async def users_setPhoto(self,
          *,
          image:Β strΒ |Β io.IOBase,
          crop_w:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          crop_x:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          crop_y:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13763,13 +15031,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return await self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
          +https://docs.slack.dev/reference/methods/users.setPhoto

          async def users_setPresence(self, *, presence:Β str, **kwargs) ‑>Β AsyncSlackResponse @@ -13786,13 +15054,13 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return await self.api_call("users.setPresence", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.setPresence

          async def views_open(self,
          *,
          trigger_id:Β strΒ |Β NoneΒ =Β None,
          interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
          view:Β dictΒ |Β View,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13811,8 +15079,8 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13824,8 +15092,8 @@

          Methods

          return await self.api_call("views.open", json=kwargs)
          +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

          async def views_publish(self,
          *,
          user_id:Β str,
          view:Β dictΒ |Β View,
          hash:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13845,8 +15113,8 @@

          Methods

          ) -> AsyncSlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -13859,8 +15127,8 @@

          Methods

          Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

          +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

          async def views_push(self,
          *,
          trigger_id:Β strΒ |Β NoneΒ =Β None,
          interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
          view:Β dictΒ |Β View,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13882,9 +15150,9 @@

          Methods

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13899,9 +15167,9 @@

          Methods

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

          +https://docs.slack.dev/reference/methods/views.push

          async def views_update(self,
          *,
          view:Β dictΒ |Β View,
          external_id:Β strΒ |Β NoneΒ =Β None,
          view_id:Β strΒ |Β NoneΒ =Β None,
          hash:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -13923,9 +15191,9 @@

          Methods

          """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -13945,9 +15213,119 @@

          Methods

          Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

          +https://docs.slack.dev/reference/methods/views.update

          + +
          +
          +
          + +Expand source code + +
          async def workflows_featured_add(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Add featured workflows to a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.add
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return await self.api_call("workflows.featured.add", params=kwargs)
          +
          + +
          + +
          +
          + +Expand source code + +
          async def workflows_featured_list(
          +    self,
          +    *,
          +    channel_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """List the featured workflows for specified channels.
          +    https://docs.slack.dev/reference/methods/workflows.featured.list
          +    """
          +    if isinstance(channel_ids, (list, tuple)):
          +        kwargs.update({"channel_ids": ",".join(channel_ids)})
          +    else:
          +        kwargs.update({"channel_ids": channel_ids})
          +    return await self.api_call("workflows.featured.list", params=kwargs)
          +
          +

          List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

          +
          + +
          +
          + +Expand source code + +
          async def workflows_featured_remove(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Remove featured workflows from a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.remove
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return await self.api_call("workflows.featured.remove", params=kwargs)
          +
          + +
          + +
          +
          + +Expand source code + +
          async def workflows_featured_set(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> AsyncSlackResponse:
          +    """Set featured workflows for a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.set
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return await self.api_call("workflows.featured.set", params=kwargs)
          +
          +
          async def workflows_stepCompleted(self, *, workflow_step_execute_id:Β str, outputs:Β dictΒ |Β NoneΒ =Β None, **kwargs) ‑>Β AsyncSlackResponse @@ -13965,7 +15343,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -13975,7 +15353,7 @@

          Methods

          return await self.api_call("workflows.stepCompleted", json=kwargs)

          Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

          +https://docs.slack.dev/reference/methods/workflows.stepCompleted

          async def workflows_stepFailed(self, *, workflow_step_execute_id:Β str, error:Β Dict[str,Β str], **kwargs) ‑>Β AsyncSlackResponse @@ -13993,7 +15371,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14006,7 +15384,7 @@

          Methods

          return await self.api_call("workflows.stepFailed", json=kwargs)

          Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

          +https://docs.slack.dev/reference/methods/workflows.stepFailed

          async def workflows_updateStep(self,
          *,
          workflow_step_edit_id:Β str,
          inputs:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          outputs:Β List[Dict[str,Β str]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β AsyncSlackResponse
          @@ -14025,7 +15403,7 @@

          Methods

          **kwargs, ) -> AsyncSlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14037,7 +15415,7 @@

          Methods

          return await self.api_call("workflows.updateStep", json=kwargs)

          Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

          +https://docs.slack.dev/reference/methods/workflows.updateStep

          Inherited members

          @@ -14103,6 +15481,7 @@

          admin_conversations_convertToPrivate
        • admin_conversations_convertToPublic
        • admin_conversations_create
        • +
        • admin_conversations_createForObjects
        • admin_conversations_delete
        • admin_conversations_disconnectShared
        • admin_conversations_ekm_listOriginalConnectedChannelInfo
        • @@ -14110,6 +15489,7 @@

          admin_conversations_getCustomRetention
        • admin_conversations_getTeams
        • admin_conversations_invite
        • +
        • admin_conversations_linkObjects
        • admin_conversations_lookup
        • admin_conversations_removeCustomRetention
        • admin_conversations_rename
        • @@ -14121,6 +15501,7 @@

          admin_conversations_setCustomRetention
        • admin_conversations_setTeams
        • admin_conversations_unarchive
        • +
        • admin_conversations_unlinkObjects
        • admin_emoji_add
        • admin_emoji_addAlias
        • admin_emoji_list
        • @@ -14219,6 +15600,7 @@

          channels_setPurpose
        • channels_setTopic
        • channels_unarchive
        • +
        • chat_appendStream
        • chat_delete
        • chat_deleteScheduledMessage
        • chat_getPermalink
        • @@ -14227,6 +15609,9 @@

          chat_postMessage
        • chat_scheduleMessage
        • chat_scheduledMessages_list
        • +
        • chat_startStream
        • +
        • chat_stopStream
        • +
        • chat_stream
        • chat_unfurl
        • chat_update
        • conversations_acceptSharedInvite
        • @@ -14264,6 +15649,7 @@

          dnd_setSnooze
        • dnd_teamInfo
        • emoji_list
        • +
        • entity_presentDetails
        • files_comments_delete
        • files_completeUploadExternal
        • files_delete
        • @@ -14333,6 +15719,18 @@

          search_all
        • search_files
        • search_messages
        • +
        • slackLists_access_delete
        • +
        • slackLists_access_set
        • +
        • slackLists_create
        • +
        • slackLists_download_get
        • +
        • slackLists_download_start
        • +
        • slackLists_items_create
        • +
        • slackLists_items_delete
        • +
        • slackLists_items_deleteMultiple
        • +
        • slackLists_items_info
        • +
        • slackLists_items_list
        • +
        • slackLists_items_update
        • +
        • slackLists_update
        • stars_add
        • stars_list
        • stars_remove
        • @@ -14369,6 +15767,10 @@

          views_publish
        • views_push
        • views_update
        • +
        • workflows_featured_add
        • +
        • workflows_featured_list
        • +
        • workflows_featured_remove
        • +
        • workflows_featured_set
        • workflows_stepCompleted
        • workflows_stepFailed
        • workflows_updateStep
        • @@ -14380,7 +15782,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/web/async_internal_utils.html b/docs/reference/web/async_internal_utils.html similarity index 98% rename from docs/static/api-docs/slack_sdk/web/async_internal_utils.html rename to docs/reference/web/async_internal_utils.html index bfed1696b..12eb2ba7f 100644 --- a/docs/static/api-docs/slack_sdk/web/async_internal_utils.html +++ b/docs/reference/web/async_internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.web.async_internal_utils API documentation @@ -60,7 +60,7 @@

          Module slack_sdk.web.async_internal_utils

          diff --git a/docs/static/api-docs/slack_sdk/web/async_slack_response.html b/docs/reference/web/async_slack_response.html similarity index 99% rename from docs/static/api-docs/slack_sdk/web/async_slack_response.html rename to docs/reference/web/async_slack_response.html index 5a5af6651..e081b1ab8 100644 --- a/docs/static/api-docs/slack_sdk/web/async_slack_response.html +++ b/docs/reference/web/async_slack_response.html @@ -3,7 +3,7 @@ - + slack_sdk.web.async_slack_response API documentation @@ -385,7 +385,7 @@

          diff --git a/docs/static/api-docs/slack_sdk/web/base_client.html b/docs/reference/web/base_client.html similarity index 98% rename from docs/static/api-docs/slack_sdk/web/base_client.html rename to docs/reference/web/base_client.html index 1dd140172..affbba13c 100644 --- a/docs/static/api-docs/slack_sdk/web/base_client.html +++ b/docs/reference/web/base_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.base_client API documentation @@ -633,7 +633,7 @@

          Classes

          header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the @@ -690,7 +690,7 @@

          Static methods

          header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the @@ -720,7 +720,7 @@

          Static methods

          On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash.

          -

          https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview

          +

          https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview

          Args

          signing_secret
          @@ -943,7 +943,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/reference/web/chat_stream.html b/docs/reference/web/chat_stream.html new file mode 100644 index 000000000..94d96e5eb --- /dev/null +++ b/docs/reference/web/chat_stream.html @@ -0,0 +1,506 @@ + + + + + + +slack_sdk.web.chat_stream API documentation + + + + + + + + + + + +
          +
          +
          +

          Module slack_sdk.web.chat_stream

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          Classes

          +
          +
          +class ChatStream +(client:Β WebClient,
          *,
          channel:Β str,
          logger:Β logging.Logger,
          thread_ts:Β str,
          buffer_size:Β int,
          recipient_team_id:Β strΒ |Β NoneΒ =Β None,
          recipient_user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs)
          +
          +
          +
          + +Expand source code + +
          class ChatStream:
          +    """A helper class for streaming markdown text into a conversation using the chat streaming APIs.
          +
          +    This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API
          +    methods, with automatic buffering and state management.
          +    """
          +
          +    def __init__(
          +        self,
          +        client: "WebClient",
          +        *,
          +        channel: str,
          +        logger: logging.Logger,
          +        thread_ts: str,
          +        buffer_size: int,
          +        recipient_team_id: Optional[str] = None,
          +        recipient_user_id: Optional[str] = None,
          +        **kwargs,
          +    ):
          +        """Initialize a new ChatStream instance.
          +
          +        The __init__ method creates a unique ChatStream instance that keeps track of one chat stream.
          +
          +        Args:
          +            client: The WebClient instance to use for API calls.
          +            channel: An encoded ID that represents a channel, private group, or DM.
          +            logger: A logging channel for outputs.
          +            thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
          +              request.
          +            recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
          +              streaming to channels.
          +            recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +            buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value
          +              decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
          +            **kwargs: Additional arguments passed to the underlying API calls.
          +        """
          +        self._client = client
          +        self._logger = logger
          +        self._token: Optional[str] = kwargs.pop("token", None)
          +        self._stream_args = {
          +            "channel": channel,
          +            "thread_ts": thread_ts,
          +            "recipient_team_id": recipient_team_id,
          +            "recipient_user_id": recipient_user_id,
          +            **kwargs,
          +        }
          +        self._buffer = ""
          +        self._state = "starting"
          +        self._stream_ts: Optional[str] = None
          +        self._buffer_size = buffer_size
          +
          +    def append(
          +        self,
          +        *,
          +        markdown_text: str,
          +        **kwargs,
          +    ) -> Optional[SlackResponse]:
          +        """Append to the stream.
          +
          +        The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream
          +        is stopped this method cannot be called.
          +
          +        Args:
          +            markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
          +              what will be appended to the message received so far.
          +            **kwargs: Additional arguments passed to the underlying API calls.
          +
          +        Returns:
          +            SlackResponse if the buffer was flushed, None if buffering.
          +
          +        Raises:
          +            SlackRequestError: If the stream is already completed.
          +
          +        Example:
          +            ```python
          +            streamer = client.chat_stream(
          +                channel="C0123456789",
          +                thread_ts="1700000001.123456",
          +                recipient_team_id="T0123456789",
          +                recipient_user_id="U0123456789",
          +            )
          +            streamer.append(markdown_text="**hello wo")
          +            streamer.append(markdown_text="rld!**")
          +            streamer.stop()
          +            ```
          +        """
          +        if self._state == "completed":
          +            raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}")
          +        if kwargs.get("token"):
          +            self._token = kwargs.pop("token")
          +        self._buffer += markdown_text
          +        if len(self._buffer) >= self._buffer_size:
          +            return self._flush_buffer(**kwargs)
          +        details = {
          +            "buffer_length": len(self._buffer),
          +            "buffer_size": self._buffer_size,
          +            "channel": self._stream_args.get("channel"),
          +            "recipient_team_id": self._stream_args.get("recipient_team_id"),
          +            "recipient_user_id": self._stream_args.get("recipient_user_id"),
          +            "thread_ts": self._stream_args.get("thread_ts"),
          +        }
          +        self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}")
          +        return None
          +
          +    def stop(
          +        self,
          +        *,
          +        markdown_text: Optional[str] = None,
          +        blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
          +        metadata: Optional[Union[Dict, Metadata]] = None,
          +        **kwargs,
          +    ) -> SlackResponse:
          +        """Stop the stream and finalize the message.
          +
          +        Args:
          +            blocks: A list of blocks that will be rendered at the bottom of the finalized message.
          +            markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
          +              what will be appended to the message received so far.
          +            metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
          +              post to Slack is accessible to any app or user who is a member of that workspace.
          +            **kwargs: Additional arguments passed to the underlying API calls.
          +
          +        Returns:
          +            SlackResponse from the chat.stopStream API call.
          +
          +        Raises:
          +            SlackRequestError: If the stream is already completed.
          +
          +        Example:
          +            ```python
          +            streamer = client.chat_stream(
          +                channel="C0123456789",
          +                thread_ts="1700000001.123456",
          +                recipient_team_id="T0123456789",
          +                recipient_user_id="U0123456789",
          +            )
          +            streamer.append(markdown_text="**hello wo")
          +            streamer.append(markdown_text="rld!**")
          +            streamer.stop()
          +            ```
          +        """
          +        if self._state == "completed":
          +            raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}")
          +        if kwargs.get("token"):
          +            self._token = kwargs.pop("token")
          +        if markdown_text:
          +            self._buffer += markdown_text
          +        if not self._stream_ts:
          +            response = self._client.chat_startStream(
          +                **self._stream_args,
          +                token=self._token,
          +            )
          +            if not response.get("ts"):
          +                raise e.SlackRequestError("Failed to stop stream: stream not started")
          +            self._stream_ts = str(response["ts"])
          +            self._state = "in_progress"
          +        response = self._client.chat_stopStream(
          +            token=self._token,
          +            channel=self._stream_args["channel"],
          +            ts=self._stream_ts,
          +            blocks=blocks,
          +            markdown_text=self._buffer,
          +            metadata=metadata,
          +            **kwargs,
          +        )
          +        self._state = "completed"
          +        return response
          +
          +    def _flush_buffer(self, **kwargs) -> SlackResponse:
          +        """Flush the internal buffer by making appropriate API calls."""
          +        if not self._stream_ts:
          +            response = self._client.chat_startStream(
          +                **self._stream_args,
          +                token=self._token,
          +                **kwargs,
          +                markdown_text=self._buffer,
          +            )
          +            self._stream_ts = response.get("ts")
          +            self._state = "in_progress"
          +        else:
          +            response = self._client.chat_appendStream(
          +                token=self._token,
          +                channel=self._stream_args["channel"],
          +                ts=self._stream_ts,
          +                **kwargs,
          +                markdown_text=self._buffer,
          +            )
          +        self._buffer = ""
          +        return response
          +
          +

          A helper class for streaming markdown text into a conversation using the chat streaming APIs.

          +

          This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API +methods, with automatic buffering and state management.

          +

          Initialize a new ChatStream instance.

          +

          The init method creates a unique ChatStream instance that keeps track of one chat stream.

          +

          Args

          +
          +
          client
          +
          The WebClient instance to use for API calls.
          +
          channel
          +
          An encoded ID that represents a channel, private group, or DM.
          +
          logger
          +
          A logging channel for outputs.
          +
          thread_ts
          +
          Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
          +
          recipient_team_id
          +
          The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
          +
          recipient_user_id
          +
          The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +
          buffer_size
          +
          The length of markdown_text to buffer in-memory before calling a method. Increasing this value +decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Methods

          +
          +
          +def append(self, *, markdown_text:Β str, **kwargs) ‑>Β SlackResponseΒ |Β None +
          +
          +
          + +Expand source code + +
          def append(
          +    self,
          +    *,
          +    markdown_text: str,
          +    **kwargs,
          +) -> Optional[SlackResponse]:
          +    """Append to the stream.
          +
          +    The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream
          +    is stopped this method cannot be called.
          +
          +    Args:
          +        markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
          +          what will be appended to the message received so far.
          +        **kwargs: Additional arguments passed to the underlying API calls.
          +
          +    Returns:
          +        SlackResponse if the buffer was flushed, None if buffering.
          +
          +    Raises:
          +        SlackRequestError: If the stream is already completed.
          +
          +    Example:
          +        ```python
          +        streamer = client.chat_stream(
          +            channel="C0123456789",
          +            thread_ts="1700000001.123456",
          +            recipient_team_id="T0123456789",
          +            recipient_user_id="U0123456789",
          +        )
          +        streamer.append(markdown_text="**hello wo")
          +        streamer.append(markdown_text="rld!**")
          +        streamer.stop()
          +        ```
          +    """
          +    if self._state == "completed":
          +        raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}")
          +    if kwargs.get("token"):
          +        self._token = kwargs.pop("token")
          +    self._buffer += markdown_text
          +    if len(self._buffer) >= self._buffer_size:
          +        return self._flush_buffer(**kwargs)
          +    details = {
          +        "buffer_length": len(self._buffer),
          +        "buffer_size": self._buffer_size,
          +        "channel": self._stream_args.get("channel"),
          +        "recipient_team_id": self._stream_args.get("recipient_team_id"),
          +        "recipient_user_id": self._stream_args.get("recipient_user_id"),
          +        "thread_ts": self._stream_args.get("thread_ts"),
          +    }
          +    self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}")
          +    return None
          +
          +

          Append to the stream.

          +

          The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream +is stopped this method cannot be called.

          +

          Args

          +
          +
          markdown_text
          +
          Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is +what will be appended to the message received so far.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Returns

          +

          SlackResponse if the buffer was flushed, None if buffering.

          +

          Raises

          +
          +
          SlackRequestError
          +
          If the stream is already completed.
          +
          +

          Example

          +
          streamer = client.chat_stream(
          +    channel="C0123456789",
          +    thread_ts="1700000001.123456",
          +    recipient_team_id="T0123456789",
          +    recipient_user_id="U0123456789",
          +)
          +streamer.append(markdown_text="**hello wo")
          +streamer.append(markdown_text="rld!**")
          +streamer.stop()
          +
          +
          +
          +def stop(self,
          *,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def stop(
          +    self,
          +    *,
          +    markdown_text: Optional[str] = None,
          +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
          +    metadata: Optional[Union[Dict, Metadata]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Stop the stream and finalize the message.
          +
          +    Args:
          +        blocks: A list of blocks that will be rendered at the bottom of the finalized message.
          +        markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
          +          what will be appended to the message received so far.
          +        metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
          +          post to Slack is accessible to any app or user who is a member of that workspace.
          +        **kwargs: Additional arguments passed to the underlying API calls.
          +
          +    Returns:
          +        SlackResponse from the chat.stopStream API call.
          +
          +    Raises:
          +        SlackRequestError: If the stream is already completed.
          +
          +    Example:
          +        ```python
          +        streamer = client.chat_stream(
          +            channel="C0123456789",
          +            thread_ts="1700000001.123456",
          +            recipient_team_id="T0123456789",
          +            recipient_user_id="U0123456789",
          +        )
          +        streamer.append(markdown_text="**hello wo")
          +        streamer.append(markdown_text="rld!**")
          +        streamer.stop()
          +        ```
          +    """
          +    if self._state == "completed":
          +        raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}")
          +    if kwargs.get("token"):
          +        self._token = kwargs.pop("token")
          +    if markdown_text:
          +        self._buffer += markdown_text
          +    if not self._stream_ts:
          +        response = self._client.chat_startStream(
          +            **self._stream_args,
          +            token=self._token,
          +        )
          +        if not response.get("ts"):
          +            raise e.SlackRequestError("Failed to stop stream: stream not started")
          +        self._stream_ts = str(response["ts"])
          +        self._state = "in_progress"
          +    response = self._client.chat_stopStream(
          +        token=self._token,
          +        channel=self._stream_args["channel"],
          +        ts=self._stream_ts,
          +        blocks=blocks,
          +        markdown_text=self._buffer,
          +        metadata=metadata,
          +        **kwargs,
          +    )
          +    self._state = "completed"
          +    return response
          +
          +

          Stop the stream and finalize the message.

          +

          Args

          +
          +
          blocks
          +
          A list of blocks that will be rendered at the bottom of the finalized message.
          +
          markdown_text
          +
          Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is +what will be appended to the message received so far.
          +
          metadata
          +
          JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you +post to Slack is accessible to any app or user who is a member of that workspace.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Returns

          +

          SlackResponse from the chat.stopStream API call.

          +

          Raises

          +
          +
          SlackRequestError
          +
          If the stream is already completed.
          +
          +

          Example

          +
          streamer = client.chat_stream(
          +    channel="C0123456789",
          +    thread_ts="1700000001.123456",
          +    recipient_team_id="T0123456789",
          +    recipient_user_id="U0123456789",
          +)
          +streamer.append(markdown_text="**hello wo")
          +streamer.append(markdown_text="rld!**")
          +streamer.stop()
          +
          +
          +
          +
          +
          +
          +
          + +
          + + + diff --git a/docs/static/api-docs/slack_sdk/web/client.html b/docs/reference/web/client.html similarity index 80% rename from docs/static/api-docs/slack_sdk/web/client.html rename to docs/reference/web/client.html index 9eb5625dd..6fded11e1 100644 --- a/docs/static/api-docs/slack_sdk/web/client.html +++ b/docs/reference/web/client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.client API documentation @@ -59,7 +59,7 @@

          Classes

          class WebClient(BaseClient):
               """A WebClient allows apps to communicate with the Slack Platform's Web API.
           
          -    https://api.slack.com/methods
          +    https://docs.slack.dev/reference/methods
           
               The Slack Web API is an interface for querying information from
               and enacting change in a Slack workspace.
          @@ -130,7 +130,7 @@ 

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -152,7 +152,7 @@

          Classes

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -179,7 +179,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -200,7 +200,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -220,7 +220,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -240,7 +240,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -264,7 +264,7 @@

          Classes

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -291,7 +291,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -313,7 +313,7 @@

          Classes

          ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -344,7 +344,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -372,7 +372,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -389,7 +389,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -411,7 +411,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -431,7 +431,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -450,7 +450,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -460,6 +460,60 @@

          Classes

          kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> SlackResponse: + """Link a Salesforce record to a channel. + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> SlackResponse: + """Unlink a Salesforce record from a channel. + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -469,7 +523,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -489,7 +543,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -504,7 +558,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -525,7 +579,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -545,7 +599,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -565,7 +619,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -578,7 +632,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -595,7 +649,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -607,7 +661,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -620,7 +674,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -638,7 +692,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -669,7 +723,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -681,7 +735,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -694,7 +748,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -710,7 +764,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -723,7 +777,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -743,7 +797,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -771,7 +825,7 @@

          Classes

          """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -798,7 +852,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -821,7 +875,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -844,7 +898,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -869,7 +923,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -893,7 +947,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -911,7 +965,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -923,7 +977,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -936,7 +990,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -948,7 +1002,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -973,7 +1027,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -991,7 +1045,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1004,7 +1058,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1017,7 +1071,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1029,7 +1083,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1042,7 +1096,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1057,7 +1111,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1080,7 +1134,7 @@

          Classes

          ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1098,7 +1152,7 @@

          Classes

          ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1122,7 +1176,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1147,7 +1201,7 @@

          Classes

          ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1169,7 +1223,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1191,7 +1245,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1211,7 +1265,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1233,7 +1287,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1248,7 +1302,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1268,7 +1322,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1285,7 +1339,7 @@

          Classes

          ) -> SlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1303,7 +1357,7 @@

          Classes

          ) -> SlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1325,7 +1379,7 @@

          Classes

          ) -> SlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1342,7 +1396,7 @@

          Classes

          ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1360,7 +1414,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1374,7 +1428,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1394,7 +1448,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1413,7 +1467,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1434,7 +1488,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1455,7 +1509,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1475,7 +1529,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1489,7 +1543,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1501,7 +1555,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1514,7 +1568,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1527,7 +1581,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1540,7 +1594,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1553,7 +1607,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1567,7 +1621,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1585,7 +1639,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1603,7 +1657,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1622,7 +1676,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1642,7 +1696,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1674,7 +1728,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1698,7 +1752,7 @@

          Classes

          def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1706,7 +1760,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1727,7 +1781,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1740,7 +1794,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1754,7 +1808,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1767,7 +1821,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1780,7 +1834,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1801,7 +1855,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1831,7 +1885,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1852,7 +1906,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1872,7 +1926,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1891,7 +1945,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1906,7 +1960,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -1919,7 +1973,7 @@

          Classes

          ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1934,7 +1988,7 @@

          Classes

          ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1947,7 +2001,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -1959,7 +2013,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1974,7 +2028,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -1986,7 +2040,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -1999,7 +2053,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2016,7 +2070,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2032,7 +2086,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2043,13 +2097,17 @@

          Classes

          channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2059,8 +2117,8 @@

          Classes

          title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2074,8 +2132,8 @@

          Classes

          prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2089,7 +2147,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2099,7 +2157,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2111,7 +2169,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2129,7 +2187,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2155,7 +2213,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2175,7 +2233,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2188,7 +2246,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2201,7 +2259,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2220,7 +2278,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2247,7 +2305,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2259,7 +2317,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2272,7 +2330,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2286,7 +2344,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2302,7 +2360,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2322,7 +2380,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2335,7 +2393,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2347,7 +2405,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2362,7 +2420,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2387,7 +2445,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2410,7 +2468,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2418,7 +2476,7 @@

          Classes

          # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2588,6 +2646,27 @@

          Classes

          # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> SlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2597,7 +2676,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2611,7 +2690,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2630,7 +2709,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2643,7 +2722,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2663,10 +2742,11 @@

          Classes

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2682,11 +2762,12 @@

          Classes

          "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2709,11 +2790,12 @@

          Classes

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2734,11 +2816,12 @@

          Classes

          "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2747,7 +2830,7 @@

          Classes

          *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2758,10 +2841,11 @@

          Classes

          unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2778,14 +2862,155 @@

          Classes

          "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + + def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> ChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + return ChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + def chat_unfurl( self, *, @@ -2794,6 +3019,7 @@

          Classes

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2801,7 +3027,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2810,6 +3036,7 @@

          Classes

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -2835,10 +3062,11 @@

          Classes

          parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2852,6 +3080,7 @@

          Classes

          "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2860,36 +3089,10 @@

          Classes

          kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> SlackResponse: - """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -2902,7 +3105,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2926,7 +3129,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2938,7 +3141,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -2950,7 +3153,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -2964,7 +3167,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -2977,7 +3180,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -2986,7 +3189,7 @@

          Classes

          self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3010,7 +3213,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3034,7 +3237,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3054,7 +3257,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3077,7 +3280,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3099,7 +3302,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3112,7 +3315,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3124,7 +3327,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3140,7 +3343,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3166,7 +3369,7 @@

          Classes

          ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3179,7 +3382,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3193,7 +3396,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3207,7 +3410,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3226,7 +3429,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3245,7 +3448,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3271,7 +3474,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3292,7 +3495,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3310,7 +3513,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3337,7 +3540,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3350,7 +3553,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3362,7 +3565,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3375,7 +3578,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3388,7 +3591,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3400,7 +3603,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3409,7 +3612,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3421,7 +3624,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3433,7 +3636,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3445,7 +3648,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3460,11 +3663,35 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> SlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -3473,7 +3700,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3485,7 +3712,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3501,7 +3728,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3529,7 +3756,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3557,7 +3784,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3573,7 +3800,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3598,7 +3825,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3637,7 +3864,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3672,7 +3899,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3686,7 +3913,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3704,7 +3931,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3716,7 +3943,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3735,7 +3962,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3788,12 +4015,12 @@

          Classes

          ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3879,7 +4106,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3902,7 +4129,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3925,7 +4152,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -3938,7 +4165,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -3946,7 +4173,7 @@

          Classes

          # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4127,7 +4354,7 @@

          Classes

          # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4203,7 +4430,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4215,7 +4442,7 @@

          Classes

          # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4302,7 +4529,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4328,7 +4555,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4348,7 +4575,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4364,7 +4591,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4385,7 +4612,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4397,7 +4624,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4409,7 +4636,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4422,7 +4649,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4436,7 +4663,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4452,7 +4679,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4478,7 +4705,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4504,7 +4731,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4528,7 +4755,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4549,7 +4776,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4562,7 +4789,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4575,7 +4802,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4587,7 +4814,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4600,7 +4827,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4618,7 +4845,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4646,7 +4873,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4674,7 +4901,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4703,7 +4930,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4719,134 +4946,377 @@

          Classes

          ) return self.api_call("search.messages", http_verb="GET", params=kwargs) - def stars_add( + def slackLists_access_delete( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Adds a star to an item. - https://api.slack.com/methods/stars.add + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete """ - kwargs.update( - { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, - } - ) - return self.api_call("stars.add", params=kwargs) + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) - def stars_list( + def slackLists_access_set( self, *, - count: Optional[int] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, - page: Optional[int] = None, - team_id: Optional[str] = None, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Lists stars for a user. - https://api.slack.com/methods/stars.list + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set """ - kwargs.update( - { - "count": count, - "cursor": cursor, - "limit": limit, - "page": page, - "team_id": team_id, - } - ) - return self.api_call("stars.list", http_verb="GET", params=kwargs) + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) - def stars_remove( + def slackLists_create( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, **kwargs, ) -> SlackResponse: - """Removes a star from an item. - https://api.slack.com/methods/stars.remove + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create """ kwargs.update( { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, } ) - return self.api_call("stars.remove", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) - def team_accessLogs( + def slackLists_download_get( self, *, - before: Optional[Union[int, str]] = None, - count: Optional[Union[int, str]] = None, - page: Optional[Union[int, str]] = None, - team_id: Optional[str] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, + list_id: str, + job_id: str, **kwargs, ) -> SlackResponse: - """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get """ kwargs.update( { - "before": before, - "count": count, - "page": page, - "team_id": team_id, - "cursor": cursor, - "limit": limit, + "list_id": list_id, + "job_id": job_id, } ) - return self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) - def team_billableInfo( + def slackLists_download_start( self, *, - team_id: Optional[str] = None, - user: Optional[str] = None, + list_id: str, + include_archived: Optional[bool] = None, **kwargs, ) -> SlackResponse: - """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start """ - kwargs.update({"team_id": team_id, "user": user}) - return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) - def team_billing_info( + def slackLists_items_create( self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, **kwargs, ) -> SlackResponse: - """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create """ - return self.api_call("team.billing.info", params=kwargs) + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) - def team_externalTeams_disconnect( + def slackLists_items_delete( self, *, - target_team: str, + list_id: str, + id: str, **kwargs, ) -> SlackResponse: - """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete """ kwargs.update( { - "target_team": target_team, + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> SlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> SlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + + def stars_add( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Adds a star to an item. + https://docs.slack.dev/reference/methods/stars.add + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return self.api_call("stars.add", params=kwargs) + + def stars_list( + self, + *, + count: Optional[int] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + page: Optional[int] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists stars for a user. + https://docs.slack.dev/reference/methods/stars.list + """ + kwargs.update( + { + "count": count, + "cursor": cursor, + "limit": limit, + "page": page, + "team_id": team_id, + } + ) + return self.api_call("stars.list", http_verb="GET", params=kwargs) + + def stars_remove( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Removes a star from an item. + https://docs.slack.dev/reference/methods/stars.remove + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return self.api_call("stars.remove", params=kwargs) + + def team_accessLogs( + self, + *, + before: Optional[Union[int, str]] = None, + count: Optional[Union[int, str]] = None, + page: Optional[Union[int, str]] = None, + team_id: Optional[str] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + **kwargs, + ) -> SlackResponse: + """Gets the access logs for the current team. + https://docs.slack.dev/reference/methods/team.accessLogs + """ + kwargs.update( + { + "before": before, + "count": count, + "page": page, + "team_id": team_id, + "cursor": cursor, + "limit": limit, + } + ) + return self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + + def team_billableInfo( + self, + *, + team_id: Optional[str] = None, + user: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Gets billable users information for the current team. + https://docs.slack.dev/reference/methods/team.billableInfo + """ + kwargs.update({"team_id": team_id, "user": user}) + return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + + def team_billing_info( + self, + **kwargs, + ) -> SlackResponse: + """Reads a workspace's billing plan information. + https://docs.slack.dev/reference/methods/team.billing.info + """ + return self.api_call("team.billing.info", params=kwargs) + + def team_externalTeams_disconnect( + self, + *, + target_team: str, + **kwargs, + ) -> SlackResponse: + """Disconnects an external organization. + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect + """ + kwargs.update( + { + "target_team": target_team, } ) return self.api_call("team.externalTeams.disconnect", params=kwargs) @@ -4864,7 +5334,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4895,7 +5365,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4913,7 +5383,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4935,7 +5405,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4945,7 +5415,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -4961,7 +5431,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -4987,7 +5457,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5001,7 +5471,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5016,7 +5486,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5041,7 +5511,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5068,7 +5538,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5089,7 +5559,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5116,7 +5586,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5138,7 +5608,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5149,7 +5619,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5159,7 +5629,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5171,7 +5641,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5186,7 +5656,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5205,7 +5675,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5220,7 +5690,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5232,7 +5702,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5243,7 +5713,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5256,7 +5726,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5271,7 +5741,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5294,8 +5764,8 @@

          Classes

          **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5318,9 +5788,9 @@

          Classes

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5343,9 +5813,9 @@

          Classes

          """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5372,8 +5842,8 @@

          Classes

          ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5384,6 +5854,72 @@

          Classes

          # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5392,7 +5928,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5409,7 +5945,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5430,7 +5966,7 @@

          Classes

          **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5442,7 +5978,7 @@

          Classes

          return self.api_call("workflows.updateStep", json=kwargs)

          A WebClient allows apps to communicate with the Slack Platform's Web API.

          -

          https://api.slack.com/methods

          +

          https://docs.slack.dev/reference/methods

          The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

          This client handles constructing and sending HTTP requests to Slack @@ -5522,7 +6058,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5532,7 +6068,7 @@

          Methods

          return self.api_call("admin.analytics.getFile", params=kwargs)

          Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

          +https://docs.slack.dev/reference/methods/admin.analytics.getFile

          def admin_apps_activities_list(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          component_id:Β strΒ |Β NoneΒ =Β None,
          component_type:Β strΒ |Β NoneΒ =Β None,
          log_event_type:Β strΒ |Β NoneΒ =Β None,
          max_date_created:Β intΒ |Β NoneΒ =Β None,
          min_date_created:Β intΒ |Β NoneΒ =Β None,
          min_log_level:Β strΒ |Β NoneΒ =Β None,
          sort_direction:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          trace_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5561,7 +6097,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5583,7 +6119,7 @@

          Methods

          return self.api_call("admin.apps.activities.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.apps.activities.list

          def admin_apps_approve(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          request_id:Β strΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5606,7 +6142,7 @@

          Methods

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5627,7 +6163,7 @@

          Methods

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

          +https://docs.slack.dev/reference/methods/admin.apps.approve

          def admin_apps_approved_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5647,7 +6183,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -5660,7 +6196,7 @@

          Methods

          return self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

          List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

          +https://docs.slack.dev/reference/methods/admin.apps.approved.list

          def admin_apps_clearResolution(self,
          *,
          app_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5679,7 +6215,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -5691,7 +6227,7 @@

          Methods

          return self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

          def admin_apps_config_lookup(self, *, app_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -5708,7 +6244,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -5717,7 +6253,7 @@

          Methods

          return self.api_call("admin.apps.config.lookup", params=kwargs)

          Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

          +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

          def admin_apps_config_set(self,
          *,
          app_id:Β str,
          domain_restrictions:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          workflow_auth_strategy:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5736,7 +6272,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -5749,7 +6285,7 @@

          Methods

          return self.api_call("admin.apps.config.set", params=kwargs)

          Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

          +https://docs.slack.dev/reference/methods/admin.apps.config.set

          def admin_apps_requests_cancel(self,
          *,
          request_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5768,7 +6304,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -5780,7 +6316,7 @@

          Methods

          return self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

          List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

          +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

          def admin_apps_requests_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5799,7 +6335,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -5811,7 +6347,7 @@

          Methods

          return self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

          List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

          +https://docs.slack.dev/reference/methods/admin.apps.requests.list

          def admin_apps_restrict(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          request_id:Β strΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5834,7 +6370,7 @@

          Methods

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -5855,7 +6391,7 @@

          Methods

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

          +https://docs.slack.dev/reference/methods/admin.apps.restrict

          def admin_apps_restricted_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5875,7 +6411,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -5888,7 +6424,7 @@

          Methods

          return self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

          List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

          +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

          def admin_apps_uninstall(self,
          *,
          app_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5908,7 +6444,7 @@

          Methods

          ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -5922,7 +6458,7 @@

          Methods

          Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

          +https://docs.slack.dev/reference/methods/admin.apps.uninstall

          def admin_auth_policy_assignEntities(self,
          *,
          entity_ids:Β strΒ |Β Sequence[str],
          policy_name:Β str,
          entity_type:Β str,
          **kwargs) ‑>Β SlackResponse
          @@ -5941,7 +6477,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -5952,7 +6488,7 @@

          Methods

          return self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

          Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

          def admin_auth_policy_getEntities(self,
          *,
          policy_name:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          entity_type:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5972,7 +6508,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -5984,7 +6520,7 @@

          Methods

          return self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

          Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

          def admin_auth_policy_removeEntities(self,
          *,
          entity_ids:Β strΒ |Β Sequence[str],
          policy_name:Β str,
          entity_type:Β str,
          **kwargs) ‑>Β SlackResponse
          @@ -6003,7 +6539,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6014,7 +6550,7 @@

          Methods

          return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

          Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

          def admin_barriers_create(self,
          *,
          barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
          primary_usergroup_id:Β str,
          restricted_subjects:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -6033,7 +6569,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6047,7 +6583,7 @@

          Methods

          return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.barriers.create

          def admin_barriers_delete(self, *, barrier_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6064,13 +6600,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

          Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

          +https://docs.slack.dev/reference/methods/admin.barriers.delete

          def admin_barriers_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6088,7 +6624,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6098,7 +6634,7 @@

          Methods

          return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

          Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

          +https://docs.slack.dev/reference/methods/admin.barriers.list

          def admin_barriers_update(self,
          *,
          barrier_id:Β str,
          barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
          primary_usergroup_id:Β str,
          restricted_subjects:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -6118,7 +6654,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6132,7 +6668,7 @@

          Methods

          return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

          Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

          +https://docs.slack.dev/reference/methods/admin.barriers.update

          def admin_conversations_archive(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6149,13 +6685,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs)

          Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

          +https://docs.slack.dev/reference/methods/admin.conversations.archive

          def admin_conversations_bulkArchive(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6172,13 +6708,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs)

          Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

          +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

          def admin_conversations_bulkDelete(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6219,7 +6755,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6230,7 +6766,7 @@

          Methods

          return self.api_call("admin.conversations.bulkMove", params=kwargs)

          Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

          +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

          def admin_conversations_convertToPrivate(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6247,13 +6783,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs)

          Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

          +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

          def admin_conversations_convertToPublic(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6270,13 +6806,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs)

          Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

          +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

          def admin_conversations_create(self,
          *,
          is_private:Β bool,
          name:Β str,
          description:Β strΒ |Β NoneΒ =Β None,
          org_wide:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6297,7 +6833,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6311,7 +6847,34 @@

          Methods

          return self.api_call("admin.conversations.create", params=kwargs)

          Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

          +https://docs.slack.dev/reference/methods/admin.conversations.create

          + +
          +def admin_conversations_createForObjects(self,
          *,
          object_id:Β str,
          salesforce_org_id:Β str,
          invite_object_team:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def admin_conversations_createForObjects(
          +    self,
          +    *,
          +    object_id: str,
          +    salesforce_org_id: str,
          +    invite_object_team: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Create a Salesforce channel for the corresponding object provided.
          +    https://docs.slack.dev/reference/methods/admin.conversations.createForObjects
          +    """
          +    kwargs.update(
          +        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
          +    )
          +    return self.api_call("admin.conversations.createForObjects", params=kwargs)
          +
          +

          Create a Salesforce channel for the corresponding object provided. +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

          def admin_conversations_delete(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6328,13 +6891,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.delete

          def admin_conversations_disconnectShared(self,
          *,
          channel_id:Β str,
          leaving_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6352,7 +6915,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6362,7 +6925,7 @@

          Methods

          return self.api_call("admin.conversations.disconnectShared", params=kwargs)

          Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

          +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

          def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
          *,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6384,7 +6947,7 @@

          Methods

          """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6405,7 +6968,7 @@

          Methods

          List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

          +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

          def admin_conversations_getConversationPrefs(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6422,13 +6985,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

          Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

          +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

          def admin_conversations_getCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6445,13 +7008,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

          def admin_conversations_getTeams(self,
          *,
          channel_id:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6470,7 +7033,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6482,7 +7045,7 @@

          Methods

          return self.api_call("admin.conversations.getTeams", params=kwargs)

          Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

          +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

          def admin_conversations_invite(self, *, channel_id:Β str, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6500,7 +7063,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6511,34 +7074,65 @@

          Methods

          return self.api_call("admin.conversations.invite", params=kwargs)

          Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

          +https://docs.slack.dev/reference/methods/admin.conversations.invite

          -
          -def admin_conversations_lookup(self,
          *,
          last_message_activity_before:Β int,
          team_ids:Β strΒ |Β Sequence[str],
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          max_member_count:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +def admin_conversations_linkObjects(self, *, channel:Β str, record_id:Β str, salesforce_org_id:Β str, **kwargs) ‑>Β SlackResponse
          Expand source code -
          def admin_conversations_lookup(
          +
          def admin_conversations_linkObjects(
               self,
               *,
          -    last_message_activity_before: int,
          -    team_ids: Union[str, Sequence[str]],
          -    cursor: Optional[str] = None,
          -    limit: Optional[int] = None,
          -    max_member_count: Optional[int] = None,
          +    channel: str,
          +    record_id: str,
          +    salesforce_org_id: str,
               **kwargs,
           ) -> SlackResponse:
          -    """Returns channels on the given team using the filters.
          -    https://api.slack.com/methods/admin.conversations.lookup
          +    """Link a Salesforce record to a channel.
          +    https://docs.slack.dev/reference/methods/admin.conversations.linkObjects
               """
               kwargs.update(
                   {
          -            "last_message_activity_before": last_message_activity_before,
          -            "cursor": cursor,
          -            "limit": limit,
          +            "channel": channel,
          +            "record_id": record_id,
          +            "salesforce_org_id": salesforce_org_id,
          +        }
          +    )
          +    return self.api_call("admin.conversations.linkObjects", params=kwargs)
          +
          + +
          +
          +def admin_conversations_lookup(self,
          *,
          last_message_activity_before:Β int,
          team_ids:Β strΒ |Β Sequence[str],
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          max_member_count:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def admin_conversations_lookup(
          +    self,
          +    *,
          +    last_message_activity_before: int,
          +    team_ids: Union[str, Sequence[str]],
          +    cursor: Optional[str] = None,
          +    limit: Optional[int] = None,
          +    max_member_count: Optional[int] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Returns channels on the given team using the filters.
          +    https://docs.slack.dev/reference/methods/admin.conversations.lookup
          +    """
          +    kwargs.update(
          +        {
          +            "last_message_activity_before": last_message_activity_before,
          +            "cursor": cursor,
          +            "limit": limit,
                       "max_member_count": max_member_count,
                   }
               )
          @@ -6549,7 +7143,7 @@ 

          Methods

          return self.api_call("admin.conversations.lookup", params=kwargs)

          Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

          +https://docs.slack.dev/reference/methods/admin.conversations.lookup

          def admin_conversations_removeCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6566,13 +7160,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

          def admin_conversations_rename(self, *, channel_id:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -6590,13 +7184,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.rename

          def admin_conversations_restrictAccess_addGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6615,7 +7209,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6631,7 +7225,7 @@

          Methods

          )

          Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

          def admin_conversations_restrictAccess_listGroups(self, *, channel_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6649,7 +7243,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -6664,7 +7258,7 @@

          Methods

          )
          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

          def admin_conversations_restrictAccess_removeGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6683,7 +7277,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -6699,7 +7293,7 @@

          Methods

          )

          Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

          def admin_conversations_setConversationPrefs(self, *, channel_id:Β str, prefs:Β strΒ |Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -6765,7 +7359,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -6775,7 +7369,7 @@

          Methods

          return self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

          Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

          +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

          def admin_conversations_setCustomRetention(self, *, channel_id:Β str, duration_days:Β int, **kwargs) ‑>Β SlackResponse @@ -6793,13 +7387,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

          def admin_conversations_setTeams(self,
          *,
          channel_id:Β str,
          org_channel:Β boolΒ |Β NoneΒ =Β None,
          target_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6819,7 +7413,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -6835,7 +7429,7 @@

          Methods

          return self.api_call("admin.conversations.setTeams", params=kwargs)

          Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

          +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

          def admin_conversations_unarchive(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6852,13 +7446,42 @@

          Methods

          **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs)

          Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

          +https://docs.slack.dev/reference/methods/admin.conversations.archive

          + +
          +def admin_conversations_unlinkObjects(self, *, channel:Β str, new_name:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def admin_conversations_unlinkObjects(
          +    self,
          +    *,
          +    channel: str,
          +    new_name: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Unlink a Salesforce record from a channel.
          +    https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "new_name": new_name,
          +        }
          +    )
          +    return self.api_call("admin.conversations.unlinkObjects", params=kwargs)
          +
          +
          def admin_emoji_add(self, *, name:Β str, url:Β str, **kwargs) ‑>Β SlackResponse @@ -6876,13 +7499,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.add

          def admin_emoji_addAlias(self, *, alias_for:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -6900,13 +7523,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

          def admin_emoji_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6924,13 +7547,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

          List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

          +https://docs.slack.dev/reference/methods/admin.emoji.list

          def admin_emoji_remove(self, *, name:Β str, **kwargs) ‑>Β SlackResponse @@ -6947,13 +7570,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

          Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

          +https://docs.slack.dev/reference/methods/admin.emoji.remove

          def admin_emoji_rename(self, *, name:Β str, new_name:Β str, **kwargs) ‑>Β SlackResponse @@ -6971,13 +7594,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.rename

          def admin_functions_list(self,
          *,
          app_ids:Β strΒ |Β Sequence[str],
          team_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6997,7 +7620,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7013,7 +7636,7 @@

          Methods

          return self.api_call("admin.functions.list", params=kwargs)

          Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

          +https://docs.slack.dev/reference/methods/admin.functions.list

          def admin_functions_permissions_lookup(self, *, function_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7031,7 +7654,7 @@

          Methods

          ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7041,7 +7664,7 @@

          Methods

          Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

          +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

          def admin_functions_permissions_set(self,
          *,
          function_id:Β str,
          visibility:Β str,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7061,7 +7684,7 @@

          Methods

          ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7078,7 +7701,7 @@

          Methods

          Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

          +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

          def admin_inviteRequests_approve(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7096,13 +7719,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

          def admin_inviteRequests_approved_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7121,7 +7744,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7133,7 +7756,7 @@

          Methods

          return self.api_call("admin.inviteRequests.approved.list", params=kwargs)

          List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

          def admin_inviteRequests_denied_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7152,7 +7775,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7164,7 +7787,7 @@

          Methods

          return self.api_call("admin.inviteRequests.denied.list", params=kwargs)

          List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

          def admin_inviteRequests_deny(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7182,13 +7805,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

          def admin_inviteRequests_list(self, **kwargs) ‑>Β SlackResponse @@ -7224,7 +7847,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7238,7 +7861,7 @@

          Methods

          return self.api_call("admin.roles.addAssignments", params=kwargs)

          Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

          def admin_roles_listAssignments(self,
          *,
          role_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          entity_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7260,7 +7883,7 @@

          Methods

          ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7275,7 +7898,7 @@

          Methods

          Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

          def admin_roles_removeAssignments(self,
          *,
          role_id:Β str,
          entity_ids:Β strΒ |Β Sequence[str],
          user_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -7294,7 +7917,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7308,7 +7931,7 @@

          Methods

          return self.api_call("admin.roles.removeAssignments", params=kwargs)

          Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

          def admin_teams_admins_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7327,7 +7950,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7339,7 +7962,7 @@

          Methods

          return self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

          List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

          def admin_teams_create(self,
          *,
          team_domain:Β str,
          team_name:Β str,
          team_description:Β strΒ |Β NoneΒ =Β None,
          team_discoverability:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7359,7 +7982,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7372,7 +7995,7 @@

          Methods

          return self.api_call("admin.teams.create", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.create

          def admin_teams_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7390,13 +8013,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs)

          List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

          +https://docs.slack.dev/reference/methods/admin.teams.list

          def admin_teams_owners_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7415,13 +8038,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

          List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

          +https://docs.slack.dev/reference/methods/admin.teams.owners.list

          def admin_teams_settings_info(self, *, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -7438,13 +8061,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs)

          Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

          +https://docs.slack.dev/reference/methods/admin.teams.settings.info

          def admin_teams_settings_setDefaultChannels(self, *, team_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7462,7 +8085,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7472,7 +8095,7 @@

          Methods

          return self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

          def admin_teams_settings_setDescription(self, *, team_id:Β str, description:Β str, **kwargs) ‑>Β SlackResponse @@ -7490,13 +8113,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

          def admin_teams_settings_setDiscoverability(self, *, team_id:Β str, discoverability:Β str, **kwargs) ‑>Β SlackResponse @@ -7514,13 +8137,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

          def admin_teams_settings_setIcon(self, *, team_id:Β str, image_url:Β str, **kwargs) ‑>Β SlackResponse @@ -7538,13 +8161,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

          def admin_teams_settings_setName(self, *, team_id:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -7562,13 +8185,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

          def admin_usergroups_addChannels(self,
          *,
          channel_ids:Β strΒ |Β Sequence[str],
          usergroup_id:Β str,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7587,7 +8210,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7597,7 +8220,7 @@

          Methods

          return self.api_call("admin.usergroups.addChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

          def admin_usergroups_addTeams(self,
          *,
          usergroup_id:Β str,
          team_ids:Β strΒ |Β Sequence[str],
          auto_provision:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7616,7 +8239,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7626,7 +8249,7 @@

          Methods

          return self.api_call("admin.usergroups.addTeams", params=kwargs)

          Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

          +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

          def admin_usergroups_listChannels(self,
          *,
          usergroup_id:Β str,
          include_num_members:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7645,7 +8268,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -7657,7 +8280,7 @@

          Methods

          return self.api_call("admin.usergroups.listChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

          def admin_usergroups_removeChannels(self, *, usergroup_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7675,7 +8298,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7685,7 +8308,7 @@

          Methods

          return self.api_call("admin.usergroups.removeChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

          def admin_users_assign(self,
          *,
          team_id:Β str,
          user_id:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          is_restricted:Β boolΒ |Β NoneΒ =Β None,
          is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7706,7 +8329,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -7723,7 +8346,7 @@

          Methods

          return self.api_call("admin.users.assign", params=kwargs)

          Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

          +https://docs.slack.dev/reference/methods/admin.users.assign

          def admin_users_invite(self,
          *,
          team_id:Β str,
          email:Β str,
          channel_ids:Β strΒ |Β Sequence[str],
          custom_message:Β strΒ |Β NoneΒ =Β None,
          email_password_policy_enabled:Β boolΒ |Β NoneΒ =Β None,
          guest_expiration_ts:Β strΒ |Β floatΒ |Β NoneΒ =Β None,
          is_restricted:Β boolΒ |Β NoneΒ =Β None,
          is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
          real_name:Β strΒ |Β NoneΒ =Β None,
          resend:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7749,7 +8372,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -7771,10 +8394,10 @@

          Methods

          return self.api_call("admin.users.invite", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.users.invite

          -def admin_users_list(self,
          *,
          team_id:Β str,
          include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
          is_active:Β boolΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def admin_users_list(self,
          *,
          team_id:Β strΒ |Β NoneΒ =Β None,
          include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
          is_active:Β boolΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7784,7 +8407,7 @@

          Methods

          def admin_users_list(
               self,
               *,
          -    team_id: str,
          +    team_id: Optional[str] = None,
               include_deactivated_user_workspaces: Optional[bool] = None,
               is_active: Optional[bool] = None,
               cursor: Optional[str] = None,
          @@ -7792,7 +8415,7 @@ 

          Methods

          **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -7806,7 +8429,7 @@

          Methods

          return self.api_call("admin.users.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.users.list

          def admin_users_remove(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -7824,13 +8447,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs)

          Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

          +https://docs.slack.dev/reference/methods/admin.users.remove

          def admin_users_session_clearSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7848,7 +8471,7 @@

          Methods

          ) -> SlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7858,7 +8481,7 @@

          Methods

          Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

          def admin_users_session_getSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7876,7 +8499,7 @@

          Methods

          ) -> SlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7886,7 +8509,7 @@

          Methods

          Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

          def admin_users_session_invalidate(self, *, session_id:Β str, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -7904,13 +8527,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs)

          Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

          +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

          def admin_users_session_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7930,7 +8553,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -7943,7 +8566,7 @@

          Methods

          return self.api_call("admin.users.session.list", params=kwargs)

          Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

          +https://docs.slack.dev/reference/methods/admin.users.session.list

          def admin_users_session_reset(self,
          *,
          user_id:Β str,
          mobile_only:Β boolΒ |Β NoneΒ =Β None,
          web_only:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7962,7 +8585,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -7974,7 +8597,7 @@

          Methods

          return self.api_call("admin.users.session.reset", params=kwargs)

          Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

          +https://docs.slack.dev/reference/methods/admin.users.session.reset

          def admin_users_session_resetBulk(self,
          *,
          user_ids:Β strΒ |Β Sequence[str],
          mobile_only:Β boolΒ |Β NoneΒ =Β None,
          web_only:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7993,7 +8616,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8008,7 +8631,7 @@

          Methods

          return self.api_call("admin.users.session.resetBulk", params=kwargs)

          Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

          +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

          def admin_users_session_setSettings(self,
          *,
          user_ids:Β strΒ |Β Sequence[str],
          desktop_app_browser_quit:Β boolΒ |Β NoneΒ =Β None,
          duration:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8028,7 +8651,7 @@

          Methods

          ) -> SlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8044,7 +8667,7 @@

          Methods

          Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

          def admin_users_setAdmin(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8062,13 +8685,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs)

          Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

          +https://docs.slack.dev/reference/methods/admin.users.setAdmin

          def admin_users_setExpiration(self, *, expiration_ts:Β int, user_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8087,13 +8710,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs)

          Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

          +https://docs.slack.dev/reference/methods/admin.users.setExpiration

          def admin_users_setOwner(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8111,13 +8734,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs)

          Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

          +https://docs.slack.dev/reference/methods/admin.users.setOwner

          def admin_users_setRegular(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8135,13 +8758,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs)

          Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

          +https://docs.slack.dev/reference/methods/admin.users.setRegular

          def admin_users_unsupportedVersions_export(self,
          *,
          date_end_of_support:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          date_sessions_started:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8160,7 +8783,7 @@

          Methods

          ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8172,7 +8795,7 @@

          Methods

          Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

          +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

          def admin_workflows_collaborators_add(self,
          *,
          collaborator_ids:Β strΒ |Β Sequence[str],
          workflow_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -8190,7 +8813,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8203,7 +8826,7 @@

          Methods

          return self.api_call("admin.workflows.collaborators.add", params=kwargs)

          Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

          +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

          def admin_workflows_collaborators_remove(self,
          *,
          collaborator_ids:Β strΒ |Β Sequence[str],
          workflow_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -8221,7 +8844,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8234,7 +8857,7 @@

          Methods

          return self.api_call("admin.workflows.collaborators.remove", params=kwargs)

          Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

          +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

          def admin_workflows_permissions_lookup(self,
          *,
          workflow_ids:Β strΒ |Β Sequence[str],
          max_workflow_triggers:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8252,7 +8875,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8266,7 +8889,7 @@

          Methods

          return self.api_call("admin.workflows.permissions.lookup", params=kwargs)

          Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

          +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

          def admin_workflows_unpublish(self, *, workflow_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -8332,7 +8955,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8341,7 +8964,7 @@

          Methods

          return self.api_call("admin.workflows.unpublish", params=kwargs)

          Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

          +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

          def api_test(self, *, error:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8358,13 +8981,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs)

          Checks API calling code. -https://api.slack.com/methods/api.test

          +https://docs.slack.dev/reference/methods/api.test

          def apps_connections_open(self, *, app_token:Β str, **kwargs) ‑>Β SlackResponse @@ -8382,14 +9005,14 @@

          Methods

          ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

          Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

          +https://docs.slack.dev/reference/methods/apps.connections.open

          def apps_event_authorizations_list(self,
          *,
          event_context:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8409,14 +9032,14 @@

          Methods

          ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs)

          Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

          +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

          def apps_manifest_create(self, *, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -8433,7 +9056,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8442,7 +9065,7 @@

          Methods

          return self.api_call("apps.manifest.create", params=kwargs)

          Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

          +https://docs.slack.dev/reference/methods/apps.manifest.create

          def apps_manifest_delete(self, *, app_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8459,13 +9082,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs)

          Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

          +https://docs.slack.dev/reference/methods/apps.manifest.delete

          def apps_manifest_export(self, *, app_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8482,13 +9105,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs)

          Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

          +https://docs.slack.dev/reference/methods/apps.manifest.export

          def apps_manifest_update(self, *, app_id:Β str, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -8506,7 +9129,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8516,7 +9139,7 @@

          Methods

          return self.api_call("apps.manifest.update", params=kwargs)

          Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

          +https://docs.slack.dev/reference/methods/apps.manifest.update

          def apps_manifest_validate(self, *, manifest:Β strΒ |Β Dict[str,Β Any], app_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8534,7 +9157,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8544,7 +9167,7 @@

          Methods

          return self.api_call("apps.manifest.validate", params=kwargs)
          +https://docs.slack.dev/reference/methods/apps.manifest.validate

          def apps_uninstall(self, *, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β SlackResponse @@ -8562,16 +9185,16 @@

          Methods

          **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs)

          Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

          +https://docs.slack.dev/reference/methods/apps.uninstall

          -def assistant_threads_setStatus(self, *, channel_id:Β str, thread_ts:Β str, status:Β str, **kwargs) ‑>Β SlackResponse +def assistant_threads_setStatus(self,
          *,
          channel_id:Β str,
          thread_ts:Β str,
          status:Β str,
          loading_messages:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8584,16 +9207,20 @@

          Methods

          channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs)
          + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs)
          - +
          def assistant_threads_setSuggestedPrompts(self,
          *,
          channel_id:Β str,
          thread_ts:Β str,
          title:Β strΒ |Β NoneΒ =Β None,
          prompts:Β List[Dict[str,Β str]],
          **kwargs) ‑>Β SlackResponse
          @@ -8612,16 +9239,16 @@

          Methods

          prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: kwargs.update({"title": title}) return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
          - +

          Set suggested prompts for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

          def assistant_threads_setTitle(self, *, channel_id:Β str, thread_ts:Β str, title:Β str, **kwargs) ‑>Β SlackResponse @@ -8639,14 +9266,14 @@

          Methods

          title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
          - +

          Set the title for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

          def auth_revoke(self, *, test:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8663,13 +9290,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/auth.revoke

          def auth_teams_list(self,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          include_icon:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8687,13 +9314,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs)

          List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

          +https://docs.slack.dev/reference/methods/auth.teams.list

          def auth_test(self, **kwargs) ‑>Β SlackResponse @@ -8708,12 +9335,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs)

          Checks authentication & identity. -https://api.slack.com/methods/auth.test

          +https://docs.slack.dev/reference/methods/auth.test

          def bookmarks_add(self,
          *,
          channel_id:Β str,
          title:Β str,
          type:Β str,
          emoji:Β strΒ |Β NoneΒ =Β None,
          entity_id:Β strΒ |Β NoneΒ =Β None,
          link:Β strΒ |Β NoneΒ =Β None,
          parent_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8736,7 +9363,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -8752,7 +9379,7 @@

          Methods

          return self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/bookmarks.add

          def bookmarks_edit(self,
          *,
          bookmark_id:Β str,
          channel_id:Β str,
          emoji:Β strΒ |Β NoneΒ =Β None,
          link:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8773,7 +9400,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -8787,7 +9414,7 @@

          Methods

          return self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/bookmarks.edit

          def bookmarks_list(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8804,13 +9431,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

          List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

          +https://docs.slack.dev/reference/methods/bookmarks.list

          def bookmarks_remove(self, *, bookmark_id:Β str, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8828,13 +9455,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

          Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

          +https://docs.slack.dev/reference/methods/bookmarks.remove

          def bots_info(self, *, bot:Β strΒ |Β NoneΒ =Β None, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8852,13 +9479,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs)

          Gets information about a bot user. -https://api.slack.com/methods/bots.info

          +https://docs.slack.dev/reference/methods/bots.info

          def calls_add(self,
          *,
          external_unique_id:Β str,
          join_url:Β str,
          created_by:Β strΒ |Β NoneΒ =Β None,
          date_start:Β intΒ |Β NoneΒ =Β None,
          desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
          external_display_id:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          users:Β strΒ |Β Sequence[Dict[str,Β str]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8882,7 +9509,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -8902,7 +9529,7 @@

          Methods

          return self.api_call("calls.add", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/calls.add

          def calls_end(self, *, id:Β str, duration:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8920,13 +9547,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/calls.end

          def calls_info(self, *, id:Β str, **kwargs) ‑>Β SlackResponse @@ -8943,13 +9570,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs)

          Returns information about a Call. -https://api.slack.com/methods/calls.info

          +https://docs.slack.dev/reference/methods/calls.info

          def calls_participants_add(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β SlackResponse @@ -8967,14 +9594,14 @@

          Methods

          **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

          Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

          +https://docs.slack.dev/reference/methods/calls.participants.add

          def calls_participants_remove(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β SlackResponse @@ -8992,14 +9619,14 @@

          Methods

          **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

          Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

          +https://docs.slack.dev/reference/methods/calls.participants.remove

          def calls_update(self,
          *,
          id:Β str,
          desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
          join_url:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9019,7 +9646,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9032,7 +9659,7 @@

          Methods

          return self.api_call("calls.update", http_verb="POST", params=kwargs)

          Updates information about a Call. -https://api.slack.com/methods/calls.update

          +https://docs.slack.dev/reference/methods/calls.update

          def canvases_access_delete(self,
          *,
          canvas_id:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9051,7 +9678,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9067,7 +9694,7 @@

          Methods

          return self.api_call("canvases.access.delete", params=kwargs)

          Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

          +https://docs.slack.dev/reference/methods/canvases.access.delete

          def canvases_access_set(self,
          *,
          canvas_id:Β str,
          access_level:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9087,7 +9714,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9104,7 +9731,7 @@

          Methods

          return self.api_call("canvases.access.set", params=kwargs)

          Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

          +https://docs.slack.dev/reference/methods/canvases.access.set

          def canvases_create(self, *, title:Β strΒ |Β NoneΒ =Β None, document_content:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -9122,13 +9749,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.create

          def canvases_delete(self, *, canvas_id:Β str, **kwargs) ‑>Β SlackResponse @@ -9145,13 +9772,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.delete

          def canvases_edit(self, *, canvas_id:Β str, changes:Β Sequence[Dict[str,Β Any]], **kwargs) ‑>Β SlackResponse @@ -9169,13 +9796,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.edit

          def canvases_sections_lookup(self, *, canvas_id:Β str, criteria:Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -9193,13 +9820,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs)

          Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

          +https://docs.slack.dev/reference/methods/canvases.sections.lookup

          def channels_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -9516,6 +10143,38 @@

          Methods

          Unarchives a channel.

          +
          +def chat_appendStream(self, *, channel:Β str, ts:Β str, markdown_text:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def chat_appendStream(
          +    self,
          +    *,
          +    channel: str,
          +    ts: str,
          +    markdown_text: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Appends text to an existing streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.appendStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "ts": ts,
          +            "markdown_text": markdown_text,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("chat.appendStream", json=kwargs)
          +
          +

          Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

          +
          def chat_delete(self, *, channel:Β str, ts:Β str, as_user:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse
          @@ -9533,13 +10192,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.delete

          def chat_deleteScheduledMessage(self,
          *,
          channel:Β str,
          scheduled_message_id:Β str,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9558,7 +10217,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9570,7 +10229,7 @@

          Methods

          return self.api_call("chat.deleteScheduledMessage", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

          def chat_meMessage(self, *, channel:Β str, text:Β str, **kwargs) ‑>Β SlackResponse @@ -9612,16 +10271,16 @@

          Methods

          **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs)

          Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

          +https://docs.slack.dev/reference/methods/chat.meMessage

          -def chat_postEphemeral(self,
          *,
          channel:Β str,
          user:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_postEphemeral(self,
          *,
          channel:Β str,
          user:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9643,10 +10302,11 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -9662,19 +10322,20 @@

          Methods

          "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)

          Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

          +https://docs.slack.dev/reference/methods/chat.postEphemeral

          -def chat_postMessage(self,
          *,
          channel:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          container_id:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          mrkdwn:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_postMessage(self,
          *,
          channel:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          container_id:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          mrkdwn:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9700,11 +10361,12 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -9725,19 +10387,20 @@

          Methods

          "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)

          Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

          +https://docs.slack.dev/reference/methods/chat.postMessage

          -def chat_scheduleMessage(self,
          *,
          channel:Β str,
          post_at:Β strΒ |Β int,
          text:Β str,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_scheduleMessage(self,
          *,
          channel:Β str,
          post_at:Β strΒ |Β int,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9749,7 +10412,7 @@

          Methods

          *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9760,10 +10423,11 @@

          Methods

          unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -9780,16 +10444,17 @@

          Methods

          "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
          +https://docs.slack.dev/reference/methods/chat.scheduleMessage

          def chat_scheduledMessages_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9811,7 +10476,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -9826,10 +10491,199 @@

          Methods

          return self.api_call("chat.scheduledMessages.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

          + +
          +def chat_startStream(self,
          *,
          channel:Β str,
          thread_ts:Β str,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          recipient_team_id:Β strΒ |Β NoneΒ =Β None,
          recipient_user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def chat_startStream(
          +    self,
          +    *,
          +    channel: str,
          +    thread_ts: str,
          +    markdown_text: Optional[str] = None,
          +    recipient_team_id: Optional[str] = None,
          +    recipient_user_id: Optional[str] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Starts a new streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.startStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "thread_ts": thread_ts,
          +            "markdown_text": markdown_text,
          +            "recipient_team_id": recipient_team_id,
          +            "recipient_user_id": recipient_user_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("chat.startStream", json=kwargs)
          +
          +

          Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

          +
          +
          +def chat_stopStream(self,
          *,
          channel:Β str,
          ts:Β str,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def chat_stopStream(
          +    self,
          +    *,
          +    channel: str,
          +    ts: str,
          +    markdown_text: Optional[str] = None,
          +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
          +    metadata: Optional[Union[Dict, Metadata]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Stops a streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.stopStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "ts": ts,
          +            "markdown_text": markdown_text,
          +            "blocks": blocks,
          +            "metadata": metadata,
          +        }
          +    )
          +    _parse_web_class_objects(kwargs)
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("chat.stopStream", json=kwargs)
          +
          + +
          +
          +def chat_stream(self,
          *,
          buffer_size:Β intΒ =Β 256,
          channel:Β str,
          thread_ts:Β str,
          recipient_team_id:Β strΒ |Β NoneΒ =Β None,
          recipient_user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β ChatStream
          +
          +
          +
          + +Expand source code + +
          def chat_stream(
          +    self,
          +    *,
          +    buffer_size: int = 256,
          +    channel: str,
          +    thread_ts: str,
          +    recipient_team_id: Optional[str] = None,
          +    recipient_user_id: Optional[str] = None,
          +    **kwargs,
          +) -> ChatStream:
          +    """Stream markdown text into a conversation.
          +
          +    This method starts a new chat stream in a conversation that can be appended to. After appending an entire message,
          +    the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.
          +
          +    The following methods are used:
          +
          +    - chat.startStream: Starts a new streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.startStream).
          +    - chat.appendStream: Appends text to an existing streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.appendStream).
          +    - chat.stopStream: Stops a streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.stopStream).
          +
          +    Args:
          +        buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this
          +          value decreases the number of method calls made for the same amount of text, which is useful to avoid rate
          +          limits. Default: 256.
          +        channel: An encoded ID that represents a channel, private group, or DM.
          +        thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
          +          request.
          +        recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
          +          streaming to channels.
          +        recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +        **kwargs: Additional arguments passed to the underlying API calls.
          +
          +    Returns:
          +        ChatStream instance for managing the stream
          +
          +    Example:
          +        ```python
          +        streamer = client.chat_stream(
          +            channel="C0123456789",
          +            thread_ts="1700000001.123456",
          +            recipient_team_id="T0123456789",
          +            recipient_user_id="U0123456789",
          +        )
          +        streamer.append(markdown_text="**hello wo")
          +        streamer.append(markdown_text="rld!**")
          +        streamer.stop()
          +        ```
          +    """
          +    return ChatStream(
          +        self,
          +        logger=self._logger,
          +        channel=channel,
          +        thread_ts=thread_ts,
          +        recipient_team_id=recipient_team_id,
          +        recipient_user_id=recipient_user_id,
          +        buffer_size=buffer_size,
          +        **kwargs,
          +    )
          +
          +

          Stream markdown text into a conversation.

          +

          This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, +the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.

          +

          The following methods are used:

          +
            +
          • chat.startStream: Starts a new streaming conversation. +Reference.
          • +
          • chat.appendStream: Appends text to an existing streaming conversation. +Reference.
          • +
          • chat.stopStream: Stops a streaming conversation. +Reference.
          • +
          +

          Args

          +
          +
          buffer_size
          +
          The length of markdown_text to buffer in-memory before calling a stream method. Increasing this +value decreases the number of method calls made for the same amount of text, which is useful to avoid rate +limits. Default: 256.
          +
          channel
          +
          An encoded ID that represents a channel, private group, or DM.
          +
          thread_ts
          +
          Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
          +
          recipient_team_id
          +
          The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
          +
          recipient_user_id
          +
          The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Returns

          +

          ChatStream instance for managing the stream

          +

          Example

          +
          streamer = client.chat_stream(
          +    channel="C0123456789",
          +    thread_ts="1700000001.123456",
          +    recipient_team_id="T0123456789",
          +    recipient_user_id="U0123456789",
          +)
          +streamer.append(markdown_text="**hello wo")
          +streamer.append(markdown_text="rld!**")
          +streamer.stop()
          +
          -def chat_unfurl(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          ts:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          unfurl_id:Β strΒ |Β NoneΒ =Β None,
          unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
          user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          user_auth_message:Β strΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_unfurl(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          ts:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          unfurl_id:Β strΒ |Β NoneΒ =Β None,
          unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
          user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          user_auth_message:Β strΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9844,6 +10698,7 @@

          Methods

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -9851,7 +10706,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -9860,6 +10715,7 @@

          Methods

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -9872,10 +10728,10 @@

          Methods

          return self.api_call("chat.unfurl", json=kwargs)

          Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

          +https://docs.slack.dev/reference/methods/chat.unfurl

          -def chat_update(self,
          *,
          channel:Β str,
          ts:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_update(self,
          *,
          channel:Β str,
          ts:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9896,10 +10752,11 @@

          Methods

          parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -9913,6 +10770,7 @@

          Methods

          "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -9921,12 +10779,12 @@

          Methods

          kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)

          Updates a message in a channel. -https://api.slack.com/methods/chat.update

          +https://docs.slack.dev/reference/methods/chat.update

          def conversations_acceptSharedInvite(self,
          *,
          channel_name:Β str,
          channel_id:Β strΒ |Β NoneΒ =Β None,
          invite_id:Β strΒ |Β NoneΒ =Β None,
          free_trial_accepted:Β boolΒ |Β NoneΒ =Β None,
          is_private:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9948,7 +10806,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -9965,7 +10823,7 @@

          Methods

          return self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

          Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

          def conversations_approveSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -9983,13 +10841,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

          Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

          def conversations_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10006,13 +10864,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.archive

          def conversations_canvases_create(self, *, channel_id:Β str, document_content:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -10030,13 +10888,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.canvases.create

          def conversations_close(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10053,13 +10911,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs)

          Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

          +https://docs.slack.dev/reference/methods/conversations.close

          def conversations_create(self,
          *,
          name:Β str,
          is_private:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10078,13 +10936,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs)

          Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

          +https://docs.slack.dev/reference/methods/conversations.create

          def conversations_declineSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10102,13 +10960,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

          Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

          def conversations_externalInvitePermissions_set(self, *, action:Β str, channel:Β str, target_team:Β str, **kwargs) ‑>Β SlackResponse @@ -10122,7 +10980,7 @@

          Methods

          self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10134,7 +10992,7 @@

          Methods

          return self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

          Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

          +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

          def conversations_history(self,
          *,
          channel:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          inclusive:Β boolΒ |Β NoneΒ =Β None,
          include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10157,7 +11015,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10173,7 +11031,7 @@

          Methods

          return self.api_call("conversations.history", http_verb="GET", params=kwargs)

          Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

          +https://docs.slack.dev/reference/methods/conversations.history

          def conversations_info(self,
          *,
          channel:Β str,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          include_num_members:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10192,7 +11050,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10204,7 +11062,7 @@

          Methods

          return self.api_call("conversations.info", http_verb="GET", params=kwargs)

          Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

          +https://docs.slack.dev/reference/methods/conversations.info

          def conversations_invite(self,
          *,
          channel:Β str,
          users:Β strΒ |Β Sequence[str],
          force:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10223,7 +11081,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10238,7 +11096,7 @@

          Methods

          return self.api_call("conversations.invite", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.invite

          def conversations_inviteShared(self,
          *,
          channel:Β str,
          emails:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10257,7 +11115,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10273,7 +11131,7 @@

          Methods

          return self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

          Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

          +https://docs.slack.dev/reference/methods/conversations.inviteShared

          def conversations_join(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10290,13 +11148,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs)

          Joins an existing conversation. -https://api.slack.com/methods/conversations.join

          +https://docs.slack.dev/reference/methods/conversations.join

          def conversations_kick(self, *, channel:Β str, user:Β str, **kwargs) ‑>Β SlackResponse @@ -10314,13 +11172,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs)

          Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

          +https://docs.slack.dev/reference/methods/conversations.kick

          def conversations_leave(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10337,13 +11195,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.leave

          def conversations_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          exclude_archived:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10364,7 +11222,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10381,7 +11239,7 @@

          Methods

          return self.api_call("conversations.list", http_verb="GET", params=kwargs)

          Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

          +https://docs.slack.dev/reference/methods/conversations.list

          def conversations_listConnectInvites(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10401,14 +11259,14 @@

          Methods

          ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs)

          List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

          +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

          def conversations_mark(self, *, channel:Β str, ts:Β str, **kwargs) ‑>Β SlackResponse @@ -10426,13 +11284,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs)

          Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

          +https://docs.slack.dev/reference/methods/conversations.mark

          def conversations_members(self, *, channel:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10451,13 +11309,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs)

          Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

          +https://docs.slack.dev/reference/methods/conversations.members

          def conversations_open(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          return_im:Β boolΒ |Β NoneΒ =Β None,
          users:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10476,7 +11334,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10488,7 +11346,7 @@

          Methods

          return self.api_call("conversations.open", params=kwargs)

          Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

          +https://docs.slack.dev/reference/methods/conversations.open

          def conversations_rename(self, *, channel:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -10506,13 +11364,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.rename

          def conversations_replies(self,
          *,
          channel:Β str,
          ts:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          inclusive:Β boolΒ |Β NoneΒ =Β None,
          include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10536,7 +11394,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10553,7 +11411,7 @@

          Methods

          return self.api_call("conversations.replies", http_verb="GET", params=kwargs)

          Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

          +https://docs.slack.dev/reference/methods/conversations.replies

          def conversations_requestSharedInvite_approve(self,
          *,
          invite_id:Β str,
          channel_id:Β strΒ |Β NoneΒ =Β None,
          is_external_limited:Β strΒ |Β NoneΒ =Β None,
          message:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10573,7 +11431,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10587,7 +11445,7 @@

          Methods

          return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

          Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

          def conversations_requestSharedInvite_deny(self, *, invite_id:Β str, message:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10605,13 +11463,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

          Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

          def conversations_requestSharedInvite_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          include_approved:Β boolΒ |Β NoneΒ =Β None,
          include_denied:Β boolΒ |Β NoneΒ =Β None,
          include_expired:Β boolΒ |Β NoneΒ =Β None,
          invite_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10634,7 +11492,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -10654,7 +11512,7 @@

          Methods

          return self.api_call("conversations.requestSharedInvite.list", params=kwargs)

          Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

          def conversations_setPurpose(self, *, channel:Β str, purpose:Β str, **kwargs) ‑>Β SlackResponse @@ -10672,13 +11530,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs)

          Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

          +https://docs.slack.dev/reference/methods/conversations.setPurpose

          def conversations_setTopic(self, *, channel:Β str, topic:Β str, **kwargs) ‑>Β SlackResponse @@ -10696,13 +11554,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs)

          Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

          +https://docs.slack.dev/reference/methods/conversations.setTopic

          def conversations_unarchive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10719,13 +11577,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.unarchive

          def dialog_open(self, *, dialog:Β Dict[str,Β Any], trigger_id:Β str, **kwargs) ‑>Β SlackResponse @@ -10743,7 +11601,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -10751,7 +11609,7 @@

          Methods

          return self.api_call("dialog.open", json=kwargs)

          Open a dialog with a user. -https://api.slack.com/methods/dialog.open

          +https://docs.slack.dev/reference/methods/dialog.open

          def dnd_endDnd(self, **kwargs) ‑>Β SlackResponse @@ -10766,12 +11624,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs)

          Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

          +https://docs.slack.dev/reference/methods/dnd.endDnd

          def dnd_endSnooze(self, **kwargs) ‑>Β SlackResponse @@ -10786,12 +11644,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs)

          Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

          +https://docs.slack.dev/reference/methods/dnd.endSnooze

          def dnd_info(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10809,13 +11667,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs)

          Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

          +https://docs.slack.dev/reference/methods/dnd.info

          def dnd_setSnooze(self, *, num_minutes:Β strΒ |Β int, **kwargs) ‑>Β SlackResponse @@ -10832,13 +11690,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

          Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

          +https://docs.slack.dev/reference/methods/dnd.setSnooze

          def dnd_teamInfo(self, users:Β strΒ |Β Sequence[str], team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10855,7 +11713,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -10865,7 +11723,7 @@

          Methods

          return self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

          Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

          +https://docs.slack.dev/reference/methods/dnd.teamInfo

          def emoji_list(self, include_categories:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10881,13 +11739,48 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs)

          Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

          +https://docs.slack.dev/reference/methods/emoji.list

          + +
          +def entity_presentDetails(self,
          trigger_id:Β str,
          metadata:Β DictΒ |Β EntityMetadataΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          error:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def entity_presentDetails(
          +    self,
          +    trigger_id: str,
          +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
          +    user_auth_required: Optional[bool] = None,
          +    user_auth_url: Optional[str] = None,
          +    error: Optional[Dict[str, Any]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Provides entity details for the flexpane.
          +    https://docs.slack.dev/reference/methods/entity.presentDetails/
          +    """
          +    kwargs.update({"trigger_id": trigger_id})
          +    if metadata is not None:
          +        kwargs.update({"metadata": metadata})
          +    if user_auth_required is not None:
          +        kwargs.update({"user_auth_required": user_auth_required})
          +    if user_auth_url is not None:
          +        kwargs.update({"user_auth_url": user_auth_url})
          +    if error is not None:
          +        kwargs.update({"error": error})
          +    _parse_web_class_objects(kwargs)
          +    return self.api_call("entity.presentDetails", json=kwargs)
          +
          +

          Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

          def files_comments_delete(self, *, file:Β str, id:Β str, **kwargs) ‑>Β SlackResponse @@ -10905,13 +11798,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs)

          Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

          +https://docs.slack.dev/reference/methods/files.comments.delete

          def files_completeUploadExternal(self,
          *,
          files:Β List[Dict[str,Β str]],
          channel_id:Β strΒ |Β NoneΒ =Β None,
          channels:Β List[str]Β |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10932,7 +11825,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -10948,7 +11841,7 @@

          Methods

          return self.api_call("files.completeUploadExternal", params=kwargs)

          Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

          +https://docs.slack.dev/reference/methods/files.completeUploadExternal

          def files_delete(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -10965,13 +11858,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/files.delete

          def files_getUploadURLExternal(self,
          *,
          filename:Β str,
          length:Β int,
          alt_txt:Β strΒ |Β NoneΒ =Β None,
          snippet_type:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10991,7 +11884,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11004,7 +11897,7 @@

          Methods

          return self.api_call("files.getUploadURLExternal", params=kwargs)

          Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

          +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

          def files_info(self,
          *,
          file:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11025,7 +11918,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11039,7 +11932,7 @@

          Methods

          return self.api_call("files.info", http_verb="GET", params=kwargs)

          Gets information about a team file. -https://api.slack.com/methods/files.info

          +https://docs.slack.dev/reference/methods/files.info

          def files_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          count:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          show_files_hidden_by_limit:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          ts_from:Β strΒ |Β NoneΒ =Β None,
          ts_to:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11064,7 +11957,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11085,7 +11978,7 @@

          Methods

          return self.api_call("files.list", http_verb="GET", params=kwargs)

          Lists & filters team files. -https://api.slack.com/methods/files.list

          +https://docs.slack.dev/reference/methods/files.list

          def files_remote_add(self,
          *,
          external_id:Β str,
          external_url:Β str,
          title:Β str,
          filetype:Β strΒ |Β NoneΒ =Β None,
          indexable_file_contents:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          preview_image:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11107,7 +12000,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11134,7 +12027,7 @@

          Methods

          )

          Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

          +https://docs.slack.dev/reference/methods/files.remote.add

          def files_remote_info(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11152,13 +12045,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs)

          Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

          +https://docs.slack.dev/reference/methods/files.remote.info

          def files_remote_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          ts_from:Β strΒ |Β NoneΒ =Β None,
          ts_to:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11179,7 +12072,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11193,7 +12086,7 @@

          Methods

          return self.api_call("files.remote.list", http_verb="GET", params=kwargs)

          Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

          +https://docs.slack.dev/reference/methods/files.remote.list

          def files_remote_remove(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11211,13 +12104,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/files.remote.remove

          def files_remote_share(self,
          *,
          channels:Β strΒ |Β Sequence[str],
          external_id:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11236,7 +12129,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11248,7 +12141,7 @@

          Methods

          return self.api_call("files.remote.share", http_verb="GET", params=kwargs)

          Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

          +https://docs.slack.dev/reference/methods/files.remote.share

          def files_remote_update(self,
          *,
          external_id:Β strΒ |Β NoneΒ =Β None,
          external_url:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          filetype:Β strΒ |Β NoneΒ =Β None,
          indexable_file_contents:Β strΒ |Β NoneΒ =Β None,
          preview_image:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11271,7 +12164,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11299,7 +12192,7 @@

          Methods

          )

          Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

          +https://docs.slack.dev/reference/methods/files.remote.update

          def files_revokePublicURL(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -11316,13 +12209,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs)

          Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

          +https://docs.slack.dev/reference/methods/files.revokePublicURL

          def files_sharedPublicURL(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -11339,13 +12232,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs)

          Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

          +https://docs.slack.dev/reference/methods/files.sharedPublicURL

          def files_upload(self,
          *,
          file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
          filename:Β strΒ |Β NoneΒ =Β None,
          filetype:Β strΒ |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11369,7 +12262,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11402,7 +12295,7 @@

          Methods

          return self.api_call("files.upload", data=kwargs)

          Uploads or creates a file. -https://api.slack.com/methods/files.upload

          +https://docs.slack.dev/reference/methods/files.upload

          def files_upload_v2(self,
          *,
          filename:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β os.PathLikeΒ |Β NoneΒ =Β None,
          content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          alt_txt:Β strΒ |Β NoneΒ =Β None,
          snippet_type:Β strΒ |Β NoneΒ =Β None,
          file_uploads:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          channel:Β strΒ |Β NoneΒ =Β None,
          channels:Β List[str]Β |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          request_file_info:Β boolΒ =Β True,
          **kwargs) ‑>Β SlackResponse
          @@ -11433,12 +12326,12 @@

          Methods

          ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11517,14 +12410,14 @@

          Methods

          This wrapper method provides an easy way to upload files using the following endpoints:

          @@ -11544,13 +12437,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs)

          Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

          +https://docs.slack.dev/reference/methods/functions.completeError

          def functions_completeSuccess(self, *, function_execution_id:Β str, outputs:Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -11568,13 +12461,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs)

          Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

          +https://docs.slack.dev/reference/methods/functions.completeSuccess

          def groups_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12050,7 +12943,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12060,7 +12953,7 @@

          Methods

          return self.api_call("migration.exchange", http_verb="GET", params=kwargs)

          For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

          +https://docs.slack.dev/reference/methods/migration.exchange

          def mpim_close(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12207,7 +13100,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12219,7 +13112,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

          +https://docs.slack.dev/reference/methods/oauth.access

          def oauth_v2_access(self,
          *,
          client_id:Β str,
          client_secret:Β str,
          code:Β strΒ |Β NoneΒ =Β None,
          redirect_uri:Β strΒ |Β NoneΒ =Β None,
          grant_type:Β strΒ |Β NoneΒ =Β None,
          refresh_token:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12245,7 +13138,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12262,7 +13155,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

          +https://docs.slack.dev/reference/methods/oauth.v2.access

          def oauth_v2_exchange(self, *, token:Β str, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β SlackResponse @@ -12281,13 +13174,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs)

          Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

          +https://docs.slack.dev/reference/methods/oauth.v2.exchange

          def openid_connect_token(self,
          client_id:Β str,
          client_secret:Β str,
          code:Β strΒ |Β NoneΒ =Β None,
          redirect_uri:Β strΒ |Β NoneΒ =Β None,
          grant_type:Β strΒ |Β NoneΒ =Β None,
          refresh_token:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12308,7 +13201,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12325,7 +13218,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

          +https://docs.slack.dev/reference/methods/openid.connect.token

          def openid_connect_userInfo(self, **kwargs) ‑>Β SlackResponse @@ -12340,12 +13233,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs)

          Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

          +https://docs.slack.dev/reference/methods/openid.connect.userInfo

          def pins_add(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12363,13 +13256,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs)

          Pins an item to a channel. -https://api.slack.com/methods/pins.add

          +https://docs.slack.dev/reference/methods/pins.add

          def pins_list(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12386,13 +13279,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs)

          Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

          +https://docs.slack.dev/reference/methods/pins.list

          def pins_remove(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12410,13 +13303,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs)

          Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

          +https://docs.slack.dev/reference/methods/pins.remove

          def reactions_add(self, *, channel:Β str, name:Β str, timestamp:Β str, **kwargs) ‑>Β SlackResponse @@ -12435,13 +13328,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs)

          Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

          +https://docs.slack.dev/reference/methods/reactions.add

          def reactions_get(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          full:Β boolΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12462,7 +13355,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12476,7 +13369,7 @@

          Methods

          return self.api_call("reactions.get", http_verb="GET", params=kwargs)

          Gets reactions for an item. -https://api.slack.com/methods/reactions.get

          +https://docs.slack.dev/reference/methods/reactions.get

          def reactions_list(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          full:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12499,7 +13392,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12515,7 +13408,7 @@

          Methods

          return self.api_call("reactions.list", http_verb="GET", params=kwargs)

          Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

          +https://docs.slack.dev/reference/methods/reactions.list

          def reactions_remove(self,
          *,
          name:Β str,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12536,7 +13429,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12550,7 +13443,7 @@

          Methods

          return self.api_call("reactions.remove", params=kwargs)

          Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

          +https://docs.slack.dev/reference/methods/reactions.remove

          def reminders_add(self,
          *,
          text:Β str,
          time:Β str,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          recurrence:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12571,7 +13464,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12585,7 +13478,7 @@

          Methods

          return self.api_call("reminders.add", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.add

          def reminders_complete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12603,13 +13496,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.complete

          def reminders_delete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12627,13 +13520,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.delete

          def reminders_info(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12651,13 +13544,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs)

          Gets information about a reminder. -https://api.slack.com/methods/reminders.info

          +https://docs.slack.dev/reference/methods/reminders.info

          def reminders_list(self, *, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12674,13 +13567,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs)

          Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

          +https://docs.slack.dev/reference/methods/reminders.list

          def rtm_connect(self,
          *,
          batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
          presence_sub:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12698,13 +13591,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs)

          Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

          +https://docs.slack.dev/reference/methods/rtm.connect

          def rtm_start(self,
          *,
          batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          mpim_aware:Β boolΒ |Β NoneΒ =Β None,
          no_latest:Β boolΒ |Β NoneΒ =Β None,
          no_unreads:Β boolΒ |Β NoneΒ =Β None,
          presence_sub:Β boolΒ |Β NoneΒ =Β None,
          simple_latest:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12727,7 +13620,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -12743,7 +13636,7 @@

          Methods

          return self.api_call("rtm.start", http_verb="GET", params=kwargs)

          Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

          +https://docs.slack.dev/reference/methods/rtm.start

          def search_all(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12766,7 +13659,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -12782,7 +13675,7 @@

          Methods

          return self.api_call("search.all", http_verb="GET", params=kwargs)

          Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

          +https://docs.slack.dev/reference/methods/search.all

          def search_files(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12805,7 +13698,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -12821,7 +13714,7 @@

          Methods

          return self.api_call("search.files", http_verb="GET", params=kwargs)

          Searches for files matching a query. -https://api.slack.com/methods/search.files

          +https://docs.slack.dev/reference/methods/search.files

          def search_messages(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12845,7 +13738,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -12862,7 +13755,382 @@

          Methods

          return self.api_call("search.messages", http_verb="GET", params=kwargs)

          Searches for messages matching a query. -https://api.slack.com/methods/search.messages

          +https://docs.slack.dev/reference/methods/search.messages

          + +
          +def slackLists_access_delete(self,
          *,
          list_id:Β str,
          channel_ids:Β List[str]Β |Β NoneΒ =Β None,
          user_ids:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Revoke access to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.delete
          +    """
          +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.delete", json=kwargs)
          +
          +

          Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

          +
          +
          +def slackLists_access_set(self,
          *,
          list_id:Β str,
          access_level:Β str,
          channel_ids:Β List[str]Β |Β NoneΒ =Β None,
          user_ids:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_set(
          +    self,
          +    *,
          +    list_id: str,
          +    access_level: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Set the access level to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.set
          +    """
          +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.set", json=kwargs)
          +
          +

          Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

          +
          +
          +def slackLists_create(self,
          *,
          name:Β str,
          description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
          schema:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          copy_from_list_id:Β strΒ |Β NoneΒ =Β None,
          include_copied_list_records:Β boolΒ |Β NoneΒ =Β None,
          todo_mode:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_create(
          +    self,
          +    *,
          +    name: str,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    schema: Optional[List[Dict[str, Any]]] = None,
          +    copy_from_list_id: Optional[str] = None,
          +    include_copied_list_records: Optional[bool] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Creates a List.
          +    https://docs.slack.dev/reference/methods/slackLists.create
          +    """
          +    kwargs.update(
          +        {
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "schema": schema,
          +            "copy_from_list_id": copy_from_list_id,
          +            "include_copied_list_records": include_copied_list_records,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.create", json=kwargs)
          +
          + +
          +
          +def slackLists_download_get(self, *, list_id:Β str, job_id:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_get(
          +    self,
          +    *,
          +    list_id: str,
          +    job_id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Retrieve List download URL from an export job to download List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.get
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "job_id": job_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.get", json=kwargs)
          +
          +

          Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

          +
          +
          +def slackLists_download_start(self, *, list_id:Β str, include_archived:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_start(
          +    self,
          +    *,
          +    list_id: str,
          +    include_archived: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Initiate a job to export List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.start
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "include_archived": include_archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.start", json=kwargs)
          +
          + +
          +
          +def slackLists_items_create(self,
          *,
          list_id:Β str,
          duplicated_item_id:Β strΒ |Β NoneΒ =Β None,
          parent_item_id:Β strΒ |Β NoneΒ =Β None,
          initial_fields:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_create(
          +    self,
          +    *,
          +    list_id: str,
          +    duplicated_item_id: Optional[str] = None,
          +    parent_item_id: Optional[str] = None,
          +    initial_fields: Optional[List[Dict[str, Any]]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Add a new item to an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.create
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "duplicated_item_id": duplicated_item_id,
          +            "parent_item_id": parent_item_id,
          +            "initial_fields": initial_fields,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.create", json=kwargs)
          +
          + +
          +
          +def slackLists_items_delete(self, *, list_id:Β str, id:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Deletes an item from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.delete
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.delete", json=kwargs)
          +
          + +
          +
          +def slackLists_items_deleteMultiple(self, *, list_id:Β str, ids:Β List[str], **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_deleteMultiple(
          +    self,
          +    *,
          +    list_id: str,
          +    ids: List[str],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Deletes multiple items from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "ids": ids,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.deleteMultiple", json=kwargs)
          +
          + +
          +
          +def slackLists_items_info(self, *, list_id:Β str, id:Β str, include_is_subscribed:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_info(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    include_is_subscribed: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Get a row from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.info
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +            "include_is_subscribed": include_is_subscribed,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.info", json=kwargs)
          +
          + +
          +
          +def slackLists_items_list(self,
          *,
          list_id:Β str,
          limit:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          archived:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_list(
          +    self,
          +    *,
          +    list_id: str,
          +    limit: Optional[int] = None,
          +    cursor: Optional[str] = None,
          +    archived: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Get records from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.list
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "limit": limit,
          +            "cursor": cursor,
          +            "archived": archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.list", json=kwargs)
          +
          + +
          +
          +def slackLists_items_update(self, *, list_id:Β str, cells:Β List[Dict[str,Β Any]], **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_update(
          +    self,
          +    *,
          +    list_id: str,
          +    cells: List[Dict[str, Any]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Updates cells in a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.update
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "cells": cells,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.update", json=kwargs)
          +
          + +
          +
          +def slackLists_update(self,
          *,
          id:Β str,
          name:Β strΒ |Β NoneΒ =Β None,
          description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
          todo_mode:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_update(
          +    self,
          +    *,
          +    id: str,
          +    name: Optional[str] = None,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Update a List.
          +    https://docs.slack.dev/reference/methods/slackLists.update
          +    """
          +    kwargs.update(
          +        {
          +            "id": id,
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.update", json=kwargs)
          +
          +
          def stars_add(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12882,7 +14150,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -12895,7 +14163,7 @@

          Methods

          return self.api_call("stars.add", params=kwargs)
          +https://docs.slack.dev/reference/methods/stars.add

          def stars_list(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12916,7 +14184,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -12930,7 +14198,7 @@

          Methods

          return self.api_call("stars.list", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/stars.list

          def stars_remove(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12950,7 +14218,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -12963,7 +14231,7 @@

          Methods

          return self.api_call("stars.remove", params=kwargs)

          Removes a star from an item. -https://api.slack.com/methods/stars.remove

          +https://docs.slack.dev/reference/methods/stars.remove

          def team_accessLogs(self,
          *,
          before:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12985,7 +14253,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13000,7 +14268,7 @@

          Methods

          return self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

          Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

          +https://docs.slack.dev/reference/methods/team.accessLogs

          def team_billableInfo(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13018,13 +14286,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

          Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

          +https://docs.slack.dev/reference/methods/team.billableInfo

          def team_billing_info(self, **kwargs) ‑>Β SlackResponse @@ -13039,12 +14307,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs)

          Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

          +https://docs.slack.dev/reference/methods/team.billing.info

          def team_externalTeams_disconnect(self, *, target_team:Β str, **kwargs) ‑>Β SlackResponse @@ -13061,7 +14329,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13071,7 +14339,7 @@

          Methods

          return self.api_call("team.externalTeams.disconnect", params=kwargs)
          +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

          def team_externalTeams_list(self,
          *,
          connection_status_filter:Β strΒ |Β NoneΒ =Β None,
          slack_connect_pref_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
          sort_direction:Β strΒ |Β NoneΒ =Β None,
          sort_field:Β strΒ |Β NoneΒ =Β None,
          workspace_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13094,7 +14362,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13118,7 +14386,7 @@

          Methods

          return self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

          Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

          +https://docs.slack.dev/reference/methods/team.externalTeams.list

          def team_info(self, *, team:Β strΒ |Β NoneΒ =Β None, domain:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13136,13 +14404,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs)

          Gets information about the current team. -https://api.slack.com/methods/team.info

          +https://docs.slack.dev/reference/methods/team.info

          def team_integrationLogs(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          change_type:Β strΒ |Β NoneΒ =Β None,
          count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          service_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13165,7 +14433,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13181,7 +14449,7 @@

          Methods

          return self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

          Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

          +https://docs.slack.dev/reference/methods/team.integrationLogs

          def team_preferences_list(self, **kwargs) ‑>Β SlackResponse @@ -13196,12 +14464,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs)

          Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

          +https://docs.slack.dev/reference/methods/team.preferences.list

          def team_profile_get(self, *, visibility:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13218,13 +14486,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/team.profile.get

          def tooling_tokens_rotate(self, *, refresh_token:Β str, **kwargs) ‑>Β SlackResponse @@ -13241,13 +14509,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs)

          Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

          +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

          def usergroups_create(self,
          *,
          name:Β str,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          description:Β strΒ |Β NoneΒ =Β None,
          handle:Β strΒ |Β NoneΒ =Β None,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13269,7 +14537,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13287,7 +14555,7 @@

          Methods

          return self.api_call("usergroups.create", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.create

          def usergroups_disable(self,
          *,
          usergroup:Β str,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13306,13 +14574,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs)

          Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

          +https://docs.slack.dev/reference/methods/usergroups.disable

          def usergroups_enable(self,
          *,
          usergroup:Β str,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13331,13 +14599,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.enable

          def usergroups_list(self,
          *,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          include_disabled:Β boolΒ |Β NoneΒ =Β None,
          include_users:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13357,7 +14625,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13370,7 +14638,7 @@

          Methods

          return self.api_call("usergroups.list", http_verb="GET", params=kwargs)

          List all User Groups for a team -https://api.slack.com/methods/usergroups.list

          +https://docs.slack.dev/reference/methods/usergroups.list

          def usergroups_update(self,
          *,
          usergroup:Β str,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          description:Β strΒ |Β NoneΒ =Β None,
          handle:Β strΒ |Β NoneΒ =Β None,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          name:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13393,7 +14661,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13412,7 +14680,7 @@

          Methods

          return self.api_call("usergroups.update", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.update

          def usergroups_users_list(self,
          *,
          usergroup:Β str,
          include_disabled:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13431,7 +14699,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13443,7 +14711,7 @@

          Methods

          return self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.users.list

          def usergroups_users_update(self,
          *,
          usergroup:Β str,
          users:Β strΒ |Β Sequence[str],
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13463,7 +14731,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13479,7 +14747,7 @@

          Methods

          return self.api_call("usergroups.users.update", params=kwargs)

          Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

          +https://docs.slack.dev/reference/methods/usergroups.users.update

          def users_conversations(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          exclude_archived:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13501,7 +14769,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13519,7 +14787,7 @@

          Methods

          return self.api_call("users.conversations", http_verb="GET", params=kwargs)

          List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

          +https://docs.slack.dev/reference/methods/users.conversations

          def users_deletePhoto(self, **kwargs) ‑>Β SlackResponse @@ -13534,12 +14802,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.deletePhoto

          def users_discoverableContacts_lookup(self, email:Β str, **kwargs) ‑>Β SlackResponse @@ -13555,13 +14823,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs)

          Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

          +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

          def users_getPresence(self, *, user:Β str, **kwargs) ‑>Β SlackResponse @@ -13578,13 +14846,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs)

          Gets user presence information. -https://api.slack.com/methods/users.getPresence

          +https://docs.slack.dev/reference/methods/users.getPresence

          def users_identity(self, **kwargs) ‑>Β SlackResponse @@ -13599,12 +14867,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.identity

          def users_info(self, *, user:Β str, include_locale:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13622,13 +14890,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs)

          Gets information about a user. -https://api.slack.com/methods/users.info

          +https://docs.slack.dev/reference/methods/users.info

          def users_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13648,7 +14916,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -13661,7 +14929,7 @@

          Methods

          return self.api_call("users.list", http_verb="GET", params=kwargs)

          Lists all users in a Slack team. -https://api.slack.com/methods/users.list

          +https://docs.slack.dev/reference/methods/users.list

          def users_lookupByEmail(self, *, email:Β str, **kwargs) ‑>Β SlackResponse @@ -13678,13 +14946,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

          Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

          +https://docs.slack.dev/reference/methods/users.lookupByEmail

          def users_profile_get(self, *, user:Β strΒ |Β NoneΒ =Β None, include_labels:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13702,13 +14970,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs)

          Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

          +https://docs.slack.dev/reference/methods/users.profile.get

          def users_profile_set(self,
          *,
          name:Β strΒ |Β NoneΒ =Β None,
          value:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          profile:Β DictΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13728,7 +14996,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -13743,7 +15011,7 @@

          Methods

          return self.api_call("users.profile.set", json=kwargs)

          Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

          +https://docs.slack.dev/reference/methods/users.profile.set

          def users_setPhoto(self,
          *,
          image:Β strΒ |Β io.IOBase,
          crop_w:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          crop_x:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          crop_y:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13763,13 +15031,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
          +https://docs.slack.dev/reference/methods/users.setPhoto

          def users_setPresence(self, *, presence:Β str, **kwargs) ‑>Β SlackResponse @@ -13786,13 +15054,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.setPresence

          def views_open(self,
          *,
          trigger_id:Β strΒ |Β NoneΒ =Β None,
          interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
          view:Β dictΒ |Β View,
          **kwargs) ‑>Β SlackResponse
          @@ -13811,8 +15079,8 @@

          Methods

          **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13824,8 +15092,8 @@

          Methods

          return self.api_call("views.open", json=kwargs)
          +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

          def views_publish(self,
          *,
          user_id:Β str,
          view:Β dictΒ |Β View,
          hash:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13845,8 +15113,8 @@

          Methods

          ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -13859,8 +15127,8 @@

          Methods

          Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

          +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

          def views_push(self,
          *,
          trigger_id:Β strΒ |Β NoneΒ =Β None,
          interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
          view:Β dictΒ |Β View,
          **kwargs) ‑>Β SlackResponse
          @@ -13882,9 +15150,9 @@

          Methods

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13899,9 +15167,9 @@

          Methods

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

          +https://docs.slack.dev/reference/methods/views.push

          def views_update(self,
          *,
          view:Β dictΒ |Β View,
          external_id:Β strΒ |Β NoneΒ =Β None,
          view_id:Β strΒ |Β NoneΒ =Β None,
          hash:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13923,9 +15191,9 @@

          Methods

          """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -13945,9 +15213,119 @@

          Methods

          Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

          +https://docs.slack.dev/reference/methods/views.update

          + +
          +
          +
          + +Expand source code + +
          def workflows_featured_add(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Add featured workflows to a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.add
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return self.api_call("workflows.featured.add", params=kwargs)
          +
          + +
          + +
          +
          + +Expand source code + +
          def workflows_featured_list(
          +    self,
          +    *,
          +    channel_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """List the featured workflows for specified channels.
          +    https://docs.slack.dev/reference/methods/workflows.featured.list
          +    """
          +    if isinstance(channel_ids, (list, tuple)):
          +        kwargs.update({"channel_ids": ",".join(channel_ids)})
          +    else:
          +        kwargs.update({"channel_ids": channel_ids})
          +    return self.api_call("workflows.featured.list", params=kwargs)
          +
          +

          List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

          +
          + +
          +
          + +Expand source code + +
          def workflows_featured_remove(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Remove featured workflows from a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.remove
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return self.api_call("workflows.featured.remove", params=kwargs)
          +
          + +
          + +
          +
          + +Expand source code + +
          def workflows_featured_set(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Set featured workflows for a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.set
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return self.api_call("workflows.featured.set", params=kwargs)
          +
          +
          def workflows_stepCompleted(self, *, workflow_step_execute_id:Β str, outputs:Β dictΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13965,7 +15343,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -13975,7 +15353,7 @@

          Methods

          return self.api_call("workflows.stepCompleted", json=kwargs)

          Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

          +https://docs.slack.dev/reference/methods/workflows.stepCompleted

          def workflows_stepFailed(self, *, workflow_step_execute_id:Β str, error:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -13993,7 +15371,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14006,7 +15384,7 @@

          Methods

          return self.api_call("workflows.stepFailed", json=kwargs)

          Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

          +https://docs.slack.dev/reference/methods/workflows.stepFailed

          def workflows_updateStep(self,
          *,
          workflow_step_edit_id:Β str,
          inputs:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          outputs:Β List[Dict[str,Β str]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -14025,7 +15403,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14037,7 +15415,7 @@

          Methods

          return self.api_call("workflows.updateStep", json=kwargs)

          Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

          +https://docs.slack.dev/reference/methods/workflows.updateStep

          Inherited members

          @@ -14102,6 +15480,7 @@

          admin_conversations_convertToPrivate
        • admin_conversations_convertToPublic
        • admin_conversations_create
        • +
        • admin_conversations_createForObjects
        • admin_conversations_delete
        • admin_conversations_disconnectShared
        • admin_conversations_ekm_listOriginalConnectedChannelInfo
        • @@ -14109,6 +15488,7 @@

          admin_conversations_getCustomRetention
        • admin_conversations_getTeams
        • admin_conversations_invite
        • +
        • admin_conversations_linkObjects
        • admin_conversations_lookup
        • admin_conversations_removeCustomRetention
        • admin_conversations_rename
        • @@ -14120,6 +15500,7 @@

          admin_conversations_setCustomRetention
        • admin_conversations_setTeams
        • admin_conversations_unarchive
        • +
        • admin_conversations_unlinkObjects
        • admin_emoji_add
        • admin_emoji_addAlias
        • admin_emoji_list
        • @@ -14218,6 +15599,7 @@

          channels_setPurpose
        • channels_setTopic
        • channels_unarchive
        • +
        • chat_appendStream
        • chat_delete
        • chat_deleteScheduledMessage
        • chat_getPermalink
        • @@ -14226,6 +15608,9 @@

          chat_postMessage
        • chat_scheduleMessage
        • chat_scheduledMessages_list
        • +
        • chat_startStream
        • +
        • chat_stopStream
        • +
        • chat_stream
        • chat_unfurl
        • chat_update
        • conversations_acceptSharedInvite
        • @@ -14263,6 +15648,7 @@

          dnd_setSnooze
        • dnd_teamInfo
        • emoji_list
        • +
        • entity_presentDetails
        • files_comments_delete
        • files_completeUploadExternal
        • files_delete
        • @@ -14332,6 +15718,18 @@

          search_all
        • search_files
        • search_messages
        • +
        • slackLists_access_delete
        • +
        • slackLists_access_set
        • +
        • slackLists_create
        • +
        • slackLists_download_get
        • +
        • slackLists_download_start
        • +
        • slackLists_items_create
        • +
        • slackLists_items_delete
        • +
        • slackLists_items_deleteMultiple
        • +
        • slackLists_items_info
        • +
        • slackLists_items_list
        • +
        • slackLists_items_update
        • +
        • slackLists_update
        • stars_add
        • stars_list
        • stars_remove
        • @@ -14368,6 +15766,10 @@

          views_publish
        • views_push
        • views_update
        • +
        • workflows_featured_add
        • +
        • workflows_featured_list
        • +
        • workflows_featured_remove
        • +
        • workflows_featured_set
        • workflows_stepCompleted
        • workflows_stepFailed
        • workflows_updateStep
        • @@ -14379,7 +15781,7 @@

          -

          Generated by pdoc 0.11.5.

          +

          Generated by pdoc 0.11.6.

          diff --git a/docs/static/api-docs/slack_sdk/web/deprecation.html b/docs/reference/web/deprecation.html similarity index 95% rename from docs/static/api-docs/slack_sdk/web/deprecation.html rename to docs/reference/web/deprecation.html index 1b52090df..0b68d0c84 100644 --- a/docs/static/api-docs/slack_sdk/web/deprecation.html +++ b/docs/reference/web/deprecation.html @@ -3,7 +3,7 @@ - + slack_sdk.web.deprecation API documentation @@ -67,7 +67,7 @@

          Functions

          message = ( f"{method_name} is deprecated. Please use the Conversations API instead. " "For more info, go to " - "https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api" + "https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/" ) warnings.warn(message) @@ -76,7 +76,7 @@

          Functions

          if len(matched_prefixes) > 0: message = ( f"{method_name} is deprecated. For more info, go to " - "https://api.slack.com/changelog/2023-07-its-later-already-for-stars-and-reminders" + "https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders/" ) warnings.warn(message) @@ -85,7 +85,7 @@

          Functions

          if len(matched_prefixes) > 0: message = ( f"{method_name} is deprecated. For more info, go to " - "https://api.slack.com/changelog/2023-08-workflow-steps-from-apps-step-back" + "https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back/" ) warnings.warn(message)
          @@ -115,7 +115,7 @@

          Functions

          diff --git a/docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html b/docs/reference/web/file_upload_v2_result.html similarity index 98% rename from docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html rename to docs/reference/web/file_upload_v2_result.html index 16a7c3a9c..6cd74fcb3 100644 --- a/docs/static/api-docs/slack_sdk/web/file_upload_v2_result.html +++ b/docs/reference/web/file_upload_v2_result.html @@ -3,7 +3,7 @@ - + slack_sdk.web.file_upload_v2_result API documentation @@ -104,7 +104,7 @@

          diff --git a/docs/static/api-docs/slack_sdk/web/index.html b/docs/reference/web/index.html similarity index 81% rename from docs/static/api-docs/slack_sdk/web/index.html rename to docs/reference/web/index.html index 2394e0407..611a26b3b 100644 --- a/docs/static/api-docs/slack_sdk/web/index.html +++ b/docs/reference/web/index.html @@ -3,7 +3,7 @@ - + slack_sdk.web API documentation @@ -47,6 +47,10 @@

          Sub-modules

          +
          slack_sdk.web.async_chat_stream
          +
          +
          +
          slack_sdk.web.async_client

          A Python module for interacting with Slack's Web API.

          @@ -63,6 +67,10 @@

          Sub-modules

          A Python module for interacting with Slack's Web API.

          +
          slack_sdk.web.chat_stream
          +
          +
          +
          slack_sdk.web.client

          A Python module for interacting with Slack's Web API.

          @@ -420,7 +428,7 @@

          Raises

          class WebClient(BaseClient):
               """A WebClient allows apps to communicate with the Slack Platform's Web API.
           
          -    https://api.slack.com/methods
          +    https://docs.slack.dev/reference/methods
           
               The Slack Web API is an interface for querying information from
               and enacting change in a Slack workspace.
          @@ -491,7 +499,7 @@ 

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -513,7 +521,7 @@

          Raises

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -540,7 +548,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -561,7 +569,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -581,7 +589,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -601,7 +609,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -625,7 +633,7 @@

          Raises

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -652,7 +660,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -674,7 +682,7 @@

          Raises

          ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -705,7 +713,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -733,7 +741,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -750,7 +758,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -772,7 +780,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -792,7 +800,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -811,7 +819,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -821,6 +829,60 @@

          Raises

          kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> SlackResponse: + """Link a Salesforce record to a channel. + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> SlackResponse: + """Unlink a Salesforce record from a channel. + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -830,7 +892,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -850,7 +912,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -865,7 +927,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -886,7 +948,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -906,7 +968,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -926,7 +988,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -939,7 +1001,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -956,7 +1018,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -968,7 +1030,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -981,7 +1043,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -999,7 +1061,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -1030,7 +1092,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -1042,7 +1104,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -1055,7 +1117,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -1071,7 +1133,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -1084,7 +1146,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -1104,7 +1166,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -1132,7 +1194,7 @@

          Raises

          """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -1159,7 +1221,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -1182,7 +1244,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -1205,7 +1267,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -1230,7 +1292,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -1254,7 +1316,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -1272,7 +1334,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -1284,7 +1346,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -1297,7 +1359,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -1309,7 +1371,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -1334,7 +1396,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -1352,7 +1414,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1365,7 +1427,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1378,7 +1440,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1390,7 +1452,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1403,7 +1465,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1418,7 +1480,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1441,7 +1503,7 @@

          Raises

          ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1459,7 +1521,7 @@

          Raises

          ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1483,7 +1545,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1508,7 +1570,7 @@

          Raises

          ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1530,7 +1592,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1552,7 +1614,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1572,7 +1634,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1594,7 +1656,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1609,7 +1671,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1629,7 +1691,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1646,7 +1708,7 @@

          Raises

          ) -> SlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1664,7 +1726,7 @@

          Raises

          ) -> SlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1686,7 +1748,7 @@

          Raises

          ) -> SlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1703,7 +1765,7 @@

          Raises

          ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1721,7 +1783,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1735,7 +1797,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1755,7 +1817,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1774,7 +1836,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1795,7 +1857,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1816,7 +1878,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1836,7 +1898,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1850,7 +1912,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1862,7 +1924,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1875,7 +1937,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1888,7 +1950,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1901,7 +1963,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1914,7 +1976,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1928,7 +1990,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1946,7 +2008,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1964,7 +2026,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1983,7 +2045,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -2003,7 +2065,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -2035,7 +2097,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -2059,7 +2121,7 @@

          Raises

          def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -2067,7 +2129,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -2088,7 +2150,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -2101,7 +2163,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -2115,7 +2177,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -2128,7 +2190,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -2141,7 +2203,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -2162,7 +2224,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -2192,7 +2254,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -2213,7 +2275,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -2233,7 +2295,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -2252,7 +2314,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -2267,7 +2329,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -2280,7 +2342,7 @@

          Raises

          ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -2295,7 +2357,7 @@

          Raises

          ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -2308,7 +2370,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -2320,7 +2382,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2335,7 +2397,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -2347,7 +2409,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -2360,7 +2422,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2377,7 +2439,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2393,7 +2455,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2404,13 +2466,17 @@

          Raises

          channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2420,8 +2486,8 @@

          Raises

          title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2435,8 +2501,8 @@

          Raises

          prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2450,7 +2516,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2460,7 +2526,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2472,7 +2538,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2490,7 +2556,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2516,7 +2582,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2536,7 +2602,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2549,7 +2615,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2562,7 +2628,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2581,7 +2647,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2608,7 +2674,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2620,7 +2686,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2633,7 +2699,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2647,7 +2713,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2663,7 +2729,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2683,7 +2749,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2696,7 +2762,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2708,7 +2774,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2723,7 +2789,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2748,7 +2814,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2771,7 +2837,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2779,7 +2845,7 @@

          Raises

          # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2949,6 +3015,27 @@

          Raises

          # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> SlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2958,7 +3045,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2972,7 +3059,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2991,7 +3078,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -3004,7 +3091,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -3024,10 +3111,11 @@

          Raises

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -3043,11 +3131,12 @@

          Raises

          "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -3070,11 +3159,12 @@

          Raises

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -3095,11 +3185,12 @@

          Raises

          "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -3108,7 +3199,7 @@

          Raises

          *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -3119,10 +3210,11 @@

          Raises

          unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -3139,14 +3231,155 @@

          Raises

          "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + + def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> ChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + return ChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + def chat_unfurl( self, *, @@ -3155,6 +3388,7 @@

          Raises

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -3162,7 +3396,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -3171,6 +3405,7 @@

          Raises

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -3196,10 +3431,11 @@

          Raises

          parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -3213,6 +3449,7 @@

          Raises

          "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -3221,36 +3458,10 @@

          Raises

          kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> SlackResponse: - """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -3263,7 +3474,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -3287,7 +3498,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -3299,7 +3510,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -3311,7 +3522,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -3325,7 +3536,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -3338,7 +3549,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -3347,7 +3558,7 @@

          Raises

          self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3371,7 +3582,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3395,7 +3606,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3415,7 +3626,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3438,7 +3649,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3460,7 +3671,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3473,7 +3684,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3485,7 +3696,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3501,7 +3712,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3527,7 +3738,7 @@

          Raises

          ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3540,7 +3751,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3554,7 +3765,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3568,7 +3779,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3587,7 +3798,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3606,7 +3817,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3632,7 +3843,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3653,7 +3864,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3671,7 +3882,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3698,7 +3909,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3711,7 +3922,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3723,7 +3934,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3736,7 +3947,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3749,7 +3960,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3761,7 +3972,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3770,7 +3981,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3782,7 +3993,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3794,7 +4005,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3806,7 +4017,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3821,11 +4032,35 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> SlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -3834,7 +4069,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3846,7 +4081,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3862,7 +4097,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3890,7 +4125,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3918,7 +4153,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3934,7 +4169,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3959,7 +4194,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3998,7 +4233,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -4033,7 +4268,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -4047,7 +4282,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -4065,7 +4300,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -4077,7 +4312,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -4096,7 +4331,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -4149,12 +4384,12 @@

          Raises

          ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -4240,7 +4475,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -4263,7 +4498,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -4286,7 +4521,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -4299,7 +4534,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -4307,7 +4542,7 @@

          Raises

          # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4488,7 +4723,7 @@

          Raises

          # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4564,7 +4799,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4576,7 +4811,7 @@

          Raises

          # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4663,7 +4898,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4689,7 +4924,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4709,7 +4944,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4725,7 +4960,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4746,7 +4981,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4758,7 +4993,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4770,7 +5005,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4783,7 +5018,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4797,7 +5032,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4813,7 +5048,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4839,7 +5074,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4865,7 +5100,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4889,7 +5124,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4910,7 +5145,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4923,7 +5158,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4936,7 +5171,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4948,7 +5183,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4961,7 +5196,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4979,7 +5214,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -5007,7 +5242,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -5035,7 +5270,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -5064,7 +5299,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -5080,119 +5315,362 @@

          Raises

          ) return self.api_call("search.messages", http_verb="GET", params=kwargs) - def stars_add( + def slackLists_access_delete( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Adds a star to an item. - https://api.slack.com/methods/stars.add + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete """ - kwargs.update( - { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, - } - ) - return self.api_call("stars.add", params=kwargs) + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) - def stars_list( + def slackLists_access_set( self, *, - count: Optional[int] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, - page: Optional[int] = None, - team_id: Optional[str] = None, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Lists stars for a user. - https://api.slack.com/methods/stars.list + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create """ kwargs.update( { - "count": count, - "cursor": cursor, - "limit": limit, - "page": page, - "team_id": team_id, + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, } ) - return self.api_call("stars.list", http_verb="GET", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) - def stars_remove( + def slackLists_download_get( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + list_id: str, + job_id: str, **kwargs, ) -> SlackResponse: - """Removes a star from an item. - https://api.slack.com/methods/stars.remove + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get """ kwargs.update( { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, + "list_id": list_id, + "job_id": job_id, } ) - return self.api_call("stars.remove", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) - def team_accessLogs( + def slackLists_download_start( self, *, - before: Optional[Union[int, str]] = None, - count: Optional[Union[int, str]] = None, - page: Optional[Union[int, str]] = None, - team_id: Optional[str] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, + list_id: str, + include_archived: Optional[bool] = None, **kwargs, ) -> SlackResponse: - """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start """ kwargs.update( { - "before": before, - "count": count, - "page": page, - "team_id": team_id, - "cursor": cursor, - "limit": limit, + "list_id": list_id, + "include_archived": include_archived, } ) - return self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) - def team_billableInfo( + def slackLists_items_create( self, *, - team_id: Optional[str] = None, - user: Optional[str] = None, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, **kwargs, ) -> SlackResponse: - """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create """ - kwargs.update({"team_id": team_id, "user": user}) - return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) - def team_billing_info( + def slackLists_items_delete( self, + *, + list_id: str, + id: str, **kwargs, ) -> SlackResponse: - """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> SlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> SlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + + def stars_add( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Adds a star to an item. + https://docs.slack.dev/reference/methods/stars.add + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return self.api_call("stars.add", params=kwargs) + + def stars_list( + self, + *, + count: Optional[int] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + page: Optional[int] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists stars for a user. + https://docs.slack.dev/reference/methods/stars.list + """ + kwargs.update( + { + "count": count, + "cursor": cursor, + "limit": limit, + "page": page, + "team_id": team_id, + } + ) + return self.api_call("stars.list", http_verb="GET", params=kwargs) + + def stars_remove( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Removes a star from an item. + https://docs.slack.dev/reference/methods/stars.remove + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return self.api_call("stars.remove", params=kwargs) + + def team_accessLogs( + self, + *, + before: Optional[Union[int, str]] = None, + count: Optional[Union[int, str]] = None, + page: Optional[Union[int, str]] = None, + team_id: Optional[str] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + **kwargs, + ) -> SlackResponse: + """Gets the access logs for the current team. + https://docs.slack.dev/reference/methods/team.accessLogs + """ + kwargs.update( + { + "before": before, + "count": count, + "page": page, + "team_id": team_id, + "cursor": cursor, + "limit": limit, + } + ) + return self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + + def team_billableInfo( + self, + *, + team_id: Optional[str] = None, + user: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Gets billable users information for the current team. + https://docs.slack.dev/reference/methods/team.billableInfo + """ + kwargs.update({"team_id": team_id, "user": user}) + return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + + def team_billing_info( + self, + **kwargs, + ) -> SlackResponse: + """Reads a workspace's billing plan information. + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -5203,7 +5681,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -5225,7 +5703,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -5256,7 +5734,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -5274,7 +5752,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -5296,7 +5774,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -5306,7 +5784,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -5322,7 +5800,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -5348,7 +5826,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5362,7 +5840,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5377,7 +5855,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5402,7 +5880,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5429,7 +5907,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5450,7 +5928,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5477,7 +5955,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5499,7 +5977,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5510,7 +5988,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5520,7 +5998,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5532,7 +6010,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5547,7 +6025,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5566,7 +6044,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5581,7 +6059,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5593,7 +6071,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5604,7 +6082,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5617,7 +6095,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5632,7 +6110,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5655,8 +6133,8 @@

          Raises

          **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5679,9 +6157,9 @@

          Raises

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5704,9 +6182,9 @@

          Raises

          """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5733,8 +6211,8 @@

          Raises

          ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5745,6 +6223,72 @@

          Raises

          # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5753,7 +6297,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5770,7 +6314,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5791,7 +6335,7 @@

          Raises

          **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5803,7 +6347,7 @@

          Raises

          return self.api_call("workflows.updateStep", json=kwargs)

          A WebClient allows apps to communicate with the Slack Platform's Web API.

          -

          https://api.slack.com/methods

          +

          https://docs.slack.dev/reference/methods

          The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

          This client handles constructing and sending HTTP requests to Slack @@ -5883,7 +6427,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5893,7 +6437,7 @@

          Methods

          return self.api_call("admin.analytics.getFile", params=kwargs)

          Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

          +https://docs.slack.dev/reference/methods/admin.analytics.getFile

          def admin_apps_activities_list(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          component_id:Β strΒ |Β NoneΒ =Β None,
          component_type:Β strΒ |Β NoneΒ =Β None,
          log_event_type:Β strΒ |Β NoneΒ =Β None,
          max_date_created:Β intΒ |Β NoneΒ =Β None,
          min_date_created:Β intΒ |Β NoneΒ =Β None,
          min_log_level:Β strΒ |Β NoneΒ =Β None,
          sort_direction:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          trace_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5922,7 +6466,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5944,7 +6488,7 @@

          Methods

          return self.api_call("admin.apps.activities.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.apps.activities.list

          def admin_apps_approve(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          request_id:Β strΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -5967,7 +6511,7 @@

          Methods

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5988,7 +6532,7 @@

          Methods

          Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

          +https://docs.slack.dev/reference/methods/admin.apps.approve

          def admin_apps_approved_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6008,7 +6552,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -6021,7 +6565,7 @@

          Methods

          return self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

          List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

          +https://docs.slack.dev/reference/methods/admin.apps.approved.list

          def admin_apps_clearResolution(self,
          *,
          app_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6040,7 +6584,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -6052,7 +6596,7 @@

          Methods

          return self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

          def admin_apps_config_lookup(self, *, app_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6069,7 +6613,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -6078,7 +6622,7 @@

          Methods

          return self.api_call("admin.apps.config.lookup", params=kwargs)

          Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

          +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

          def admin_apps_config_set(self,
          *,
          app_id:Β str,
          domain_restrictions:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          workflow_auth_strategy:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6097,7 +6641,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -6110,7 +6654,7 @@

          Methods

          return self.api_call("admin.apps.config.set", params=kwargs)

          Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

          +https://docs.slack.dev/reference/methods/admin.apps.config.set

          def admin_apps_requests_cancel(self,
          *,
          request_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6129,7 +6673,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -6141,7 +6685,7 @@

          Methods

          return self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

          List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

          +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

          def admin_apps_requests_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6160,7 +6704,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -6172,7 +6716,7 @@

          Methods

          return self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

          List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

          +https://docs.slack.dev/reference/methods/admin.apps.requests.list

          def admin_apps_restrict(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          request_id:Β strΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6195,7 +6739,7 @@

          Methods

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -6216,7 +6760,7 @@

          Methods

          Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

          +https://docs.slack.dev/reference/methods/admin.apps.restrict

          def admin_apps_restricted_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6236,7 +6780,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -6249,7 +6793,7 @@

          Methods

          return self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

          List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

          +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

          def admin_apps_uninstall(self,
          *,
          app_id:Β str,
          enterprise_id:Β strΒ |Β NoneΒ =Β None,
          team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6269,7 +6813,7 @@

          Methods

          ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -6283,7 +6827,7 @@

          Methods

          Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

          +https://docs.slack.dev/reference/methods/admin.apps.uninstall

          def admin_auth_policy_assignEntities(self,
          *,
          entity_ids:Β strΒ |Β Sequence[str],
          policy_name:Β str,
          entity_type:Β str,
          **kwargs) ‑>Β SlackResponse
          @@ -6302,7 +6846,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6313,7 +6857,7 @@

          Methods

          return self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

          Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

          def admin_auth_policy_getEntities(self,
          *,
          policy_name:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          entity_type:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6333,7 +6877,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -6345,7 +6889,7 @@

          Methods

          return self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

          Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

          def admin_auth_policy_removeEntities(self,
          *,
          entity_ids:Β strΒ |Β Sequence[str],
          policy_name:Β str,
          entity_type:Β str,
          **kwargs) ‑>Β SlackResponse
          @@ -6364,7 +6908,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6375,7 +6919,7 @@

          Methods

          return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

          Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

          +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

          def admin_barriers_create(self,
          *,
          barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
          primary_usergroup_id:Β str,
          restricted_subjects:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -6394,7 +6938,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6408,7 +6952,7 @@

          Methods

          return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.barriers.create

          def admin_barriers_delete(self, *, barrier_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6425,13 +6969,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

          Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

          +https://docs.slack.dev/reference/methods/admin.barriers.delete

          def admin_barriers_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6449,7 +6993,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6459,7 +7003,7 @@

          Methods

          return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

          Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

          +https://docs.slack.dev/reference/methods/admin.barriers.list

          def admin_barriers_update(self,
          *,
          barrier_id:Β str,
          barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
          primary_usergroup_id:Β str,
          restricted_subjects:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -6479,7 +7023,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6493,7 +7037,7 @@

          Methods

          return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

          Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

          +https://docs.slack.dev/reference/methods/admin.barriers.update

          def admin_conversations_archive(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6510,13 +7054,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs)

          Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

          +https://docs.slack.dev/reference/methods/admin.conversations.archive

          def admin_conversations_bulkArchive(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6533,13 +7077,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs)

          Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

          +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

          def admin_conversations_bulkDelete(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6580,7 +7124,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6591,7 +7135,7 @@

          Methods

          return self.api_call("admin.conversations.bulkMove", params=kwargs)

          Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

          +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

          def admin_conversations_convertToPrivate(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6608,13 +7152,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs)

          Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

          +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

          def admin_conversations_convertToPublic(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6631,13 +7175,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs)

          Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

          +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

          def admin_conversations_create(self,
          *,
          is_private:Β bool,
          name:Β str,
          description:Β strΒ |Β NoneΒ =Β None,
          org_wide:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6658,7 +7202,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6672,7 +7216,34 @@

          Methods

          return self.api_call("admin.conversations.create", params=kwargs)

          Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

          +https://docs.slack.dev/reference/methods/admin.conversations.create

          + +
          +def admin_conversations_createForObjects(self,
          *,
          object_id:Β str,
          salesforce_org_id:Β str,
          invite_object_team:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def admin_conversations_createForObjects(
          +    self,
          +    *,
          +    object_id: str,
          +    salesforce_org_id: str,
          +    invite_object_team: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Create a Salesforce channel for the corresponding object provided.
          +    https://docs.slack.dev/reference/methods/admin.conversations.createForObjects
          +    """
          +    kwargs.update(
          +        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
          +    )
          +    return self.api_call("admin.conversations.createForObjects", params=kwargs)
          +
          +

          Create a Salesforce channel for the corresponding object provided. +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

          def admin_conversations_delete(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6689,13 +7260,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.delete

          def admin_conversations_disconnectShared(self,
          *,
          channel_id:Β str,
          leaving_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6713,7 +7284,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6723,7 +7294,7 @@

          Methods

          return self.api_call("admin.conversations.disconnectShared", params=kwargs)

          Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

          +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

          def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
          *,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6745,7 +7316,7 @@

          Methods

          """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6766,7 +7337,7 @@

          Methods

          List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

          +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

          def admin_conversations_getConversationPrefs(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6783,13 +7354,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

          Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

          +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

          def admin_conversations_getCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6806,13 +7377,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

          def admin_conversations_getTeams(self,
          *,
          channel_id:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6831,7 +7402,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6843,7 +7414,7 @@

          Methods

          return self.api_call("admin.conversations.getTeams", params=kwargs)

          Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

          +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

          def admin_conversations_invite(self, *, channel_id:Β str, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -6861,7 +7432,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6872,7 +7443,38 @@

          Methods

          return self.api_call("admin.conversations.invite", params=kwargs)

          Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

          +https://docs.slack.dev/reference/methods/admin.conversations.invite

          + +
          +def admin_conversations_linkObjects(self, *, channel:Β str, record_id:Β str, salesforce_org_id:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def admin_conversations_linkObjects(
          +    self,
          +    *,
          +    channel: str,
          +    record_id: str,
          +    salesforce_org_id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Link a Salesforce record to a channel.
          +    https://docs.slack.dev/reference/methods/admin.conversations.linkObjects
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "record_id": record_id,
          +            "salesforce_org_id": salesforce_org_id,
          +        }
          +    )
          +    return self.api_call("admin.conversations.linkObjects", params=kwargs)
          +
          +
          def admin_conversations_lookup(self,
          *,
          last_message_activity_before:Β int,
          team_ids:Β strΒ |Β Sequence[str],
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          max_member_count:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -6893,7 +7495,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -6910,7 +7512,7 @@

          Methods

          return self.api_call("admin.conversations.lookup", params=kwargs)

          Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

          +https://docs.slack.dev/reference/methods/admin.conversations.lookup

          def admin_conversations_removeCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -6927,13 +7529,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

          def admin_conversations_rename(self, *, channel_id:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -6951,13 +7553,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.rename

          def admin_conversations_restrictAccess_addGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -6976,7 +7578,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6992,7 +7594,7 @@

          Methods

          )

          Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

          def admin_conversations_restrictAccess_listGroups(self, *, channel_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7010,7 +7612,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -7025,7 +7627,7 @@

          Methods

          )
          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

          def admin_conversations_restrictAccess_removeGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -7044,7 +7646,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -7060,7 +7662,7 @@

          Methods

          )

          Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

          +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

          def admin_conversations_setConversationPrefs(self, *, channel_id:Β str, prefs:Β strΒ |Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -7126,7 +7728,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -7136,7 +7738,7 @@

          Methods

          return self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

          Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

          +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

          def admin_conversations_setCustomRetention(self, *, channel_id:Β str, duration_days:Β int, **kwargs) ‑>Β SlackResponse @@ -7154,13 +7756,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

          def admin_conversations_setTeams(self,
          *,
          channel_id:Β str,
          org_channel:Β boolΒ |Β NoneΒ =Β None,
          target_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7180,7 +7782,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -7196,7 +7798,7 @@

          Methods

          return self.api_call("admin.conversations.setTeams", params=kwargs)

          Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

          +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

          def admin_conversations_unarchive(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -7213,37 +7815,66 @@

          Methods

          **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs)

          Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

          +https://docs.slack.dev/reference/methods/admin.conversations.archive

          -
          -def admin_emoji_add(self, *, name:Β str, url:Β str, **kwargs) ‑>Β SlackResponse +
          +def admin_conversations_unlinkObjects(self, *, channel:Β str, new_name:Β str, **kwargs) ‑>Β SlackResponse
          Expand source code -
          def admin_emoji_add(
          +
          def admin_conversations_unlinkObjects(
               self,
               *,
          -    name: str,
          +    channel: str,
          +    new_name: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Unlink a Salesforce record from a channel.
          +    https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "new_name": new_name,
          +        }
          +    )
          +    return self.api_call("admin.conversations.unlinkObjects", params=kwargs)
          +
          + +
          +
          +def admin_emoji_add(self, *, name:Β str, url:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def admin_emoji_add(
          +    self,
          +    *,
          +    name: str,
               url: str,
               **kwargs,
           ) -> SlackResponse:
               """Add an emoji.
          -    https://api.slack.com/methods/admin.emoji.add
          +    https://docs.slack.dev/reference/methods/admin.emoji.add
               """
               kwargs.update({"name": name, "url": url})
               return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.add

          def admin_emoji_addAlias(self, *, alias_for:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -7261,13 +7892,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

          def admin_emoji_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7285,13 +7916,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

          List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

          +https://docs.slack.dev/reference/methods/admin.emoji.list

          def admin_emoji_remove(self, *, name:Β str, **kwargs) ‑>Β SlackResponse @@ -7308,13 +7939,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

          Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

          +https://docs.slack.dev/reference/methods/admin.emoji.remove

          def admin_emoji_rename(self, *, name:Β str, new_name:Β str, **kwargs) ‑>Β SlackResponse @@ -7332,13 +7963,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.emoji.rename

          def admin_functions_list(self,
          *,
          app_ids:Β strΒ |Β Sequence[str],
          team_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7358,7 +7989,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7374,7 +8005,7 @@

          Methods

          return self.api_call("admin.functions.list", params=kwargs)

          Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

          +https://docs.slack.dev/reference/methods/admin.functions.list

          def admin_functions_permissions_lookup(self, *, function_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7392,7 +8023,7 @@

          Methods

          ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7402,7 +8033,7 @@

          Methods

          Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

          +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

          def admin_functions_permissions_set(self,
          *,
          function_id:Β str,
          visibility:Β str,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7422,7 +8053,7 @@

          Methods

          ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7439,7 +8070,7 @@

          Methods

          Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

          +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

          def admin_inviteRequests_approve(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7457,13 +8088,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

          def admin_inviteRequests_approved_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7482,7 +8113,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7494,7 +8125,7 @@

          Methods

          return self.api_call("admin.inviteRequests.approved.list", params=kwargs)

          List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

          def admin_inviteRequests_denied_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7513,7 +8144,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7525,7 +8156,7 @@

          Methods

          return self.api_call("admin.inviteRequests.denied.list", params=kwargs)

          List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

          def admin_inviteRequests_deny(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7543,13 +8174,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

          def admin_inviteRequests_list(self, **kwargs) ‑>Β SlackResponse @@ -7585,7 +8216,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7599,7 +8230,7 @@

          Methods

          return self.api_call("admin.roles.addAssignments", params=kwargs)

          Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

          def admin_roles_listAssignments(self,
          *,
          role_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          entity_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7621,7 +8252,7 @@

          Methods

          ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7636,7 +8267,7 @@

          Methods

          Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

          def admin_roles_removeAssignments(self,
          *,
          role_id:Β str,
          entity_ids:Β strΒ |Β Sequence[str],
          user_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -7655,7 +8286,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7669,7 +8300,7 @@

          Methods

          return self.api_call("admin.roles.removeAssignments", params=kwargs)

          Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

          +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

          def admin_teams_admins_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7688,7 +8319,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7700,7 +8331,7 @@

          Methods

          return self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

          List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

          +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

          def admin_teams_create(self,
          *,
          team_domain:Β str,
          team_name:Β str,
          team_description:Β strΒ |Β NoneΒ =Β None,
          team_discoverability:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7720,7 +8351,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7733,7 +8364,7 @@

          Methods

          return self.api_call("admin.teams.create", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.create

          def admin_teams_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7751,13 +8382,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs)

          List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

          +https://docs.slack.dev/reference/methods/admin.teams.list

          def admin_teams_owners_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -7776,13 +8407,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

          List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

          +https://docs.slack.dev/reference/methods/admin.teams.owners.list

          def admin_teams_settings_info(self, *, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -7799,13 +8430,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs)

          Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

          +https://docs.slack.dev/reference/methods/admin.teams.settings.info

          def admin_teams_settings_setDefaultChannels(self, *, team_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -7823,7 +8454,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7833,7 +8464,7 @@

          Methods

          return self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

          def admin_teams_settings_setDescription(self, *, team_id:Β str, description:Β str, **kwargs) ‑>Β SlackResponse @@ -7851,13 +8482,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

          def admin_teams_settings_setDiscoverability(self, *, team_id:Β str, discoverability:Β str, **kwargs) ‑>Β SlackResponse @@ -7875,13 +8506,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

          def admin_teams_settings_setIcon(self, *, team_id:Β str, image_url:Β str, **kwargs) ‑>Β SlackResponse @@ -7899,13 +8530,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

          def admin_teams_settings_setName(self, *, team_id:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -7923,13 +8554,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

          def admin_usergroups_addChannels(self,
          *,
          channel_ids:Β strΒ |Β Sequence[str],
          usergroup_id:Β str,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7948,7 +8579,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7958,7 +8589,7 @@

          Methods

          return self.api_call("admin.usergroups.addChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

          def admin_usergroups_addTeams(self,
          *,
          usergroup_id:Β str,
          team_ids:Β strΒ |Β Sequence[str],
          auto_provision:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -7977,7 +8608,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7987,7 +8618,7 @@

          Methods

          return self.api_call("admin.usergroups.addTeams", params=kwargs)

          Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

          +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

          def admin_usergroups_listChannels(self,
          *,
          usergroup_id:Β str,
          include_num_members:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8006,7 +8637,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -8018,7 +8649,7 @@

          Methods

          return self.api_call("admin.usergroups.listChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

          def admin_usergroups_removeChannels(self, *, usergroup_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -8036,7 +8667,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -8046,7 +8677,7 @@

          Methods

          return self.api_call("admin.usergroups.removeChannels", params=kwargs)

          Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

          +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

          def admin_users_assign(self,
          *,
          team_id:Β str,
          user_id:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          is_restricted:Β boolΒ |Β NoneΒ =Β None,
          is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8067,7 +8698,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -8084,7 +8715,7 @@

          Methods

          return self.api_call("admin.users.assign", params=kwargs)

          Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

          +https://docs.slack.dev/reference/methods/admin.users.assign

          def admin_users_invite(self,
          *,
          team_id:Β str,
          email:Β str,
          channel_ids:Β strΒ |Β Sequence[str],
          custom_message:Β strΒ |Β NoneΒ =Β None,
          email_password_policy_enabled:Β boolΒ |Β NoneΒ =Β None,
          guest_expiration_ts:Β strΒ |Β floatΒ |Β NoneΒ =Β None,
          is_restricted:Β boolΒ |Β NoneΒ =Β None,
          is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
          real_name:Β strΒ |Β NoneΒ =Β None,
          resend:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8110,7 +8741,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -8132,10 +8763,10 @@

          Methods

          return self.api_call("admin.users.invite", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.users.invite

          -def admin_users_list(self,
          *,
          team_id:Β str,
          include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
          is_active:Β boolΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def admin_users_list(self,
          *,
          team_id:Β strΒ |Β NoneΒ =Β None,
          include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
          is_active:Β boolΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8145,7 +8776,7 @@

          Methods

          def admin_users_list(
               self,
               *,
          -    team_id: str,
          +    team_id: Optional[str] = None,
               include_deactivated_user_workspaces: Optional[bool] = None,
               is_active: Optional[bool] = None,
               cursor: Optional[str] = None,
          @@ -8153,7 +8784,7 @@ 

          Methods

          **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -8167,7 +8798,7 @@

          Methods

          return self.api_call("admin.users.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/admin.users.list

          def admin_users_remove(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8185,13 +8816,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs)

          Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

          +https://docs.slack.dev/reference/methods/admin.users.remove

          def admin_users_session_clearSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -8209,7 +8840,7 @@

          Methods

          ) -> SlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8219,7 +8850,7 @@

          Methods

          Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

          def admin_users_session_getSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -8237,7 +8868,7 @@

          Methods

          ) -> SlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8247,7 +8878,7 @@

          Methods

          Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

          def admin_users_session_invalidate(self, *, session_id:Β str, team_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8265,13 +8896,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs)

          Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

          +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

          def admin_users_session_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8291,7 +8922,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -8304,7 +8935,7 @@

          Methods

          return self.api_call("admin.users.session.list", params=kwargs)

          Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

          +https://docs.slack.dev/reference/methods/admin.users.session.list

          def admin_users_session_reset(self,
          *,
          user_id:Β str,
          mobile_only:Β boolΒ |Β NoneΒ =Β None,
          web_only:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8323,7 +8954,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -8335,7 +8966,7 @@

          Methods

          return self.api_call("admin.users.session.reset", params=kwargs)

          Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

          +https://docs.slack.dev/reference/methods/admin.users.session.reset

          def admin_users_session_resetBulk(self,
          *,
          user_ids:Β strΒ |Β Sequence[str],
          mobile_only:Β boolΒ |Β NoneΒ =Β None,
          web_only:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8354,7 +8985,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8369,7 +9000,7 @@

          Methods

          return self.api_call("admin.users.session.resetBulk", params=kwargs)

          Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

          +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

          def admin_users_session_setSettings(self,
          *,
          user_ids:Β strΒ |Β Sequence[str],
          desktop_app_browser_quit:Β boolΒ |Β NoneΒ =Β None,
          duration:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8389,7 +9020,7 @@

          Methods

          ) -> SlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8405,7 +9036,7 @@

          Methods

          Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

          +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

          def admin_users_setAdmin(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8423,13 +9054,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs)

          Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

          +https://docs.slack.dev/reference/methods/admin.users.setAdmin

          def admin_users_setExpiration(self, *, expiration_ts:Β int, user_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8448,13 +9079,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs)

          Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

          +https://docs.slack.dev/reference/methods/admin.users.setExpiration

          def admin_users_setOwner(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8472,13 +9103,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs)

          Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

          +https://docs.slack.dev/reference/methods/admin.users.setOwner

          def admin_users_setRegular(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8496,13 +9127,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs)

          Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

          +https://docs.slack.dev/reference/methods/admin.users.setRegular

          def admin_users_unsupportedVersions_export(self,
          *,
          date_end_of_support:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          date_sessions_started:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8521,7 +9152,7 @@

          Methods

          ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8533,7 +9164,7 @@

          Methods

          Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

          +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

          def admin_workflows_collaborators_add(self,
          *,
          collaborator_ids:Β strΒ |Β Sequence[str],
          workflow_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -8551,7 +9182,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8564,7 +9195,7 @@

          Methods

          return self.api_call("admin.workflows.collaborators.add", params=kwargs)

          Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

          +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

          def admin_workflows_collaborators_remove(self,
          *,
          collaborator_ids:Β strΒ |Β Sequence[str],
          workflow_ids:Β strΒ |Β Sequence[str],
          **kwargs) ‑>Β SlackResponse
          @@ -8582,7 +9213,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8595,7 +9226,7 @@

          Methods

          return self.api_call("admin.workflows.collaborators.remove", params=kwargs)

          Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

          +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

          def admin_workflows_permissions_lookup(self,
          *,
          workflow_ids:Β strΒ |Β Sequence[str],
          max_workflow_triggers:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8613,7 +9244,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8627,7 +9258,7 @@

          Methods

          return self.api_call("admin.workflows.permissions.lookup", params=kwargs)

          Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

          +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

          def admin_workflows_unpublish(self, *, workflow_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β SlackResponse @@ -8693,7 +9324,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8702,7 +9333,7 @@

          Methods

          return self.api_call("admin.workflows.unpublish", params=kwargs)

          Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

          +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

          def api_test(self, *, error:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8719,13 +9350,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs)

          Checks API calling code. -https://api.slack.com/methods/api.test

          +https://docs.slack.dev/reference/methods/api.test

          def apps_connections_open(self, *, app_token:Β str, **kwargs) ‑>Β SlackResponse @@ -8743,14 +9374,14 @@

          Methods

          ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

          Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

          +https://docs.slack.dev/reference/methods/apps.connections.open

          def apps_event_authorizations_list(self,
          *,
          event_context:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8770,14 +9401,14 @@

          Methods

          ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs)

          Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

          +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

          def apps_manifest_create(self, *, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -8794,7 +9425,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8803,7 +9434,7 @@

          Methods

          return self.api_call("apps.manifest.create", params=kwargs)

          Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

          +https://docs.slack.dev/reference/methods/apps.manifest.create

          def apps_manifest_delete(self, *, app_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8820,13 +9451,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs)

          Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

          +https://docs.slack.dev/reference/methods/apps.manifest.delete

          def apps_manifest_export(self, *, app_id:Β str, **kwargs) ‑>Β SlackResponse @@ -8843,13 +9474,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs)

          Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

          +https://docs.slack.dev/reference/methods/apps.manifest.export

          def apps_manifest_update(self, *, app_id:Β str, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -8867,7 +9498,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8877,7 +9508,7 @@

          Methods

          return self.api_call("apps.manifest.update", params=kwargs)

          Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

          +https://docs.slack.dev/reference/methods/apps.manifest.update

          def apps_manifest_validate(self, *, manifest:Β strΒ |Β Dict[str,Β Any], app_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -8895,7 +9526,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8905,7 +9536,7 @@

          Methods

          return self.api_call("apps.manifest.validate", params=kwargs)
          +https://docs.slack.dev/reference/methods/apps.manifest.validate

          def apps_uninstall(self, *, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β SlackResponse @@ -8923,16 +9554,16 @@

          Methods

          **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs)

          Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

          +https://docs.slack.dev/reference/methods/apps.uninstall

          -def assistant_threads_setStatus(self, *, channel_id:Β str, thread_ts:Β str, status:Β str, **kwargs) ‑>Β SlackResponse +def assistant_threads_setStatus(self,
          *,
          channel_id:Β str,
          thread_ts:Β str,
          status:Β str,
          loading_messages:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -8945,16 +9576,20 @@

          Methods

          channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs)
          + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs)
          - +
          def assistant_threads_setSuggestedPrompts(self,
          *,
          channel_id:Β str,
          thread_ts:Β str,
          title:Β strΒ |Β NoneΒ =Β None,
          prompts:Β List[Dict[str,Β str]],
          **kwargs) ‑>Β SlackResponse
          @@ -8973,16 +9608,16 @@

          Methods

          prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: kwargs.update({"title": title}) return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
          - +

          Set suggested prompts for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

          def assistant_threads_setTitle(self, *, channel_id:Β str, thread_ts:Β str, title:Β str, **kwargs) ‑>Β SlackResponse @@ -9000,14 +9635,14 @@

          Methods

          title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
          - +

          Set the title for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

          def auth_revoke(self, *, test:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -9024,13 +9659,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/auth.revoke

          def auth_teams_list(self,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          include_icon:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9048,13 +9683,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs)

          List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

          +https://docs.slack.dev/reference/methods/auth.teams.list

          def auth_test(self, **kwargs) ‑>Β SlackResponse @@ -9069,12 +9704,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs)

          Checks authentication & identity. -https://api.slack.com/methods/auth.test

          +https://docs.slack.dev/reference/methods/auth.test

          def bookmarks_add(self,
          *,
          channel_id:Β str,
          title:Β str,
          type:Β str,
          emoji:Β strΒ |Β NoneΒ =Β None,
          entity_id:Β strΒ |Β NoneΒ =Β None,
          link:Β strΒ |Β NoneΒ =Β None,
          parent_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9097,7 +9732,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -9113,7 +9748,7 @@

          Methods

          return self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/bookmarks.add

          def bookmarks_edit(self,
          *,
          bookmark_id:Β str,
          channel_id:Β str,
          emoji:Β strΒ |Β NoneΒ =Β None,
          link:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9134,7 +9769,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -9148,7 +9783,7 @@

          Methods

          return self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/bookmarks.edit

          def bookmarks_list(self, *, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -9165,13 +9800,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

          List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

          +https://docs.slack.dev/reference/methods/bookmarks.list

          def bookmarks_remove(self, *, bookmark_id:Β str, channel_id:Β str, **kwargs) ‑>Β SlackResponse @@ -9189,13 +9824,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

          Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

          +https://docs.slack.dev/reference/methods/bookmarks.remove

          def bots_info(self, *, bot:Β strΒ |Β NoneΒ =Β None, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -9213,13 +9848,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs)

          Gets information about a bot user. -https://api.slack.com/methods/bots.info

          +https://docs.slack.dev/reference/methods/bots.info

          def calls_add(self,
          *,
          external_unique_id:Β str,
          join_url:Β str,
          created_by:Β strΒ |Β NoneΒ =Β None,
          date_start:Β intΒ |Β NoneΒ =Β None,
          desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
          external_display_id:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          users:Β strΒ |Β Sequence[Dict[str,Β str]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9243,7 +9878,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -9263,7 +9898,7 @@

          Methods

          return self.api_call("calls.add", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/calls.add

          def calls_end(self, *, id:Β str, duration:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -9281,13 +9916,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/calls.end

          def calls_info(self, *, id:Β str, **kwargs) ‑>Β SlackResponse @@ -9304,13 +9939,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs)

          Returns information about a Call. -https://api.slack.com/methods/calls.info

          +https://docs.slack.dev/reference/methods/calls.info

          def calls_participants_add(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β SlackResponse @@ -9328,14 +9963,14 @@

          Methods

          **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

          Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

          +https://docs.slack.dev/reference/methods/calls.participants.add

          def calls_participants_remove(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β SlackResponse @@ -9353,14 +9988,14 @@

          Methods

          **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

          Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

          +https://docs.slack.dev/reference/methods/calls.participants.remove

          def calls_update(self,
          *,
          id:Β str,
          desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
          join_url:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9380,7 +10015,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9393,7 +10028,7 @@

          Methods

          return self.api_call("calls.update", http_verb="POST", params=kwargs)

          Updates information about a Call. -https://api.slack.com/methods/calls.update

          +https://docs.slack.dev/reference/methods/calls.update

          def canvases_access_delete(self,
          *,
          canvas_id:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9412,7 +10047,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9428,7 +10063,7 @@

          Methods

          return self.api_call("canvases.access.delete", params=kwargs)

          Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

          +https://docs.slack.dev/reference/methods/canvases.access.delete

          def canvases_access_set(self,
          *,
          canvas_id:Β str,
          access_level:Β str,
          channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9448,7 +10083,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9465,7 +10100,7 @@

          Methods

          return self.api_call("canvases.access.set", params=kwargs)

          Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

          +https://docs.slack.dev/reference/methods/canvases.access.set

          def canvases_create(self, *, title:Β strΒ |Β NoneΒ =Β None, document_content:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -9483,13 +10118,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.create

          def canvases_delete(self, *, canvas_id:Β str, **kwargs) ‑>Β SlackResponse @@ -9506,13 +10141,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.delete

          def canvases_edit(self, *, canvas_id:Β str, changes:Β Sequence[Dict[str,Β Any]], **kwargs) ‑>Β SlackResponse @@ -9530,13 +10165,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs)
          +https://docs.slack.dev/reference/methods/canvases.edit

          def canvases_sections_lookup(self, *, canvas_id:Β str, criteria:Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -9554,13 +10189,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs)

          Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

          +https://docs.slack.dev/reference/methods/canvases.sections.lookup

          def channels_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -9877,6 +10512,38 @@

          Methods

          Unarchives a channel.

          +
          +def chat_appendStream(self, *, channel:Β str, ts:Β str, markdown_text:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def chat_appendStream(
          +    self,
          +    *,
          +    channel: str,
          +    ts: str,
          +    markdown_text: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Appends text to an existing streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.appendStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "ts": ts,
          +            "markdown_text": markdown_text,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("chat.appendStream", json=kwargs)
          +
          +

          Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

          +
          def chat_delete(self, *, channel:Β str, ts:Β str, as_user:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse
          @@ -9894,13 +10561,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.delete

          def chat_deleteScheduledMessage(self,
          *,
          channel:Β str,
          scheduled_message_id:Β str,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -9919,7 +10586,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9931,7 +10598,7 @@

          Methods

          return self.api_call("chat.deleteScheduledMessage", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

          def chat_meMessage(self, *, channel:Β str, text:Β str, **kwargs) ‑>Β SlackResponse @@ -9973,16 +10640,16 @@

          Methods

          **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs)

          Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

          +https://docs.slack.dev/reference/methods/chat.meMessage

          -def chat_postEphemeral(self,
          *,
          channel:Β str,
          user:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_postEphemeral(self,
          *,
          channel:Β str,
          user:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10004,10 +10671,11 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -10023,19 +10691,20 @@

          Methods

          "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)

          Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

          +https://docs.slack.dev/reference/methods/chat.postEphemeral

          -def chat_postMessage(self,
          *,
          channel:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          container_id:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          mrkdwn:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_postMessage(self,
          *,
          channel:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          container_id:Β strΒ |Β NoneΒ =Β None,
          icon_emoji:Β strΒ |Β NoneΒ =Β None,
          icon_url:Β strΒ |Β NoneΒ =Β None,
          mrkdwn:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          username:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10061,11 +10730,12 @@

          Methods

          link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -10086,19 +10756,20 @@

          Methods

          "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)

          Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

          +https://docs.slack.dev/reference/methods/chat.postMessage

          -def chat_scheduleMessage(self,
          *,
          channel:Β str,
          post_at:Β strΒ |Β int,
          text:Β str,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_scheduleMessage(self,
          *,
          channel:Β str,
          post_at:Β strΒ |Β int,
          text:Β strΒ |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          unfurl_links:Β boolΒ |Β NoneΒ =Β None,
          unfurl_media:Β boolΒ |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10110,7 +10781,7 @@

          Methods

          *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -10121,10 +10792,11 @@

          Methods

          unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -10141,16 +10813,17 @@

          Methods

          "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
          +https://docs.slack.dev/reference/methods/chat.scheduleMessage

          def chat_scheduledMessages_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10172,7 +10845,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -10187,10 +10860,199 @@

          Methods

          return self.api_call("chat.scheduledMessages.list", params=kwargs)
          +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

          + +
          +def chat_startStream(self,
          *,
          channel:Β str,
          thread_ts:Β str,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          recipient_team_id:Β strΒ |Β NoneΒ =Β None,
          recipient_user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def chat_startStream(
          +    self,
          +    *,
          +    channel: str,
          +    thread_ts: str,
          +    markdown_text: Optional[str] = None,
          +    recipient_team_id: Optional[str] = None,
          +    recipient_user_id: Optional[str] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Starts a new streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.startStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "thread_ts": thread_ts,
          +            "markdown_text": markdown_text,
          +            "recipient_team_id": recipient_team_id,
          +            "recipient_user_id": recipient_user_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("chat.startStream", json=kwargs)
          +
          +

          Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

          +
          +
          +def chat_stopStream(self,
          *,
          channel:Β str,
          ts:Β str,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def chat_stopStream(
          +    self,
          +    *,
          +    channel: str,
          +    ts: str,
          +    markdown_text: Optional[str] = None,
          +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
          +    metadata: Optional[Union[Dict, Metadata]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Stops a streaming conversation.
          +    https://docs.slack.dev/reference/methods/chat.stopStream
          +    """
          +    kwargs.update(
          +        {
          +            "channel": channel,
          +            "ts": ts,
          +            "markdown_text": markdown_text,
          +            "blocks": blocks,
          +            "metadata": metadata,
          +        }
          +    )
          +    _parse_web_class_objects(kwargs)
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("chat.stopStream", json=kwargs)
          +
          + +
          +
          +def chat_stream(self,
          *,
          buffer_size:Β intΒ =Β 256,
          channel:Β str,
          thread_ts:Β str,
          recipient_team_id:Β strΒ |Β NoneΒ =Β None,
          recipient_user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β ChatStream
          +
          +
          +
          + +Expand source code + +
          def chat_stream(
          +    self,
          +    *,
          +    buffer_size: int = 256,
          +    channel: str,
          +    thread_ts: str,
          +    recipient_team_id: Optional[str] = None,
          +    recipient_user_id: Optional[str] = None,
          +    **kwargs,
          +) -> ChatStream:
          +    """Stream markdown text into a conversation.
          +
          +    This method starts a new chat stream in a conversation that can be appended to. After appending an entire message,
          +    the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.
          +
          +    The following methods are used:
          +
          +    - chat.startStream: Starts a new streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.startStream).
          +    - chat.appendStream: Appends text to an existing streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.appendStream).
          +    - chat.stopStream: Stops a streaming conversation.
          +      [Reference](https://docs.slack.dev/reference/methods/chat.stopStream).
          +
          +    Args:
          +        buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this
          +          value decreases the number of method calls made for the same amount of text, which is useful to avoid rate
          +          limits. Default: 256.
          +        channel: An encoded ID that represents a channel, private group, or DM.
          +        thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user
          +          request.
          +        recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when
          +          streaming to channels.
          +        recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +        **kwargs: Additional arguments passed to the underlying API calls.
          +
          +    Returns:
          +        ChatStream instance for managing the stream
          +
          +    Example:
          +        ```python
          +        streamer = client.chat_stream(
          +            channel="C0123456789",
          +            thread_ts="1700000001.123456",
          +            recipient_team_id="T0123456789",
          +            recipient_user_id="U0123456789",
          +        )
          +        streamer.append(markdown_text="**hello wo")
          +        streamer.append(markdown_text="rld!**")
          +        streamer.stop()
          +        ```
          +    """
          +    return ChatStream(
          +        self,
          +        logger=self._logger,
          +        channel=channel,
          +        thread_ts=thread_ts,
          +        recipient_team_id=recipient_team_id,
          +        recipient_user_id=recipient_user_id,
          +        buffer_size=buffer_size,
          +        **kwargs,
          +    )
          +
          +

          Stream markdown text into a conversation.

          +

          This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, +the stream can be stopped with concluding arguments such as "blocks" for gathering feedback.

          +

          The following methods are used:

          +
            +
          • chat.startStream: Starts a new streaming conversation. +Reference.
          • +
          • chat.appendStream: Appends text to an existing streaming conversation. +Reference.
          • +
          • chat.stopStream: Stops a streaming conversation. +Reference.
          • +
          +

          Args

          +
          +
          buffer_size
          +
          The length of markdown_text to buffer in-memory before calling a stream method. Increasing this +value decreases the number of method calls made for the same amount of text, which is useful to avoid rate +limits. Default: 256.
          +
          channel
          +
          An encoded ID that represents a channel, private group, or DM.
          +
          thread_ts
          +
          Provide another message's ts value to reply to. Streamed messages should always be replies to a user +request.
          +
          recipient_team_id
          +
          The encoded ID of the team the user receiving the streaming text belongs to. Required when +streaming to channels.
          +
          recipient_user_id
          +
          The encoded ID of the user to receive the streaming text. Required when streaming to channels.
          +
          **kwargs
          +
          Additional arguments passed to the underlying API calls.
          +
          +

          Returns

          +

          ChatStream instance for managing the stream

          +

          Example

          +
          streamer = client.chat_stream(
          +    channel="C0123456789",
          +    thread_ts="1700000001.123456",
          +    recipient_team_id="T0123456789",
          +    recipient_user_id="U0123456789",
          +)
          +streamer.append(markdown_text="**hello wo")
          +streamer.append(markdown_text="rld!**")
          +streamer.stop()
          +
          -def chat_unfurl(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          ts:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          unfurl_id:Β strΒ |Β NoneΒ =Β None,
          unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
          user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          user_auth_message:Β strΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_unfurl(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          ts:Β strΒ |Β NoneΒ =Β None,
          source:Β strΒ |Β NoneΒ =Β None,
          unfurl_id:Β strΒ |Β NoneΒ =Β None,
          unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
          user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          user_auth_message:Β strΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10205,6 +11067,7 @@

          Methods

          source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -10212,7 +11075,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -10221,6 +11084,7 @@

          Methods

          "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -10233,10 +11097,10 @@

          Methods

          return self.api_call("chat.unfurl", json=kwargs)

          Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

          +https://docs.slack.dev/reference/methods/chat.unfurl

          -def chat_update(self,
          *,
          channel:Β str,
          ts:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +def chat_update(self,
          *,
          channel:Β str,
          ts:Β str,
          text:Β strΒ |Β NoneΒ =Β None,
          attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
          blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
          as_user:Β boolΒ |Β NoneΒ =Β None,
          file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          link_names:Β boolΒ |Β NoneΒ =Β None,
          parse:Β strΒ |Β NoneΒ =Β None,
          reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
          metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
          markdown_text:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10257,10 +11121,11 @@

          Methods

          parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -10274,6 +11139,7 @@

          Methods

          "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10282,12 +11148,12 @@

          Methods

          kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)

          Updates a message in a channel. -https://api.slack.com/methods/chat.update

          +https://docs.slack.dev/reference/methods/chat.update

          def conversations_acceptSharedInvite(self,
          *,
          channel_name:Β str,
          channel_id:Β strΒ |Β NoneΒ =Β None,
          invite_id:Β strΒ |Β NoneΒ =Β None,
          free_trial_accepted:Β boolΒ |Β NoneΒ =Β None,
          is_private:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10309,7 +11175,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -10326,7 +11192,7 @@

          Methods

          return self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

          Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

          def conversations_approveSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10344,13 +11210,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

          Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

          def conversations_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10367,13 +11233,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.archive

          def conversations_canvases_create(self, *, channel_id:Β str, document_content:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -10391,13 +11257,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.canvases.create

          def conversations_close(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10414,13 +11280,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs)

          Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

          +https://docs.slack.dev/reference/methods/conversations.close

          def conversations_create(self,
          *,
          name:Β str,
          is_private:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10439,13 +11305,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs)

          Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

          +https://docs.slack.dev/reference/methods/conversations.create

          def conversations_declineSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10463,13 +11329,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

          Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

          +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

          def conversations_externalInvitePermissions_set(self, *, action:Β str, channel:Β str, target_team:Β str, **kwargs) ‑>Β SlackResponse @@ -10483,7 +11349,7 @@

          Methods

          self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10495,7 +11361,7 @@

          Methods

          return self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

          Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

          +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

          def conversations_history(self,
          *,
          channel:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          inclusive:Β boolΒ |Β NoneΒ =Β None,
          include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10518,7 +11384,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10534,7 +11400,7 @@

          Methods

          return self.api_call("conversations.history", http_verb="GET", params=kwargs)

          Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

          +https://docs.slack.dev/reference/methods/conversations.history

          def conversations_info(self,
          *,
          channel:Β str,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          include_num_members:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10553,7 +11419,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10565,7 +11431,7 @@

          Methods

          return self.api_call("conversations.info", http_verb="GET", params=kwargs)

          Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

          +https://docs.slack.dev/reference/methods/conversations.info

          def conversations_invite(self,
          *,
          channel:Β str,
          users:Β strΒ |Β Sequence[str],
          force:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10584,7 +11450,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10599,7 +11465,7 @@

          Methods

          return self.api_call("conversations.invite", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.invite

          def conversations_inviteShared(self,
          *,
          channel:Β str,
          emails:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10618,7 +11484,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10634,7 +11500,7 @@

          Methods

          return self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

          Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

          +https://docs.slack.dev/reference/methods/conversations.inviteShared

          def conversations_join(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10651,13 +11517,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs)

          Joins an existing conversation. -https://api.slack.com/methods/conversations.join

          +https://docs.slack.dev/reference/methods/conversations.join

          def conversations_kick(self, *, channel:Β str, user:Β str, **kwargs) ‑>Β SlackResponse @@ -10675,13 +11541,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs)

          Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

          +https://docs.slack.dev/reference/methods/conversations.kick

          def conversations_leave(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -10698,13 +11564,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.leave

          def conversations_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          exclude_archived:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10725,7 +11591,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10742,7 +11608,7 @@

          Methods

          return self.api_call("conversations.list", http_verb="GET", params=kwargs)

          Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

          +https://docs.slack.dev/reference/methods/conversations.list

          def conversations_listConnectInvites(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10762,14 +11628,14 @@

          Methods

          ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs)

          List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

          +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

          def conversations_mark(self, *, channel:Β str, ts:Β str, **kwargs) ‑>Β SlackResponse @@ -10787,13 +11653,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs)

          Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

          +https://docs.slack.dev/reference/methods/conversations.mark

          def conversations_members(self, *, channel:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10812,13 +11678,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs)

          Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

          +https://docs.slack.dev/reference/methods/conversations.members

          def conversations_open(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          return_im:Β boolΒ |Β NoneΒ =Β None,
          users:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10837,7 +11703,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10849,7 +11715,7 @@

          Methods

          return self.api_call("conversations.open", params=kwargs)

          Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

          +https://docs.slack.dev/reference/methods/conversations.open

          def conversations_rename(self, *, channel:Β str, name:Β str, **kwargs) ‑>Β SlackResponse @@ -10867,13 +11733,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.rename

          def conversations_replies(self,
          *,
          channel:Β str,
          ts:Β str,
          cursor:Β strΒ |Β NoneΒ =Β None,
          inclusive:Β boolΒ |Β NoneΒ =Β None,
          include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
          latest:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          oldest:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10897,7 +11763,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10914,7 +11780,7 @@

          Methods

          return self.api_call("conversations.replies", http_verb="GET", params=kwargs)

          Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

          +https://docs.slack.dev/reference/methods/conversations.replies

          def conversations_requestSharedInvite_approve(self,
          *,
          invite_id:Β str,
          channel_id:Β strΒ |Β NoneΒ =Β None,
          is_external_limited:Β strΒ |Β NoneΒ =Β None,
          message:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10934,7 +11800,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10948,7 +11814,7 @@

          Methods

          return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

          Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

          def conversations_requestSharedInvite_deny(self, *, invite_id:Β str, message:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -10966,13 +11832,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

          Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

          def conversations_requestSharedInvite_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          include_approved:Β boolΒ |Β NoneΒ =Β None,
          include_denied:Β boolΒ |Β NoneΒ =Β None,
          include_expired:Β boolΒ |Β NoneΒ =Β None,
          invite_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          user_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -10995,7 +11861,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -11015,7 +11881,7 @@

          Methods

          return self.api_call("conversations.requestSharedInvite.list", params=kwargs)

          Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

          +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

          def conversations_setPurpose(self, *, channel:Β str, purpose:Β str, **kwargs) ‑>Β SlackResponse @@ -11033,13 +11899,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs)

          Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

          +https://docs.slack.dev/reference/methods/conversations.setPurpose

          def conversations_setTopic(self, *, channel:Β str, topic:Β str, **kwargs) ‑>Β SlackResponse @@ -11057,13 +11923,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs)

          Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

          +https://docs.slack.dev/reference/methods/conversations.setTopic

          def conversations_unarchive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -11080,13 +11946,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs)
          +https://docs.slack.dev/reference/methods/conversations.unarchive

          def dialog_open(self, *, dialog:Β Dict[str,Β Any], trigger_id:Β str, **kwargs) ‑>Β SlackResponse @@ -11104,7 +11970,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -11112,7 +11978,7 @@

          Methods

          return self.api_call("dialog.open", json=kwargs)

          Open a dialog with a user. -https://api.slack.com/methods/dialog.open

          +https://docs.slack.dev/reference/methods/dialog.open

          def dnd_endDnd(self, **kwargs) ‑>Β SlackResponse @@ -11127,12 +11993,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs)

          Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

          +https://docs.slack.dev/reference/methods/dnd.endDnd

          def dnd_endSnooze(self, **kwargs) ‑>Β SlackResponse @@ -11147,12 +12013,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs)

          Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

          +https://docs.slack.dev/reference/methods/dnd.endSnooze

          def dnd_info(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11170,13 +12036,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs)

          Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

          +https://docs.slack.dev/reference/methods/dnd.info

          def dnd_setSnooze(self, *, num_minutes:Β strΒ |Β int, **kwargs) ‑>Β SlackResponse @@ -11193,13 +12059,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

          Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

          +https://docs.slack.dev/reference/methods/dnd.setSnooze

          def dnd_teamInfo(self, users:Β strΒ |Β Sequence[str], team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11216,7 +12082,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -11226,7 +12092,7 @@

          Methods

          return self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

          Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

          +https://docs.slack.dev/reference/methods/dnd.teamInfo

          def emoji_list(self, include_categories:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11242,13 +12108,48 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs)

          Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

          +https://docs.slack.dev/reference/methods/emoji.list

          + +
          +def entity_presentDetails(self,
          trigger_id:Β str,
          metadata:Β DictΒ |Β EntityMetadataΒ |Β NoneΒ =Β None,
          user_auth_required:Β boolΒ |Β NoneΒ =Β None,
          user_auth_url:Β strΒ |Β NoneΒ =Β None,
          error:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def entity_presentDetails(
          +    self,
          +    trigger_id: str,
          +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
          +    user_auth_required: Optional[bool] = None,
          +    user_auth_url: Optional[str] = None,
          +    error: Optional[Dict[str, Any]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Provides entity details for the flexpane.
          +    https://docs.slack.dev/reference/methods/entity.presentDetails/
          +    """
          +    kwargs.update({"trigger_id": trigger_id})
          +    if metadata is not None:
          +        kwargs.update({"metadata": metadata})
          +    if user_auth_required is not None:
          +        kwargs.update({"user_auth_required": user_auth_required})
          +    if user_auth_url is not None:
          +        kwargs.update({"user_auth_url": user_auth_url})
          +    if error is not None:
          +        kwargs.update({"error": error})
          +    _parse_web_class_objects(kwargs)
          +    return self.api_call("entity.presentDetails", json=kwargs)
          +
          +

          Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

          def files_comments_delete(self, *, file:Β str, id:Β str, **kwargs) ‑>Β SlackResponse @@ -11266,13 +12167,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs)

          Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

          +https://docs.slack.dev/reference/methods/files.comments.delete

          def files_completeUploadExternal(self,
          *,
          files:Β List[Dict[str,Β str]],
          channel_id:Β strΒ |Β NoneΒ =Β None,
          channels:Β List[str]Β |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11293,7 +12194,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -11309,7 +12210,7 @@

          Methods

          return self.api_call("files.completeUploadExternal", params=kwargs)

          Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

          +https://docs.slack.dev/reference/methods/files.completeUploadExternal

          def files_delete(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -11326,13 +12227,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/files.delete

          def files_getUploadURLExternal(self,
          *,
          filename:Β str,
          length:Β int,
          alt_txt:Β strΒ |Β NoneΒ =Β None,
          snippet_type:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11352,7 +12253,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11365,7 +12266,7 @@

          Methods

          return self.api_call("files.getUploadURLExternal", params=kwargs)

          Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

          +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

          def files_info(self,
          *,
          file:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11386,7 +12287,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11400,7 +12301,7 @@

          Methods

          return self.api_call("files.info", http_verb="GET", params=kwargs)

          Gets information about a team file. -https://api.slack.com/methods/files.info

          +https://docs.slack.dev/reference/methods/files.info

          def files_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          count:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          show_files_hidden_by_limit:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          ts_from:Β strΒ |Β NoneΒ =Β None,
          ts_to:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11425,7 +12326,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11446,7 +12347,7 @@

          Methods

          return self.api_call("files.list", http_verb="GET", params=kwargs)

          Lists & filters team files. -https://api.slack.com/methods/files.list

          +https://docs.slack.dev/reference/methods/files.list

          def files_remote_add(self,
          *,
          external_id:Β str,
          external_url:Β str,
          title:Β str,
          filetype:Β strΒ |Β NoneΒ =Β None,
          indexable_file_contents:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          preview_image:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11468,7 +12369,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11495,7 +12396,7 @@

          Methods

          )

          Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

          +https://docs.slack.dev/reference/methods/files.remote.add

          def files_remote_info(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11513,13 +12414,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs)

          Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

          +https://docs.slack.dev/reference/methods/files.remote.info

          def files_remote_list(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          ts_from:Β strΒ |Β NoneΒ =Β None,
          ts_to:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11540,7 +12441,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11554,7 +12455,7 @@

          Methods

          return self.api_call("files.remote.list", http_verb="GET", params=kwargs)

          Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

          +https://docs.slack.dev/reference/methods/files.remote.list

          def files_remote_remove(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -11572,13 +12473,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
          +https://docs.slack.dev/reference/methods/files.remote.remove

          def files_remote_share(self,
          *,
          channels:Β strΒ |Β Sequence[str],
          external_id:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11597,7 +12498,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11609,7 +12510,7 @@

          Methods

          return self.api_call("files.remote.share", http_verb="GET", params=kwargs)

          Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

          +https://docs.slack.dev/reference/methods/files.remote.share

          def files_remote_update(self,
          *,
          external_id:Β strΒ |Β NoneΒ =Β None,
          external_url:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          filetype:Β strΒ |Β NoneΒ =Β None,
          indexable_file_contents:Β strΒ |Β NoneΒ =Β None,
          preview_image:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11632,7 +12533,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11660,7 +12561,7 @@

          Methods

          )

          Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

          +https://docs.slack.dev/reference/methods/files.remote.update

          def files_revokePublicURL(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -11677,13 +12578,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs)

          Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

          +https://docs.slack.dev/reference/methods/files.revokePublicURL

          def files_sharedPublicURL(self, *, file:Β str, **kwargs) ‑>Β SlackResponse @@ -11700,13 +12601,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs)

          Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

          +https://docs.slack.dev/reference/methods/files.sharedPublicURL

          def files_upload(self,
          *,
          file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
          content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
          filename:Β strΒ |Β NoneΒ =Β None,
          filetype:Β strΒ |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -11730,7 +12631,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11763,7 +12664,7 @@

          Methods

          return self.api_call("files.upload", data=kwargs)

          Uploads or creates a file. -https://api.slack.com/methods/files.upload

          +https://docs.slack.dev/reference/methods/files.upload

          def files_upload_v2(self,
          *,
          filename:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β os.PathLikeΒ |Β NoneΒ =Β None,
          content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
          title:Β strΒ |Β NoneΒ =Β None,
          alt_txt:Β strΒ |Β NoneΒ =Β None,
          snippet_type:Β strΒ |Β NoneΒ =Β None,
          file_uploads:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          channel:Β strΒ |Β NoneΒ =Β None,
          channels:Β List[str]Β |Β NoneΒ =Β None,
          initial_comment:Β strΒ |Β NoneΒ =Β None,
          thread_ts:Β strΒ |Β NoneΒ =Β None,
          request_file_info:Β boolΒ =Β True,
          **kwargs) ‑>Β SlackResponse
          @@ -11794,12 +12695,12 @@

          Methods

          ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11878,14 +12779,14 @@

          Methods

          This wrapper method provides an easy way to upload files using the following endpoints:

          @@ -11905,13 +12806,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs)

          Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

          +https://docs.slack.dev/reference/methods/functions.completeError

          def functions_completeSuccess(self, *, function_execution_id:Β str, outputs:Β Dict[str,Β Any], **kwargs) ‑>Β SlackResponse @@ -11929,13 +12830,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs)

          Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

          +https://docs.slack.dev/reference/methods/functions.completeSuccess

          def groups_archive(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12411,7 +13312,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12421,7 +13322,7 @@

          Methods

          return self.api_call("migration.exchange", http_verb="GET", params=kwargs)

          For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

          +https://docs.slack.dev/reference/methods/migration.exchange

          def mpim_close(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12568,7 +13469,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12580,7 +13481,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

          +https://docs.slack.dev/reference/methods/oauth.access

          def oauth_v2_access(self,
          *,
          client_id:Β str,
          client_secret:Β str,
          code:Β strΒ |Β NoneΒ =Β None,
          redirect_uri:Β strΒ |Β NoneΒ =Β None,
          grant_type:Β strΒ |Β NoneΒ =Β None,
          refresh_token:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12606,7 +13507,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12623,7 +13524,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

          +https://docs.slack.dev/reference/methods/oauth.v2.access

          def oauth_v2_exchange(self, *, token:Β str, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β SlackResponse @@ -12642,13 +13543,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs)

          Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

          +https://docs.slack.dev/reference/methods/oauth.v2.exchange

          def openid_connect_token(self,
          client_id:Β str,
          client_secret:Β str,
          code:Β strΒ |Β NoneΒ =Β None,
          redirect_uri:Β strΒ |Β NoneΒ =Β None,
          grant_type:Β strΒ |Β NoneΒ =Β None,
          refresh_token:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12669,7 +13570,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12686,7 +13587,7 @@

          Methods

          )

          Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

          +https://docs.slack.dev/reference/methods/openid.connect.token

          def openid_connect_userInfo(self, **kwargs) ‑>Β SlackResponse @@ -12701,12 +13602,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs)

          Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

          +https://docs.slack.dev/reference/methods/openid.connect.userInfo

          def pins_add(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12724,13 +13625,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs)

          Pins an item to a channel. -https://api.slack.com/methods/pins.add

          +https://docs.slack.dev/reference/methods/pins.add

          def pins_list(self, *, channel:Β str, **kwargs) ‑>Β SlackResponse @@ -12747,13 +13648,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs)

          Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

          +https://docs.slack.dev/reference/methods/pins.list

          def pins_remove(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12771,13 +13672,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs)

          Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

          +https://docs.slack.dev/reference/methods/pins.remove

          def reactions_add(self, *, channel:Β str, name:Β str, timestamp:Β str, **kwargs) ‑>Β SlackResponse @@ -12796,13 +13697,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs)

          Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

          +https://docs.slack.dev/reference/methods/reactions.add

          def reactions_get(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          full:Β boolΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12823,7 +13724,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12837,7 +13738,7 @@

          Methods

          return self.api_call("reactions.get", http_verb="GET", params=kwargs)

          Gets reactions for an item. -https://api.slack.com/methods/reactions.get

          +https://docs.slack.dev/reference/methods/reactions.get

          def reactions_list(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          full:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12860,7 +13761,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12876,7 +13777,7 @@

          Methods

          return self.api_call("reactions.list", http_verb="GET", params=kwargs)

          Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

          +https://docs.slack.dev/reference/methods/reactions.list

          def reactions_remove(self,
          *,
          name:Β str,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12897,7 +13798,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12911,7 +13812,7 @@

          Methods

          return self.api_call("reactions.remove", params=kwargs)

          Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

          +https://docs.slack.dev/reference/methods/reactions.remove

          def reminders_add(self,
          *,
          text:Β str,
          time:Β str,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          recurrence:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -12932,7 +13833,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12946,7 +13847,7 @@

          Methods

          return self.api_call("reminders.add", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.add

          def reminders_complete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12964,13 +13865,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.complete

          def reminders_delete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -12988,13 +13889,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs)
          +https://docs.slack.dev/reference/methods/reminders.delete

          def reminders_info(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13012,13 +13913,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs)

          Gets information about a reminder. -https://api.slack.com/methods/reminders.info

          +https://docs.slack.dev/reference/methods/reminders.info

          def reminders_list(self, *, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13035,13 +13936,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs)

          Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

          +https://docs.slack.dev/reference/methods/reminders.list

          def rtm_connect(self,
          *,
          batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
          presence_sub:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13059,13 +13960,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs)

          Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

          +https://docs.slack.dev/reference/methods/rtm.connect

          def rtm_start(self,
          *,
          batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          mpim_aware:Β boolΒ |Β NoneΒ =Β None,
          no_latest:Β boolΒ |Β NoneΒ =Β None,
          no_unreads:Β boolΒ |Β NoneΒ =Β None,
          presence_sub:Β boolΒ |Β NoneΒ =Β None,
          simple_latest:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13088,7 +13989,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -13104,7 +14005,7 @@

          Methods

          return self.api_call("rtm.start", http_verb="GET", params=kwargs)

          Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

          +https://docs.slack.dev/reference/methods/rtm.start

          def search_all(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13127,7 +14028,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -13143,7 +14044,7 @@

          Methods

          return self.api_call("search.all", http_verb="GET", params=kwargs)

          Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

          +https://docs.slack.dev/reference/methods/search.all

          def search_files(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13166,7 +14067,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -13182,7 +14083,7 @@

          Methods

          return self.api_call("search.files", http_verb="GET", params=kwargs)

          Searches for files matching a query. -https://api.slack.com/methods/search.files

          +https://docs.slack.dev/reference/methods/search.files

          def search_messages(self,
          *,
          query:Β str,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          highlight:Β boolΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          sort:Β strΒ |Β NoneΒ =Β None,
          sort_dir:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13206,7 +14107,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -13223,7 +14124,382 @@

          Methods

          return self.api_call("search.messages", http_verb="GET", params=kwargs)

          Searches for messages matching a query. -https://api.slack.com/methods/search.messages

          +https://docs.slack.dev/reference/methods/search.messages

          + +
          +def slackLists_access_delete(self,
          *,
          list_id:Β str,
          channel_ids:Β List[str]Β |Β NoneΒ =Β None,
          user_ids:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Revoke access to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.delete
          +    """
          +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.delete", json=kwargs)
          +
          +

          Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

          +
          +
          +def slackLists_access_set(self,
          *,
          list_id:Β str,
          access_level:Β str,
          channel_ids:Β List[str]Β |Β NoneΒ =Β None,
          user_ids:Β List[str]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_access_set(
          +    self,
          +    *,
          +    list_id: str,
          +    access_level: str,
          +    channel_ids: Optional[List[str]] = None,
          +    user_ids: Optional[List[str]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Set the access level to a List for specified entities.
          +    https://docs.slack.dev/reference/methods/slackLists.access.set
          +    """
          +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.access.set", json=kwargs)
          +
          +

          Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

          +
          +
          +def slackLists_create(self,
          *,
          name:Β str,
          description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
          schema:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          copy_from_list_id:Β strΒ |Β NoneΒ =Β None,
          include_copied_list_records:Β boolΒ |Β NoneΒ =Β None,
          todo_mode:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_create(
          +    self,
          +    *,
          +    name: str,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    schema: Optional[List[Dict[str, Any]]] = None,
          +    copy_from_list_id: Optional[str] = None,
          +    include_copied_list_records: Optional[bool] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Creates a List.
          +    https://docs.slack.dev/reference/methods/slackLists.create
          +    """
          +    kwargs.update(
          +        {
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "schema": schema,
          +            "copy_from_list_id": copy_from_list_id,
          +            "include_copied_list_records": include_copied_list_records,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.create", json=kwargs)
          +
          + +
          +
          +def slackLists_download_get(self, *, list_id:Β str, job_id:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_get(
          +    self,
          +    *,
          +    list_id: str,
          +    job_id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Retrieve List download URL from an export job to download List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.get
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "job_id": job_id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.get", json=kwargs)
          +
          +

          Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

          +
          +
          +def slackLists_download_start(self, *, list_id:Β str, include_archived:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_download_start(
          +    self,
          +    *,
          +    list_id: str,
          +    include_archived: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Initiate a job to export List contents.
          +    https://docs.slack.dev/reference/methods/slackLists.download.start
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "include_archived": include_archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.download.start", json=kwargs)
          +
          + +
          +
          +def slackLists_items_create(self,
          *,
          list_id:Β str,
          duplicated_item_id:Β strΒ |Β NoneΒ =Β None,
          parent_item_id:Β strΒ |Β NoneΒ =Β None,
          initial_fields:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_create(
          +    self,
          +    *,
          +    list_id: str,
          +    duplicated_item_id: Optional[str] = None,
          +    parent_item_id: Optional[str] = None,
          +    initial_fields: Optional[List[Dict[str, Any]]] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Add a new item to an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.create
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "duplicated_item_id": duplicated_item_id,
          +            "parent_item_id": parent_item_id,
          +            "initial_fields": initial_fields,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.create", json=kwargs)
          +
          + +
          +
          +def slackLists_items_delete(self, *, list_id:Β str, id:Β str, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_delete(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Deletes an item from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.delete
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.delete", json=kwargs)
          +
          + +
          +
          +def slackLists_items_deleteMultiple(self, *, list_id:Β str, ids:Β List[str], **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_deleteMultiple(
          +    self,
          +    *,
          +    list_id: str,
          +    ids: List[str],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Deletes multiple items from an existing List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "ids": ids,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.deleteMultiple", json=kwargs)
          +
          + +
          +
          +def slackLists_items_info(self, *, list_id:Β str, id:Β str, include_is_subscribed:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_info(
          +    self,
          +    *,
          +    list_id: str,
          +    id: str,
          +    include_is_subscribed: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Get a row from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.info
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "id": id,
          +            "include_is_subscribed": include_is_subscribed,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.info", json=kwargs)
          +
          + +
          +
          +def slackLists_items_list(self,
          *,
          list_id:Β str,
          limit:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          archived:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_items_list(
          +    self,
          +    *,
          +    list_id: str,
          +    limit: Optional[int] = None,
          +    cursor: Optional[str] = None,
          +    archived: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Get records from a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.list
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "limit": limit,
          +            "cursor": cursor,
          +            "archived": archived,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.list", json=kwargs)
          +
          + +
          +
          +def slackLists_items_update(self, *, list_id:Β str, cells:Β List[Dict[str,Β Any]], **kwargs) ‑>Β SlackResponse +
          +
          +
          + +Expand source code + +
          def slackLists_items_update(
          +    self,
          +    *,
          +    list_id: str,
          +    cells: List[Dict[str, Any]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Updates cells in a List.
          +    https://docs.slack.dev/reference/methods/slackLists.items.update
          +    """
          +    kwargs.update(
          +        {
          +            "list_id": list_id,
          +            "cells": cells,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.items.update", json=kwargs)
          +
          + +
          +
          +def slackLists_update(self,
          *,
          id:Β str,
          name:Β strΒ |Β NoneΒ =Β None,
          description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
          todo_mode:Β boolΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          +
          +
          +
          + +Expand source code + +
          def slackLists_update(
          +    self,
          +    *,
          +    id: str,
          +    name: Optional[str] = None,
          +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
          +    todo_mode: Optional[bool] = None,
          +    **kwargs,
          +) -> SlackResponse:
          +    """Update a List.
          +    https://docs.slack.dev/reference/methods/slackLists.update
          +    """
          +    kwargs.update(
          +        {
          +            "id": id,
          +            "name": name,
          +            "description_blocks": description_blocks,
          +            "todo_mode": todo_mode,
          +        }
          +    )
          +    kwargs = _remove_none_values(kwargs)
          +    return self.api_call("slackLists.update", json=kwargs)
          +
          +
          def stars_add(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13243,7 +14519,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -13256,7 +14532,7 @@

          Methods

          return self.api_call("stars.add", params=kwargs)
          +https://docs.slack.dev/reference/methods/stars.add

          def stars_list(self,
          *,
          count:Β intΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          page:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13277,7 +14553,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -13291,7 +14567,7 @@

          Methods

          return self.api_call("stars.list", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/stars.list

          def stars_remove(self,
          *,
          channel:Β strΒ |Β NoneΒ =Β None,
          file:Β strΒ |Β NoneΒ =Β None,
          file_comment:Β strΒ |Β NoneΒ =Β None,
          timestamp:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13311,7 +14587,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -13324,7 +14600,7 @@

          Methods

          return self.api_call("stars.remove", params=kwargs)

          Removes a star from an item. -https://api.slack.com/methods/stars.remove

          +https://docs.slack.dev/reference/methods/stars.remove

          def team_accessLogs(self,
          *,
          before:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13346,7 +14622,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -13361,7 +14637,7 @@

          Methods

          return self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

          Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

          +https://docs.slack.dev/reference/methods/team.accessLogs

          def team_billableInfo(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13379,13 +14655,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

          Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

          +https://docs.slack.dev/reference/methods/team.billableInfo

          def team_billing_info(self, **kwargs) ‑>Β SlackResponse @@ -13400,12 +14676,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs)

          Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

          +https://docs.slack.dev/reference/methods/team.billing.info

          def team_externalTeams_disconnect(self, *, target_team:Β str, **kwargs) ‑>Β SlackResponse @@ -13422,7 +14698,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13432,7 +14708,7 @@

          Methods

          return self.api_call("team.externalTeams.disconnect", params=kwargs)
          +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

          def team_externalTeams_list(self,
          *,
          connection_status_filter:Β strΒ |Β NoneΒ =Β None,
          slack_connect_pref_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
          sort_direction:Β strΒ |Β NoneΒ =Β None,
          sort_field:Β strΒ |Β NoneΒ =Β None,
          workspace_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
          cursor:Β strΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13455,7 +14731,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13479,7 +14755,7 @@

          Methods

          return self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

          Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

          +https://docs.slack.dev/reference/methods/team.externalTeams.list

          def team_info(self, *, team:Β strΒ |Β NoneΒ =Β None, domain:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13497,13 +14773,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs)

          Gets information about the current team. -https://api.slack.com/methods/team.info

          +https://docs.slack.dev/reference/methods/team.info

          def team_integrationLogs(self,
          *,
          app_id:Β strΒ |Β NoneΒ =Β None,
          change_type:Β strΒ |Β NoneΒ =Β None,
          count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          service_id:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13526,7 +14802,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13542,7 +14818,7 @@

          Methods

          return self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

          Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

          +https://docs.slack.dev/reference/methods/team.integrationLogs

          def team_preferences_list(self, **kwargs) ‑>Β SlackResponse @@ -13557,12 +14833,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs)

          Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

          +https://docs.slack.dev/reference/methods/team.preferences.list

          def team_profile_get(self, *, visibility:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13579,13 +14855,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/team.profile.get

          def tooling_tokens_rotate(self, *, refresh_token:Β str, **kwargs) ‑>Β SlackResponse @@ -13602,13 +14878,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs)

          Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

          +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

          def usergroups_create(self,
          *,
          name:Β str,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          description:Β strΒ |Β NoneΒ =Β None,
          handle:Β strΒ |Β NoneΒ =Β None,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13630,7 +14906,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13648,7 +14924,7 @@

          Methods

          return self.api_call("usergroups.create", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.create

          def usergroups_disable(self,
          *,
          usergroup:Β str,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13667,13 +14943,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs)

          Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

          +https://docs.slack.dev/reference/methods/usergroups.disable

          def usergroups_enable(self,
          *,
          usergroup:Β str,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13692,13 +14968,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.enable

          def usergroups_list(self,
          *,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          include_disabled:Β boolΒ |Β NoneΒ =Β None,
          include_users:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13718,7 +14994,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13731,7 +15007,7 @@

          Methods

          return self.api_call("usergroups.list", http_verb="GET", params=kwargs)

          List all User Groups for a team -https://api.slack.com/methods/usergroups.list

          +https://docs.slack.dev/reference/methods/usergroups.list

          def usergroups_update(self,
          *,
          usergroup:Β str,
          channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          description:Β strΒ |Β NoneΒ =Β None,
          handle:Β strΒ |Β NoneΒ =Β None,
          include_count:Β boolΒ |Β NoneΒ =Β None,
          name:Β strΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13754,7 +15030,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13773,7 +15049,7 @@

          Methods

          return self.api_call("usergroups.update", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.update

          def usergroups_users_list(self,
          *,
          usergroup:Β str,
          include_disabled:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13792,7 +15068,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13804,7 +15080,7 @@

          Methods

          return self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/usergroups.users.list

          def usergroups_users_update(self,
          *,
          usergroup:Β str,
          users:Β strΒ |Β Sequence[str],
          include_count:Β boolΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13824,7 +15100,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13840,7 +15116,7 @@

          Methods

          return self.api_call("usergroups.users.update", params=kwargs)

          Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

          +https://docs.slack.dev/reference/methods/usergroups.users.update

          def users_conversations(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          exclude_archived:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -13862,7 +15138,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13880,7 +15156,7 @@

          Methods

          return self.api_call("users.conversations", http_verb="GET", params=kwargs)

          List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

          +https://docs.slack.dev/reference/methods/users.conversations

          def users_deletePhoto(self, **kwargs) ‑>Β SlackResponse @@ -13895,12 +15171,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.deletePhoto

          def users_discoverableContacts_lookup(self, email:Β str, **kwargs) ‑>Β SlackResponse @@ -13916,13 +15192,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs)

          Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

          +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

          def users_getPresence(self, *, user:Β str, **kwargs) ‑>Β SlackResponse @@ -13939,13 +15215,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs)

          Gets user presence information. -https://api.slack.com/methods/users.getPresence

          +https://docs.slack.dev/reference/methods/users.getPresence

          def users_identity(self, **kwargs) ‑>Β SlackResponse @@ -13960,12 +15236,12 @@

          Methods

          **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.identity

          def users_info(self, *, user:Β str, include_locale:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -13983,13 +15259,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs)

          Gets information about a user. -https://api.slack.com/methods/users.info

          +https://docs.slack.dev/reference/methods/users.info

          def users_list(self,
          *,
          cursor:Β strΒ |Β NoneΒ =Β None,
          include_locale:Β boolΒ |Β NoneΒ =Β None,
          limit:Β intΒ |Β NoneΒ =Β None,
          team_id:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -14009,7 +15285,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -14022,7 +15298,7 @@

          Methods

          return self.api_call("users.list", http_verb="GET", params=kwargs)

          Lists all users in a Slack team. -https://api.slack.com/methods/users.list

          +https://docs.slack.dev/reference/methods/users.list

          def users_lookupByEmail(self, *, email:Β str, **kwargs) ‑>Β SlackResponse @@ -14039,13 +15315,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

          Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

          +https://docs.slack.dev/reference/methods/users.lookupByEmail

          def users_profile_get(self, *, user:Β strΒ |Β NoneΒ =Β None, include_labels:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -14063,13 +15339,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs)

          Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

          +https://docs.slack.dev/reference/methods/users.profile.get

          def users_profile_set(self,
          *,
          name:Β strΒ |Β NoneΒ =Β None,
          value:Β strΒ |Β NoneΒ =Β None,
          user:Β strΒ |Β NoneΒ =Β None,
          profile:Β DictΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -14089,7 +15365,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -14104,7 +15380,7 @@

          Methods

          return self.api_call("users.profile.set", json=kwargs)

          Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

          +https://docs.slack.dev/reference/methods/users.profile.set

          def users_setPhoto(self,
          *,
          image:Β strΒ |Β io.IOBase,
          crop_w:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          crop_x:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          crop_y:Β strΒ |Β intΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -14124,13 +15400,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
          +https://docs.slack.dev/reference/methods/users.setPhoto

          def users_setPresence(self, *, presence:Β str, **kwargs) ‑>Β SlackResponse @@ -14147,13 +15423,13 @@

          Methods

          **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs)
          +https://docs.slack.dev/reference/methods/users.setPresence

          def views_open(self,
          *,
          trigger_id:Β strΒ |Β NoneΒ =Β None,
          interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
          view:Β dictΒ |Β View,
          **kwargs) ‑>Β SlackResponse
          @@ -14172,8 +15448,8 @@

          Methods

          **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14185,8 +15461,8 @@

          Methods

          return self.api_call("views.open", json=kwargs)
          +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

          def views_publish(self,
          *,
          user_id:Β str,
          view:Β dictΒ |Β View,
          hash:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -14206,8 +15482,8 @@

          Methods

          ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -14220,8 +15496,8 @@

          Methods

          Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

          +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

          def views_push(self,
          *,
          trigger_id:Β strΒ |Β NoneΒ =Β None,
          interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
          view:Β dictΒ |Β View,
          **kwargs) ‑>Β SlackResponse
          @@ -14243,9 +15519,9 @@

          Methods

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -14260,9 +15536,9 @@

          Methods

          Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

          +https://docs.slack.dev/reference/methods/views.push

          def views_update(self,
          *,
          view:Β dictΒ |Β View,
          external_id:Β strΒ |Β NoneΒ =Β None,
          view_id:Β strΒ |Β NoneΒ =Β None,
          hash:Β strΒ |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -14284,9 +15560,9 @@

          Methods

          """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -14306,9 +15582,119 @@

          Methods

          Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

          +https://docs.slack.dev/reference/methods/views.update

          + +
          +
          +
          + +Expand source code + +
          def workflows_featured_add(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Add featured workflows to a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.add
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return self.api_call("workflows.featured.add", params=kwargs)
          +
          + +
          + +
          +
          + +Expand source code + +
          def workflows_featured_list(
          +    self,
          +    *,
          +    channel_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """List the featured workflows for specified channels.
          +    https://docs.slack.dev/reference/methods/workflows.featured.list
          +    """
          +    if isinstance(channel_ids, (list, tuple)):
          +        kwargs.update({"channel_ids": ",".join(channel_ids)})
          +    else:
          +        kwargs.update({"channel_ids": channel_ids})
          +    return self.api_call("workflows.featured.list", params=kwargs)
          +
          +

          List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

          +
          + +
          +
          + +Expand source code + +
          def workflows_featured_remove(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Remove featured workflows from a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.remove
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return self.api_call("workflows.featured.remove", params=kwargs)
          +
          + +
          + +
          +
          + +Expand source code + +
          def workflows_featured_set(
          +    self,
          +    *,
          +    channel_id: str,
          +    trigger_ids: Union[str, Sequence[str]],
          +    **kwargs,
          +) -> SlackResponse:
          +    """Set featured workflows for a channel.
          +    https://docs.slack.dev/reference/methods/workflows.featured.set
          +    """
          +    kwargs.update({"channel_id": channel_id})
          +    if isinstance(trigger_ids, (list, tuple)):
          +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
          +    else:
          +        kwargs.update({"trigger_ids": trigger_ids})
          +    return self.api_call("workflows.featured.set", params=kwargs)
          +
          +
          def workflows_stepCompleted(self, *, workflow_step_execute_id:Β str, outputs:Β dictΒ |Β NoneΒ =Β None, **kwargs) ‑>Β SlackResponse @@ -14326,7 +15712,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -14336,7 +15722,7 @@

          Methods

          return self.api_call("workflows.stepCompleted", json=kwargs)

          Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

          +https://docs.slack.dev/reference/methods/workflows.stepCompleted

          def workflows_stepFailed(self, *, workflow_step_execute_id:Β str, error:Β Dict[str,Β str], **kwargs) ‑>Β SlackResponse @@ -14354,7 +15740,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14367,7 +15753,7 @@

          Methods

          return self.api_call("workflows.stepFailed", json=kwargs)

          Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

          +https://docs.slack.dev/reference/methods/workflows.stepFailed

          def workflows_updateStep(self,
          *,
          workflow_step_edit_id:Β str,
          inputs:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
          outputs:Β List[Dict[str,Β str]]Β |Β NoneΒ =Β None,
          **kwargs) ‑>Β SlackResponse
          @@ -14386,7 +15772,7 @@

          Methods

          **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14398,7 +15784,7 @@

          Methods

          return self.api_call("workflows.updateStep", json=kwargs)

          Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

          +https://docs.slack.dev/reference/methods/workflows.updateStep

    Inherited members

    @@ -14435,10 +15821,12 @@

    Inherited members

  • Sub-modules

  • @@ -137,7 +137,7 @@

    Returns

    diff --git a/docs/static/api-docs/slack_sdk/web/legacy_base_client.html b/docs/reference/web/legacy_base_client.html similarity index 98% rename from docs/static/api-docs/slack_sdk/web/legacy_base_client.html rename to docs/reference/web/legacy_base_client.html index 6515bde5d..2abe94377 100644 --- a/docs/static/api-docs/slack_sdk/web/legacy_base_client.html +++ b/docs/reference/web/legacy_base_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.legacy_base_client API documentation @@ -580,7 +580,7 @@

    Classes

    On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the Slack API dashboard @@ -633,7 +633,7 @@

    Static methods

    On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the Slack API dashboard @@ -661,7 +661,7 @@

    Static methods

    On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. -https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview

    +https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview

    Args

    signing_secret
    @@ -890,7 +890,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/web/legacy_client.html b/docs/reference/web/legacy_client.html similarity index 82% rename from docs/static/api-docs/slack_sdk/web/legacy_client.html rename to docs/reference/web/legacy_client.html index 7d3dd96c8..d100178dc 100644 --- a/docs/static/api-docs/slack_sdk/web/legacy_client.html +++ b/docs/reference/web/legacy_client.html @@ -3,7 +3,7 @@ - + slack_sdk.web.legacy_client API documentation @@ -58,7 +58,7 @@

    Classes

    class LegacyWebClient(LegacyBaseClient):
         """A WebClient allows apps to communicate with the Slack Platform's Web API.
     
    -    https://api.slack.com/methods
    +    https://docs.slack.dev/reference/methods
     
         The Slack Web API is an interface for querying information from
         and enacting change in a Slack workspace.
    @@ -129,7 +129,7 @@ 

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -151,7 +151,7 @@

    Classes

    Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -178,7 +178,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -199,7 +199,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -219,7 +219,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -239,7 +239,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -263,7 +263,7 @@

    Classes

    Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -290,7 +290,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -312,7 +312,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -343,7 +343,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -371,7 +371,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -388,7 +388,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -410,7 +410,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -430,7 +430,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -449,7 +449,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -459,6 +459,60 @@

    Classes

    kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Create a Salesforce channel for the corresponding object provided. + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Link a Salesforce record to a channel. + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Unlink a Salesforce record from a channel. + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -468,7 +522,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -488,7 +542,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -503,7 +557,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -524,7 +578,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -544,7 +598,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -564,7 +618,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -577,7 +631,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -594,7 +648,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -606,7 +660,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -619,7 +673,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -637,7 +691,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -668,7 +722,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -680,7 +734,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -693,7 +747,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -709,7 +763,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -722,7 +776,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -742,7 +796,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -770,7 +824,7 @@

    Classes

    """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -797,7 +851,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -820,7 +874,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -843,7 +897,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -868,7 +922,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -892,7 +946,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -910,7 +964,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -922,7 +976,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -935,7 +989,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -947,7 +1001,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -972,7 +1026,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -990,7 +1044,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -1003,7 +1057,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -1016,7 +1070,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1028,7 +1082,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1041,7 +1095,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1056,7 +1110,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1079,7 +1133,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1097,7 +1151,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1121,7 +1175,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1146,7 +1200,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1168,7 +1222,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1190,7 +1244,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1210,7 +1264,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1232,7 +1286,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1247,7 +1301,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1267,7 +1321,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1284,7 +1338,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1302,7 +1356,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1324,7 +1378,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1341,7 +1395,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1359,7 +1413,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1373,7 +1427,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1393,7 +1447,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1412,7 +1466,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1433,7 +1487,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1454,7 +1508,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1474,7 +1528,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1488,7 +1542,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1500,7 +1554,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1513,7 +1567,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1526,7 +1580,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1539,7 +1593,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1552,7 +1606,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1566,7 +1620,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1584,7 +1638,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1602,7 +1656,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1621,7 +1675,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1641,7 +1695,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1673,7 +1727,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1697,7 +1751,7 @@

    Classes

    def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1705,7 +1759,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1726,7 +1780,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1739,7 +1793,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1753,7 +1807,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1766,7 +1820,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1779,7 +1833,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1800,7 +1854,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1830,7 +1884,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1851,7 +1905,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1871,7 +1925,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1890,7 +1944,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1905,7 +1959,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -1918,7 +1972,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1933,7 +1987,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1946,7 +2000,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -1958,7 +2012,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1973,7 +2027,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -1985,7 +2039,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -1998,7 +2052,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2015,7 +2069,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2031,7 +2085,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2042,13 +2096,17 @@

    Classes

    channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2058,8 +2116,8 @@

    Classes

    title: str, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2073,8 +2131,8 @@

    Classes

    prompts: List[Dict[str, str]], **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2088,7 +2146,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2098,7 +2156,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2110,7 +2168,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2128,7 +2186,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2154,7 +2212,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2174,7 +2232,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2187,7 +2245,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2200,7 +2258,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2219,7 +2277,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2246,7 +2304,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2258,7 +2316,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2271,7 +2329,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2285,7 +2343,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2301,7 +2359,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2321,7 +2379,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2334,7 +2392,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2346,7 +2404,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2361,7 +2419,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2386,7 +2444,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2409,7 +2467,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2417,7 +2475,7 @@

    Classes

    # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2587,6 +2645,27 @@

    Classes

    # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2596,7 +2675,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2610,7 +2689,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2629,7 +2708,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2642,7 +2721,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2662,10 +2741,11 @@

    Classes

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2681,11 +2761,12 @@

    Classes

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2708,11 +2789,12 @@

    Classes

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2733,11 +2815,12 @@

    Classes

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2746,7 +2829,7 @@

    Classes

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2757,10 +2840,11 @@

    Classes

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2777,14 +2861,92 @@

    Classes

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + def chat_unfurl( self, *, @@ -2793,6 +2955,7 @@

    Classes

    source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2800,7 +2963,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2809,6 +2972,7 @@

    Classes

    "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -2834,10 +2998,11 @@

    Classes

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2851,6 +3016,7 @@

    Classes

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2859,36 +3025,10 @@

    Classes

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> Union[Future, SlackResponse]: - """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -2901,7 +3041,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2925,7 +3065,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2937,7 +3077,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -2949,7 +3089,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -2963,7 +3103,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -2976,7 +3116,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -2985,7 +3125,7 @@

    Classes

    self, *, action: str, channel: str, target_team: str, **kwargs ) -> Union[Future, SlackResponse]: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -3009,7 +3149,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3033,7 +3173,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3053,7 +3193,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3076,7 +3216,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3098,7 +3238,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3111,7 +3251,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3123,7 +3263,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3139,7 +3279,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3165,7 +3305,7 @@

    Classes

    ) -> Union[Future, SlackResponse]: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3178,7 +3318,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3192,7 +3332,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3206,7 +3346,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3225,7 +3365,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3244,7 +3384,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3270,7 +3410,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3291,7 +3431,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3309,7 +3449,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3336,7 +3476,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3349,7 +3489,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3361,7 +3501,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3374,7 +3514,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3387,7 +3527,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3399,7 +3539,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3408,7 +3548,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3420,7 +3560,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3432,7 +3572,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3444,7 +3584,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3459,11 +3599,35 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -3472,7 +3636,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3484,7 +3648,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3500,7 +3664,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3528,7 +3692,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3556,7 +3720,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3572,7 +3736,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3597,7 +3761,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3636,7 +3800,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3671,7 +3835,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3685,7 +3849,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3703,7 +3867,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3715,7 +3879,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3734,7 +3898,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3787,12 +3951,12 @@

    Classes

    ) -> Union[Future, SlackResponse]: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3878,7 +4042,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3901,7 +4065,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3924,7 +4088,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -3937,7 +4101,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -3945,7 +4109,7 @@

    Classes

    # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4126,7 +4290,7 @@

    Classes

    # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4202,7 +4366,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4214,7 +4378,7 @@

    Classes

    # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4301,7 +4465,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4327,7 +4491,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4347,7 +4511,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4363,7 +4527,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4384,7 +4548,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4396,7 +4560,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4408,7 +4572,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4421,7 +4585,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4435,7 +4599,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4451,7 +4615,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4477,7 +4641,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4503,7 +4667,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4527,7 +4691,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4548,7 +4712,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4561,7 +4725,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4574,7 +4738,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4586,7 +4750,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4599,7 +4763,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4617,7 +4781,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4645,7 +4809,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4673,7 +4837,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4702,7 +4866,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4718,139 +4882,382 @@

    Classes

    ) return self.api_call("search.messages", http_verb="GET", params=kwargs) - def stars_add( + def slackLists_access_delete( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Adds a star to an item. - https://api.slack.com/methods/stars.add + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create """ kwargs.update( { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, } ) - return self.api_call("stars.add", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) - def stars_list( + def slackLists_download_get( self, *, - count: Optional[int] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, - page: Optional[int] = None, - team_id: Optional[str] = None, + list_id: str, + job_id: str, **kwargs, ) -> Union[Future, SlackResponse]: - """Lists stars for a user. - https://api.slack.com/methods/stars.list + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get """ kwargs.update( { - "count": count, - "cursor": cursor, - "limit": limit, - "page": page, - "team_id": team_id, + "list_id": list_id, + "job_id": job_id, } ) - return self.api_call("stars.list", http_verb="GET", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) - def stars_remove( + def slackLists_download_start( self, *, - channel: Optional[str] = None, - file: Optional[str] = None, - file_comment: Optional[str] = None, - timestamp: Optional[str] = None, + list_id: str, + include_archived: Optional[bool] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Removes a star from an item. - https://api.slack.com/methods/stars.remove + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start """ kwargs.update( { - "channel": channel, - "file": file, - "file_comment": file_comment, - "timestamp": timestamp, + "list_id": list_id, + "include_archived": include_archived, } ) - return self.api_call("stars.remove", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) - def team_accessLogs( + def slackLists_items_create( self, *, - before: Optional[Union[int, str]] = None, - count: Optional[Union[int, str]] = None, - page: Optional[Union[int, str]] = None, - team_id: Optional[str] = None, - cursor: Optional[str] = None, - limit: Optional[int] = None, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create """ kwargs.update( { - "before": before, - "count": count, - "page": page, - "team_id": team_id, - "cursor": cursor, - "limit": limit, + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, } ) - return self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) - def team_billableInfo( + def slackLists_items_delete( self, *, - team_id: Optional[str] = None, - user: Optional[str] = None, + list_id: str, + id: str, **kwargs, ) -> Union[Future, SlackResponse]: - """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete """ - kwargs.update({"team_id": team_id, "user": user}) - return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) - def team_billing_info( + def slackLists_items_deleteMultiple( self, + *, + list_id: str, + ids: List[str], **kwargs, ) -> Union[Future, SlackResponse]: - """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple """ - return self.api_call("team.billing.info", params=kwargs) + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) - def team_externalTeams_disconnect( + def slackLists_items_info( self, *, - target_team: str, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info """ kwargs.update( { - "target_team": target_team, + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, } ) - return self.api_call("team.externalTeams.disconnect", params=kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) - def team_externalTeams_list( + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + + def stars_add( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Adds a star to an item. + https://docs.slack.dev/reference/methods/stars.add + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return self.api_call("stars.add", params=kwargs) + + def stars_list( + self, + *, + count: Optional[int] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + page: Optional[int] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Lists stars for a user. + https://docs.slack.dev/reference/methods/stars.list + """ + kwargs.update( + { + "count": count, + "cursor": cursor, + "limit": limit, + "page": page, + "team_id": team_id, + } + ) + return self.api_call("stars.list", http_verb="GET", params=kwargs) + + def stars_remove( + self, + *, + channel: Optional[str] = None, + file: Optional[str] = None, + file_comment: Optional[str] = None, + timestamp: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Removes a star from an item. + https://docs.slack.dev/reference/methods/stars.remove + """ + kwargs.update( + { + "channel": channel, + "file": file, + "file_comment": file_comment, + "timestamp": timestamp, + } + ) + return self.api_call("stars.remove", params=kwargs) + + def team_accessLogs( + self, + *, + before: Optional[Union[int, str]] = None, + count: Optional[Union[int, str]] = None, + page: Optional[Union[int, str]] = None, + team_id: Optional[str] = None, + cursor: Optional[str] = None, + limit: Optional[int] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Gets the access logs for the current team. + https://docs.slack.dev/reference/methods/team.accessLogs + """ + kwargs.update( + { + "before": before, + "count": count, + "page": page, + "team_id": team_id, + "cursor": cursor, + "limit": limit, + } + ) + return self.api_call("team.accessLogs", http_verb="GET", params=kwargs) + + def team_billableInfo( + self, + *, + team_id: Optional[str] = None, + user: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Gets billable users information for the current team. + https://docs.slack.dev/reference/methods/team.billableInfo + """ + kwargs.update({"team_id": team_id, "user": user}) + return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) + + def team_billing_info( + self, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Reads a workspace's billing plan information. + https://docs.slack.dev/reference/methods/team.billing.info + """ + return self.api_call("team.billing.info", params=kwargs) + + def team_externalTeams_disconnect( + self, + *, + target_team: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Disconnects an external organization. + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect + """ + kwargs.update( + { + "target_team": target_team, + } + ) + return self.api_call("team.externalTeams.disconnect", params=kwargs) + + def team_externalTeams_list( self, *, connection_status_filter: Optional[str] = None, @@ -4863,7 +5270,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4894,7 +5301,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4912,7 +5319,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4934,7 +5341,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4944,7 +5351,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -4960,7 +5367,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -4986,7 +5393,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -5000,7 +5407,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -5015,7 +5422,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5040,7 +5447,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5067,7 +5474,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5088,7 +5495,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5115,7 +5522,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5137,7 +5544,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5148,7 +5555,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5158,7 +5565,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5170,7 +5577,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5185,7 +5592,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5204,7 +5611,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5219,7 +5626,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5231,7 +5638,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5242,7 +5649,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5255,7 +5662,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5270,7 +5677,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5293,8 +5700,8 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5317,9 +5724,9 @@

    Classes

    Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5342,9 +5749,9 @@

    Classes

    """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5371,8 +5778,8 @@

    Classes

    ) -> Union[Future, SlackResponse]: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5383,6 +5790,72 @@

    Classes

    # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5391,7 +5864,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5408,7 +5881,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5429,7 +5902,7 @@

    Classes

    **kwargs, ) -> Union[Future, SlackResponse]: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -5441,7 +5914,7 @@

    Classes

    return self.api_call("workflows.updateStep", json=kwargs)

    A WebClient allows apps to communicate with the Slack Platform's Web API.

    -

    https://api.slack.com/methods

    +

    https://docs.slack.dev/reference/methods

    The Slack Web API is an interface for querying information from and enacting change in a Slack workspace.

    This client handles constructing and sending HTTP requests to Slack @@ -5521,7 +5994,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -5531,7 +6004,7 @@

    Methods

    return self.api_call("admin.analytics.getFile", params=kwargs)

    Retrieve analytics data for a given date, presented as a compressed JSON file -https://api.slack.com/methods/admin.analytics.getFile

    +https://docs.slack.dev/reference/methods/admin.analytics.getFile

    def admin_apps_activities_list(self,
    *,
    app_id:Β strΒ |Β NoneΒ =Β None,
    component_id:Β strΒ |Β NoneΒ =Β None,
    component_type:Β strΒ |Β NoneΒ =Β None,
    log_event_type:Β strΒ |Β NoneΒ =Β None,
    max_date_created:Β intΒ |Β NoneΒ =Β None,
    min_date_created:Β intΒ |Β NoneΒ =Β None,
    min_log_level:Β strΒ |Β NoneΒ =Β None,
    sort_direction:Β strΒ |Β NoneΒ =Β None,
    source:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    trace_id:Β strΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5560,7 +6033,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -5582,7 +6055,7 @@

    Methods

    return self.api_call("admin.apps.activities.list", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.apps.activities.list

    def admin_apps_approve(self,
    *,
    app_id:Β strΒ |Β NoneΒ =Β None,
    request_id:Β strΒ |Β NoneΒ =Β None,
    enterprise_id:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5605,7 +6078,7 @@

    Methods

    Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -5626,7 +6099,7 @@

    Methods

    Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.approve

    +https://docs.slack.dev/reference/methods/admin.apps.approve

    def admin_apps_approved_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    enterprise_id:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5646,7 +6119,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -5659,7 +6132,7 @@

    Methods

    return self.api_call("admin.apps.approved.list", http_verb="GET", params=kwargs)

    List approved apps for an org or workspace. -https://api.slack.com/methods/admin.apps.approved.list

    +https://docs.slack.dev/reference/methods/admin.apps.approved.list

    def admin_apps_clearResolution(self,
    *,
    app_id:Β str,
    enterprise_id:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5678,7 +6151,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -5690,7 +6163,7 @@

    Methods

    return self.api_call("admin.apps.clearResolution", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.apps.clearResolution

    def admin_apps_config_lookup(self, *, app_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -5707,7 +6180,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -5716,7 +6189,7 @@

    Methods

    return self.api_call("admin.apps.config.lookup", params=kwargs)

    Look up the app config for connectors by their IDs -https://api.slack.com/methods/admin.apps.config.lookup

    +https://docs.slack.dev/reference/methods/admin.apps.config.lookup

    def admin_apps_config_set(self,
    *,
    app_id:Β str,
    domain_restrictions:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
    workflow_auth_strategy:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5735,7 +6208,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -5748,7 +6221,7 @@

    Methods

    return self.api_call("admin.apps.config.set", params=kwargs)

    Set the app config for a connector -https://api.slack.com/methods/admin.apps.config.set

    +https://docs.slack.dev/reference/methods/admin.apps.config.set

    def admin_apps_requests_cancel(self,
    *,
    request_id:Β str,
    enterprise_id:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5767,7 +6240,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -5779,7 +6252,7 @@

    Methods

    return self.api_call("admin.apps.requests.cancel", http_verb="POST", params=kwargs)

    List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.cancel

    +https://docs.slack.dev/reference/methods/admin.apps.requests.cancel

    def admin_apps_requests_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5798,7 +6271,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -5810,7 +6283,7 @@

    Methods

    return self.api_call("admin.apps.requests.list", http_verb="GET", params=kwargs)

    List app requests for a team/workspace. -https://api.slack.com/methods/admin.apps.requests.list

    +https://docs.slack.dev/reference/methods/admin.apps.requests.list

    def admin_apps_restrict(self,
    *,
    app_id:Β strΒ |Β NoneΒ =Β None,
    request_id:Β strΒ |Β NoneΒ =Β None,
    enterprise_id:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5833,7 +6306,7 @@

    Methods

    Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -5854,7 +6327,7 @@

    Methods

    Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. -https://api.slack.com/methods/admin.apps.restrict

    +https://docs.slack.dev/reference/methods/admin.apps.restrict

    def admin_apps_restricted_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    enterprise_id:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5874,7 +6347,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -5887,7 +6360,7 @@

    Methods

    return self.api_call("admin.apps.restricted.list", http_verb="GET", params=kwargs)

    List restricted apps for an org or workspace. -https://api.slack.com/methods/admin.apps.restricted.list

    +https://docs.slack.dev/reference/methods/admin.apps.restricted.list

    def admin_apps_uninstall(self,
    *,
    app_id:Β str,
    enterprise_id:Β strΒ |Β NoneΒ =Β None,
    team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5907,7 +6380,7 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -5921,7 +6394,7 @@

    Methods

    Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. -https://api.slack.com/methods/admin.apps.uninstall

    +https://docs.slack.dev/reference/methods/admin.apps.uninstall

    def admin_auth_policy_assignEntities(self,
    *,
    entity_ids:Β strΒ |Β Sequence[str],
    policy_name:Β str,
    entity_type:Β str,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5940,7 +6413,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -5951,7 +6424,7 @@

    Methods

    return self.api_call("admin.auth.policy.assignEntities", http_verb="POST", params=kwargs)

    Assign entities to a particular authentication policy. -https://api.slack.com/methods/admin.auth.policy.assignEntities

    +https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities

    def admin_auth_policy_getEntities(self,
    *,
    policy_name:Β str,
    cursor:Β strΒ |Β NoneΒ =Β None,
    entity_type:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -5971,7 +6444,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -5983,7 +6456,7 @@

    Methods

    return self.api_call("admin.auth.policy.getEntities", http_verb="POST", params=kwargs)

    Fetch all the entities assigned to a particular authentication policy by name. -https://api.slack.com/methods/admin.auth.policy.getEntities

    +https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities

    def admin_auth_policy_removeEntities(self,
    *,
    entity_ids:Β strΒ |Β Sequence[str],
    policy_name:Β str,
    entity_type:Β str,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6002,7 +6475,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -6013,7 +6486,7 @@

    Methods

    return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs)

    Remove specified entities from a specified authentication policy. -https://api.slack.com/methods/admin.auth.policy.removeEntities

    +https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities

    def admin_barriers_create(self,
    *,
    barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
    primary_usergroup_id:Β str,
    restricted_subjects:Β strΒ |Β Sequence[str],
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6032,7 +6505,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6046,7 +6519,7 @@

    Methods

    return self.api_call("admin.barriers.create", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.barriers.create

    def admin_barriers_delete(self, *, barrier_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6063,13 +6536,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs)

    Delete an existing Information Barrier -https://api.slack.com/methods/admin.barriers.delete

    +https://docs.slack.dev/reference/methods/admin.barriers.delete

    def admin_barriers_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6087,7 +6560,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -6097,7 +6570,7 @@

    Methods

    return self.api_call("admin.barriers.list", http_verb="GET", params=kwargs)

    Get all Information Barriers for your organization -https://api.slack.com/methods/admin.barriers.list

    +https://docs.slack.dev/reference/methods/admin.barriers.list

    def admin_barriers_update(self,
    *,
    barrier_id:Β str,
    barriered_from_usergroup_ids:Β strΒ |Β Sequence[str],
    primary_usergroup_id:Β str,
    restricted_subjects:Β strΒ |Β Sequence[str],
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6117,7 +6590,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -6131,7 +6604,7 @@

    Methods

    return self.api_call("admin.barriers.update", http_verb="POST", params=kwargs)

    Update an existing Information Barrier -https://api.slack.com/methods/admin.barriers.update

    +https://docs.slack.dev/reference/methods/admin.barriers.update

    def admin_conversations_archive(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6148,13 +6621,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs)

    Archive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

    +https://docs.slack.dev/reference/methods/admin.conversations.archive

    def admin_conversations_bulkArchive(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6171,13 +6644,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs)

    Archive public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkArchive

    +https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive

    def admin_conversations_bulkDelete(self, *, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6218,7 +6691,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -6229,7 +6702,7 @@

    Methods

    return self.api_call("admin.conversations.bulkMove", params=kwargs)

    Move public or private channels in bulk. -https://api.slack.com/methods/admin.conversations.bulkMove

    +https://docs.slack.dev/reference/methods/admin.conversations.bulkMove

    def admin_conversations_convertToPrivate(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6246,13 +6719,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs)

    Convert a public channel to a private channel. -https://api.slack.com/methods/admin.conversations.convertToPrivate

    +https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate

    def admin_conversations_convertToPublic(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6269,13 +6742,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs)

    Convert a privte channel to a public channel. -https://api.slack.com/methods/admin.conversations.convertToPublic

    +https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic

    def admin_conversations_create(self,
    *,
    is_private:Β bool,
    name:Β str,
    description:Β strΒ |Β NoneΒ =Β None,
    org_wide:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6296,7 +6769,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -6310,7 +6783,34 @@

    Methods

    return self.api_call("admin.conversations.create", params=kwargs)

    Create a public or private channel-based conversation. -https://api.slack.com/methods/admin.conversations.create

    +https://docs.slack.dev/reference/methods/admin.conversations.create

    + +
    +def admin_conversations_createForObjects(self,
    *,
    object_id:Β str,
    salesforce_org_id:Β str,
    invite_object_team:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def admin_conversations_createForObjects(
    +    self,
    +    *,
    +    object_id: str,
    +    salesforce_org_id: str,
    +    invite_object_team: Optional[bool] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Create a Salesforce channel for the corresponding object provided.
    +    https://docs.slack.dev/reference/methods/admin.conversations.createForObjects
    +    """
    +    kwargs.update(
    +        {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team}
    +    )
    +    return self.api_call("admin.conversations.createForObjects", params=kwargs)
    +
    +

    Create a Salesforce channel for the corresponding object provided. +https://docs.slack.dev/reference/methods/admin.conversations.createForObjects

    def admin_conversations_delete(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6327,13 +6827,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.delete

    def admin_conversations_disconnectShared(self,
    *,
    channel_id:Β str,
    leaving_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6351,7 +6851,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -6361,7 +6861,7 @@

    Methods

    return self.api_call("admin.conversations.disconnectShared", params=kwargs)

    Disconnect a connected channel from one or more workspaces. -https://api.slack.com/methods/admin.conversations.disconnectShared

    +https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared

    def admin_conversations_ekm_listOriginalConnectedChannelInfo(self,
    *,
    channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6383,7 +6883,7 @@

    Methods

    """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -6404,7 +6904,7 @@

    Methods

    List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. -https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

    +https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo

    def admin_conversations_getConversationPrefs(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6421,13 +6921,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs)

    Get conversation preferences for a public or private channel. -https://api.slack.com/methods/admin.conversations.getConversationPrefs

    +https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs

    def admin_conversations_getCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6444,13 +6944,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention

    def admin_conversations_getTeams(self,
    *,
    channel_id:Β str,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6469,7 +6969,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -6481,7 +6981,7 @@

    Methods

    return self.api_call("admin.conversations.getTeams", params=kwargs)

    Set the workspaces in an Enterprise grid org that connect to a channel. -https://api.slack.com/methods/admin.conversations.getTeams

    +https://docs.slack.dev/reference/methods/admin.conversations.getTeams

    def admin_conversations_invite(self, *, channel_id:Β str, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6499,7 +6999,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -6510,7 +7010,38 @@

    Methods

    return self.api_call("admin.conversations.invite", params=kwargs)

    Invite a user to a public or private channel. -https://api.slack.com/methods/admin.conversations.invite

    +https://docs.slack.dev/reference/methods/admin.conversations.invite

    + +
    +def admin_conversations_linkObjects(self, *, channel:Β str, record_id:Β str, salesforce_org_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def admin_conversations_linkObjects(
    +    self,
    +    *,
    +    channel: str,
    +    record_id: str,
    +    salesforce_org_id: str,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Link a Salesforce record to a channel.
    +    https://docs.slack.dev/reference/methods/admin.conversations.linkObjects
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "record_id": record_id,
    +            "salesforce_org_id": salesforce_org_id,
    +        }
    +    )
    +    return self.api_call("admin.conversations.linkObjects", params=kwargs)
    +
    +
    def admin_conversations_lookup(self,
    *,
    last_message_activity_before:Β int,
    team_ids:Β strΒ |Β Sequence[str],
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    max_member_count:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6531,7 +7062,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -6548,7 +7079,7 @@

    Methods

    return self.api_call("admin.conversations.lookup", params=kwargs)

    Returns channels on the given team using the filters. -https://api.slack.com/methods/admin.conversations.lookup

    +https://docs.slack.dev/reference/methods/admin.conversations.lookup

    def admin_conversations_removeCustomRetention(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6565,13 +7096,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention

    def admin_conversations_rename(self, *, channel_id:Β str, name:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6589,13 +7120,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.rename

    def admin_conversations_restrictAccess_addGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6614,7 +7145,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -6630,7 +7161,7 @@

    Methods

    )

    Add an allowlist of IDP groups for accessing a channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup

    +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup

    def admin_conversations_restrictAccess_listGroups(self, *, channel_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6648,7 +7179,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -6663,7 +7194,7 @@

    Methods

    )
    +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups

    def admin_conversations_restrictAccess_removeGroup(self, *, channel_id:Β str, group_id:Β str, team_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6682,7 +7213,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -6698,7 +7229,7 @@

    Methods

    )

    Remove a linked IDP group linked from a private channel. -https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup

    +https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup

    def admin_conversations_setConversationPrefs(self, *, channel_id:Β str, prefs:Β strΒ |Β Dict[str,Β str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6764,7 +7295,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -6774,7 +7305,7 @@

    Methods

    return self.api_call("admin.conversations.setConversationPrefs", params=kwargs)

    Set the posting permissions for a public or private channel. -https://api.slack.com/methods/admin.conversations.setConversationPrefs

    +https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs

    def admin_conversations_setCustomRetention(self, *, channel_id:Β str, duration_days:Β int, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6792,13 +7323,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention

    def admin_conversations_setTeams(self,
    *,
    channel_id:Β str,
    org_channel:Β boolΒ |Β NoneΒ =Β None,
    target_team_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6818,7 +7349,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -6834,7 +7365,7 @@

    Methods

    return self.api_call("admin.conversations.setTeams", params=kwargs)

    Set the workspaces in an Enterprise grid org that connect to a public or private channel. -https://api.slack.com/methods/admin.conversations.setTeams

    +https://docs.slack.dev/reference/methods/admin.conversations.setTeams

    def admin_conversations_unarchive(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6851,39 +7382,68 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs)

    Unarchive a public or private channel. -https://api.slack.com/methods/admin.conversations.archive

    +https://docs.slack.dev/reference/methods/admin.conversations.archive

    -
    -def admin_emoji_add(self, *, name:Β str, url:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +def admin_conversations_unlinkObjects(self, *, channel:Β str, new_name:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    Expand source code -
    def admin_emoji_add(
    +
    def admin_conversations_unlinkObjects(
         self,
         *,
    -    name: str,
    -    url: str,
    +    channel: str,
    +    new_name: str,
         **kwargs,
     ) -> Union[Future, SlackResponse]:
    -    """Add an emoji.
    -    https://api.slack.com/methods/admin.emoji.add
    +    """Unlink a Salesforce record from a channel.
    +    https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects
         """
    -    kwargs.update({"name": name, "url": url})
    -    return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
    + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs)
    - +
    -
    +
    +def admin_emoji_add(self, *, name:Β str, url:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def admin_emoji_add(
    +    self,
    +    *,
    +    name: str,
    +    url: str,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Add an emoji.
    +    https://docs.slack.dev/reference/methods/admin.emoji.add
    +    """
    +    kwargs.update({"name": name, "url": url})
    +    return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs)
    +
    + +
    +
    def admin_emoji_addAlias(self, *, alias_for:Β str, name:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6899,13 +7459,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.emoji.addAlias

    def admin_emoji_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6923,13 +7483,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs)

    List emoji for an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.list

    +https://docs.slack.dev/reference/methods/admin.emoji.list

    def admin_emoji_remove(self, *, name:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6946,13 +7506,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs)

    Remove an emoji across an Enterprise Grid organization. -https://api.slack.com/methods/admin.emoji.remove

    +https://docs.slack.dev/reference/methods/admin.emoji.remove

    def admin_emoji_rename(self, *, name:Β str, new_name:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -6970,13 +7530,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.emoji.rename

    def admin_functions_list(self,
    *,
    app_ids:Β strΒ |Β Sequence[str],
    team_id:Β strΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -6996,7 +7556,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -7012,7 +7572,7 @@

    Methods

    return self.api_call("admin.functions.list", params=kwargs)

    Look up functions by a set of apps -https://api.slack.com/methods/admin.functions.list

    +https://docs.slack.dev/reference/methods/admin.functions.list

    def admin_functions_permissions_lookup(self, *, function_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7030,7 +7590,7 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -7040,7 +7600,7 @@

    Methods

    Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. -https://api.slack.com/methods/admin.functions.permissions.lookup

    +https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup

    def admin_functions_permissions_set(self,
    *,
    function_id:Β str,
    visibility:Β str,
    user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7060,7 +7620,7 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -7077,7 +7637,7 @@

    Methods

    Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities -https://api.slack.com/methods/admin.functions.permissions.set

    +https://docs.slack.dev/reference/methods/admin.functions.permissions.set

    def admin_inviteRequests_approve(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7095,13 +7655,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.inviteRequests.approve

    def admin_inviteRequests_approved_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7120,7 +7680,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -7132,7 +7692,7 @@

    Methods

    return self.api_call("admin.inviteRequests.approved.list", params=kwargs)

    List all approved workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.approved.list

    +https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list

    def admin_inviteRequests_denied_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7151,7 +7711,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -7163,7 +7723,7 @@

    Methods

    return self.api_call("admin.inviteRequests.denied.list", params=kwargs)

    List all denied workspace invite requests. -https://api.slack.com/methods/admin.inviteRequests.denied.list

    +https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list

    def admin_inviteRequests_deny(self, *, invite_request_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7181,13 +7741,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.inviteRequests.deny

    def admin_inviteRequests_list(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7223,7 +7783,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7237,7 +7797,7 @@

    Methods

    return self.api_call("admin.roles.addAssignments", params=kwargs)

    Adds members to the specified role with the specified scopes -https://api.slack.com/methods/admin.roles.addAssignments

    +https://docs.slack.dev/reference/methods/admin.roles.addAssignments

    def admin_roles_listAssignments(self,
    *,
    role_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    entity_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    sort_dir:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7259,7 +7819,7 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -7274,7 +7834,7 @@

    Methods

    Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities -https://api.slack.com/methods/admin.roles.listAssignments

    +https://docs.slack.dev/reference/methods/admin.roles.listAssignments

    def admin_roles_removeAssignments(self,
    *,
    role_id:Β str,
    entity_ids:Β strΒ |Β Sequence[str],
    user_ids:Β strΒ |Β Sequence[str],
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7293,7 +7853,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -7307,7 +7867,7 @@

    Methods

    return self.api_call("admin.roles.removeAssignments", params=kwargs)

    Removes a set of users from a role for the given scopes and entities -https://api.slack.com/methods/admin.roles.removeAssignments

    +https://docs.slack.dev/reference/methods/admin.roles.removeAssignments

    def admin_teams_admins_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7326,7 +7886,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -7338,7 +7898,7 @@

    Methods

    return self.api_call("admin.teams.admins.list", http_verb="GET", params=kwargs)

    List all of the admins on a given workspace. -https://api.slack.com/methods/admin.inviteRequests.list

    +https://docs.slack.dev/reference/methods/admin.inviteRequests.list

    def admin_teams_create(self,
    *,
    team_domain:Β str,
    team_name:Β str,
    team_description:Β strΒ |Β NoneΒ =Β None,
    team_discoverability:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7358,7 +7918,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -7371,7 +7931,7 @@

    Methods

    return self.api_call("admin.teams.create", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.create

    def admin_teams_list(self, *, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7389,13 +7949,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs)

    List all teams on an Enterprise organization. -https://api.slack.com/methods/admin.teams.list

    +https://docs.slack.dev/reference/methods/admin.teams.list

    def admin_teams_owners_list(self, *, team_id:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7414,13 +7974,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs)

    List all of the admins on a given workspace. -https://api.slack.com/methods/admin.teams.owners.list

    +https://docs.slack.dev/reference/methods/admin.teams.owners.list

    def admin_teams_settings_info(self, *, team_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7437,13 +7997,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs)

    Fetch information about settings in a workspace -https://api.slack.com/methods/admin.teams.settings.info

    +https://docs.slack.dev/reference/methods/admin.teams.settings.info

    def admin_teams_settings_setDefaultChannels(self, *, team_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7461,7 +8021,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -7471,7 +8031,7 @@

    Methods

    return self.api_call("admin.teams.settings.setDefaultChannels", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels

    def admin_teams_settings_setDescription(self, *, team_id:Β str, description:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7489,13 +8049,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription

    def admin_teams_settings_setDiscoverability(self, *, team_id:Β str, discoverability:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7513,13 +8073,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability

    def admin_teams_settings_setIcon(self, *, team_id:Β str, image_url:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7537,13 +8097,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon

    def admin_teams_settings_setName(self, *, team_id:Β str, name:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7561,13 +8121,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.teams.settings.setName

    def admin_usergroups_addChannels(self,
    *,
    channel_ids:Β strΒ |Β Sequence[str],
    usergroup_id:Β str,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7586,7 +8146,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7596,7 +8156,7 @@

    Methods

    return self.api_call("admin.usergroups.addChannels", params=kwargs)

    Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.addChannels

    +https://docs.slack.dev/reference/methods/admin.usergroups.addChannels

    def admin_usergroups_addTeams(self,
    *,
    usergroup_id:Β str,
    team_ids:Β strΒ |Β Sequence[str],
    auto_provision:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7615,7 +8175,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -7625,7 +8185,7 @@

    Methods

    return self.api_call("admin.usergroups.addTeams", params=kwargs)

    Associate one or more default workspaces with an organization-wide IDP group. -https://api.slack.com/methods/admin.usergroups.addTeams

    +https://docs.slack.dev/reference/methods/admin.usergroups.addTeams

    def admin_usergroups_listChannels(self,
    *,
    usergroup_id:Β str,
    include_num_members:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7644,7 +8204,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -7656,7 +8216,7 @@

    Methods

    return self.api_call("admin.usergroups.listChannels", params=kwargs)

    Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.listChannels

    +https://docs.slack.dev/reference/methods/admin.usergroups.listChannels

    def admin_usergroups_removeChannels(self, *, usergroup_id:Β str, channel_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7674,7 +8234,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -7684,7 +8244,7 @@

    Methods

    return self.api_call("admin.usergroups.removeChannels", params=kwargs)

    Add one or more default channels to an IDP group. -https://api.slack.com/methods/admin.usergroups.removeChannels

    +https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels

    def admin_users_assign(self,
    *,
    team_id:Β str,
    user_id:Β str,
    channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    is_restricted:Β boolΒ |Β NoneΒ =Β None,
    is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7705,7 +8265,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -7722,7 +8282,7 @@

    Methods

    return self.api_call("admin.users.assign", params=kwargs)

    Add an Enterprise user to a workspace. -https://api.slack.com/methods/admin.users.assign

    +https://docs.slack.dev/reference/methods/admin.users.assign

    def admin_users_invite(self,
    *,
    team_id:Β str,
    email:Β str,
    channel_ids:Β strΒ |Β Sequence[str],
    custom_message:Β strΒ |Β NoneΒ =Β None,
    email_password_policy_enabled:Β boolΒ |Β NoneΒ =Β None,
    guest_expiration_ts:Β strΒ |Β floatΒ |Β NoneΒ =Β None,
    is_restricted:Β boolΒ |Β NoneΒ =Β None,
    is_ultra_restricted:Β boolΒ |Β NoneΒ =Β None,
    real_name:Β strΒ |Β NoneΒ =Β None,
    resend:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7748,7 +8308,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -7770,10 +8330,10 @@

    Methods

    return self.api_call("admin.users.invite", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.users.invite

    -def admin_users_list(self,
    *,
    team_id:Β str,
    include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
    is_active:Β boolΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +def admin_users_list(self,
    *,
    team_id:Β strΒ |Β NoneΒ =Β None,
    include_deactivated_user_workspaces:Β boolΒ |Β NoneΒ =Β None,
    is_active:Β boolΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7783,7 +8343,7 @@

    Methods

    def admin_users_list(
         self,
         *,
    -    team_id: str,
    +    team_id: Optional[str] = None,
         include_deactivated_user_workspaces: Optional[bool] = None,
         is_active: Optional[bool] = None,
         cursor: Optional[str] = None,
    @@ -7791,7 +8351,7 @@ 

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -7805,7 +8365,7 @@

    Methods

    return self.api_call("admin.users.list", params=kwargs)
    +https://docs.slack.dev/reference/methods/admin.users.list

    def admin_users_remove(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7823,13 +8383,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs)

    Remove a user from a workspace. -https://api.slack.com/methods/admin.users.remove

    +https://docs.slack.dev/reference/methods/admin.users.remove

    def admin_users_session_clearSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7847,7 +8407,7 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7857,7 +8417,7 @@

    Methods

    Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. -https://api.slack.com/methods/admin.users.session.clearSettings

    +https://docs.slack.dev/reference/methods/admin.users.session.clearSettings

    def admin_users_session_getSettings(self, *, user_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7875,7 +8435,7 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -7885,7 +8445,7 @@

    Methods

    Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. -https://api.slack.com/methods/admin.users.session.getSettings

    +https://docs.slack.dev/reference/methods/admin.users.session.getSettings

    def admin_users_session_invalidate(self, *, session_id:Β str, team_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -7903,13 +8463,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs)

    Invalidate a single session for a user by session_id. -https://api.slack.com/methods/admin.users.session.invalidate

    +https://docs.slack.dev/reference/methods/admin.users.session.invalidate

    def admin_users_session_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    user_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7929,7 +8489,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -7942,7 +8502,7 @@

    Methods

    return self.api_call("admin.users.session.list", params=kwargs)

    Lists all active user sessions for an organization -https://api.slack.com/methods/admin.users.session.list

    +https://docs.slack.dev/reference/methods/admin.users.session.list

    def admin_users_session_reset(self,
    *,
    user_id:Β str,
    mobile_only:Β boolΒ |Β NoneΒ =Β None,
    web_only:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7961,7 +8521,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -7973,7 +8533,7 @@

    Methods

    return self.api_call("admin.users.session.reset", params=kwargs)

    Wipes all valid sessions on all devices for a given user. -https://api.slack.com/methods/admin.users.session.reset

    +https://docs.slack.dev/reference/methods/admin.users.session.reset

    def admin_users_session_resetBulk(self,
    *,
    user_ids:Β strΒ |Β Sequence[str],
    mobile_only:Β boolΒ |Β NoneΒ =Β None,
    web_only:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -7992,7 +8552,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8007,7 +8567,7 @@

    Methods

    return self.api_call("admin.users.session.resetBulk", params=kwargs)

    Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users -https://api.slack.com/methods/admin.users.session.resetBulk

    +https://docs.slack.dev/reference/methods/admin.users.session.resetBulk

    def admin_users_session_setSettings(self,
    *,
    user_ids:Β strΒ |Β Sequence[str],
    desktop_app_browser_quit:Β boolΒ |Β NoneΒ =Β None,
    duration:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8027,7 +8587,7 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -8043,7 +8603,7 @@

    Methods

    Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. -https://api.slack.com/methods/admin.users.session.setSettings

    +https://docs.slack.dev/reference/methods/admin.users.session.setSettings

    def admin_users_setAdmin(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8061,13 +8621,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs)

    Set an existing guest, regular user, or owner to be an admin user. -https://api.slack.com/methods/admin.users.setAdmin

    +https://docs.slack.dev/reference/methods/admin.users.setAdmin

    def admin_users_setExpiration(self, *, expiration_ts:Β int, user_id:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8086,13 +8646,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs)

    Set an expiration for a guest user. -https://api.slack.com/methods/admin.users.setExpiration

    +https://docs.slack.dev/reference/methods/admin.users.setExpiration

    def admin_users_setOwner(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8110,13 +8670,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs)

    Set an existing guest, regular user, or admin user to be a workspace owner. -https://api.slack.com/methods/admin.users.setOwner

    +https://docs.slack.dev/reference/methods/admin.users.setOwner

    def admin_users_setRegular(self, *, team_id:Β str, user_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8134,13 +8694,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs)

    Set an existing guest user, admin user, or owner to be a regular user. -https://api.slack.com/methods/admin.users.setRegular

    +https://docs.slack.dev/reference/methods/admin.users.setRegular

    def admin_users_unsupportedVersions_export(self,
    *,
    date_end_of_support:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    date_sessions_started:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8159,7 +8719,7 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -8171,7 +8731,7 @@

    Methods

    Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. -https://api.slack.com/methods/admin.users.unsupportedVersions.export

    +https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export

    def admin_workflows_collaborators_add(self,
    *,
    collaborator_ids:Β strΒ |Β Sequence[str],
    workflow_ids:Β strΒ |Β Sequence[str],
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8189,7 +8749,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8202,7 +8762,7 @@

    Methods

    return self.api_call("admin.workflows.collaborators.add", params=kwargs)

    Add collaborators to workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.add

    +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add

    def admin_workflows_collaborators_remove(self,
    *,
    collaborator_ids:Β strΒ |Β Sequence[str],
    workflow_ids:Β strΒ |Β Sequence[str],
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8220,7 +8780,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -8233,7 +8793,7 @@

    Methods

    return self.api_call("admin.workflows.collaborators.remove", params=kwargs)

    Remove collaborators from workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.collaborators.remove

    +https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove

    def admin_workflows_permissions_lookup(self,
    *,
    workflow_ids:Β strΒ |Β Sequence[str],
    max_workflow_triggers:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8251,7 +8811,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8265,7 +8825,7 @@

    Methods

    return self.api_call("admin.workflows.permissions.lookup", params=kwargs)

    Look up the permissions for a set of workflows -https://api.slack.com/methods/admin.workflows.permissions.lookup

    +https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup

    def admin_workflows_unpublish(self, *, workflow_ids:Β strΒ |Β Sequence[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8331,7 +8891,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -8340,7 +8900,7 @@

    Methods

    return self.api_call("admin.workflows.unpublish", params=kwargs)

    Unpublish workflows within the team or enterprise -https://api.slack.com/methods/admin.workflows.unpublish

    +https://docs.slack.dev/reference/methods/admin.workflows.unpublish

    def api_test(self, *, error:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8357,13 +8917,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs)

    Checks API calling code. -https://api.slack.com/methods/api.test

    +https://docs.slack.dev/reference/methods/api.test

    def apps_connections_open(self, *, app_token:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8381,14 +8941,14 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs)

    Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads -https://api.slack.com/methods/apps.connections.open

    +https://docs.slack.dev/reference/methods/apps.connections.open

    def apps_event_authorizations_list(self,
    *,
    event_context:Β str,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8408,14 +8968,14 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs)

    Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. -https://api.slack.com/methods/apps.event.authorizations.list

    +https://docs.slack.dev/reference/methods/apps.event.authorizations.list

    def apps_manifest_create(self, *, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8432,7 +8992,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8441,7 +9001,7 @@

    Methods

    return self.api_call("apps.manifest.create", params=kwargs)

    Create an app from an app manifest -https://api.slack.com/methods/apps.manifest.create

    +https://docs.slack.dev/reference/methods/apps.manifest.create

    def apps_manifest_delete(self, *, app_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8458,13 +9018,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs)

    Permanently deletes an app created through app manifests -https://api.slack.com/methods/apps.manifest.delete

    +https://docs.slack.dev/reference/methods/apps.manifest.delete

    def apps_manifest_export(self, *, app_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8481,13 +9041,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs)

    Export an app manifest from an existing app -https://api.slack.com/methods/apps.manifest.export

    +https://docs.slack.dev/reference/methods/apps.manifest.export

    def apps_manifest_update(self, *, app_id:Β str, manifest:Β strΒ |Β Dict[str,Β Any], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8505,7 +9065,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8515,7 +9075,7 @@

    Methods

    return self.api_call("apps.manifest.update", params=kwargs)

    Update an app from an app manifest -https://api.slack.com/methods/apps.manifest.update

    +https://docs.slack.dev/reference/methods/apps.manifest.update

    def apps_manifest_validate(self, *, manifest:Β strΒ |Β Dict[str,Β Any], app_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8533,7 +9093,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -8543,7 +9103,7 @@

    Methods

    return self.api_call("apps.manifest.validate", params=kwargs)
    +https://docs.slack.dev/reference/methods/apps.manifest.validate

    def apps_uninstall(self, *, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8561,16 +9121,16 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs)

    Uninstalls your app from a workspace. -https://api.slack.com/methods/apps.uninstall

    +https://docs.slack.dev/reference/methods/apps.uninstall

    -def assistant_threads_setStatus(self, *, channel_id:Β str, thread_ts:Β str, status:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +def assistant_threads_setStatus(self,
    *,
    channel_id:Β str,
    thread_ts:Β str,
    status:Β str,
    loading_messages:Β List[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8583,16 +9143,20 @@

    Methods

    channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs)
    + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs)
    - +
    def assistant_threads_setSuggestedPrompts(self,
    *,
    channel_id:Β str,
    thread_ts:Β str,
    title:Β strΒ |Β NoneΒ =Β None,
    prompts:Β List[Dict[str,Β str]],
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8611,16 +9175,16 @@

    Methods

    prompts: List[Dict[str, str]], **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: kwargs.update({"title": title}) return self.api_call("assistant.threads.setSuggestedPrompts", json=kwargs)
    - +

    Set suggested prompts for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts

    def assistant_threads_setTitle(self, *, channel_id:Β str, thread_ts:Β str, title:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8638,14 +9202,14 @@

    Methods

    title: str, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs)
    - +

    Set the title for the given assistant thread. +https://docs.slack.dev/reference/methods/assistant.threads.setTitle

    def auth_revoke(self, *, test:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8662,13 +9226,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/auth.revoke

    def auth_teams_list(self,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    include_icon:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8686,13 +9250,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs)

    List the workspaces a token can access. -https://api.slack.com/methods/auth.teams.list

    +https://docs.slack.dev/reference/methods/auth.teams.list

    def auth_test(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8707,12 +9271,12 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs)

    Checks authentication & identity. -https://api.slack.com/methods/auth.test

    +https://docs.slack.dev/reference/methods/auth.test

    def bookmarks_add(self,
    *,
    channel_id:Β str,
    title:Β str,
    type:Β str,
    emoji:Β strΒ |Β NoneΒ =Β None,
    entity_id:Β strΒ |Β NoneΒ =Β None,
    link:Β strΒ |Β NoneΒ =Β None,
    parent_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8735,7 +9299,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -8751,7 +9315,7 @@

    Methods

    return self.api_call("bookmarks.add", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/bookmarks.add

    def bookmarks_edit(self,
    *,
    bookmark_id:Β str,
    channel_id:Β str,
    emoji:Β strΒ |Β NoneΒ =Β None,
    link:Β strΒ |Β NoneΒ =Β None,
    title:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8772,7 +9336,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -8786,7 +9350,7 @@

    Methods

    return self.api_call("bookmarks.edit", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/bookmarks.edit

    def bookmarks_list(self, *, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8803,13 +9367,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs)

    List bookmark for the channel. -https://api.slack.com/methods/bookmarks.list

    +https://docs.slack.dev/reference/methods/bookmarks.list

    def bookmarks_remove(self, *, bookmark_id:Β str, channel_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8827,13 +9391,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs)

    Remove bookmark from the channel. -https://api.slack.com/methods/bookmarks.remove

    +https://docs.slack.dev/reference/methods/bookmarks.remove

    def bots_info(self, *, bot:Β strΒ |Β NoneΒ =Β None, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8851,13 +9415,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs)

    Gets information about a bot user. -https://api.slack.com/methods/bots.info

    +https://docs.slack.dev/reference/methods/bots.info

    def calls_add(self,
    *,
    external_unique_id:Β str,
    join_url:Β str,
    created_by:Β strΒ |Β NoneΒ =Β None,
    date_start:Β intΒ |Β NoneΒ =Β None,
    desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
    external_display_id:Β strΒ |Β NoneΒ =Β None,
    title:Β strΒ |Β NoneΒ =Β None,
    users:Β strΒ |Β Sequence[Dict[str,Β str]]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -8881,7 +9445,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -8901,7 +9465,7 @@

    Methods

    return self.api_call("calls.add", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/calls.add

    def calls_end(self, *, id:Β str, duration:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8919,13 +9483,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/calls.end

    def calls_info(self, *, id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8942,13 +9506,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs)

    Returns information about a Call. -https://api.slack.com/methods/calls.info

    +https://docs.slack.dev/reference/methods/calls.info

    def calls_participants_add(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8966,14 +9530,14 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.add", http_verb="POST", params=kwargs)

    Registers new participants added to a Call. -https://api.slack.com/methods/calls.participants.add

    +https://docs.slack.dev/reference/methods/calls.participants.add

    def calls_participants_remove(self, *, id:Β str, users:Β strΒ |Β Sequence[Dict[str,Β str]], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -8991,14 +9555,14 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) return self.api_call("calls.participants.remove", http_verb="POST", params=kwargs)

    Registers participants removed from a Call. -https://api.slack.com/methods/calls.participants.remove

    +https://docs.slack.dev/reference/methods/calls.participants.remove

    def calls_update(self,
    *,
    id:Β str,
    desktop_app_join_url:Β strΒ |Β NoneΒ =Β None,
    join_url:Β strΒ |Β NoneΒ =Β None,
    title:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9018,7 +9582,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -9031,7 +9595,7 @@

    Methods

    return self.api_call("calls.update", http_verb="POST", params=kwargs)

    Updates information about a Call. -https://api.slack.com/methods/calls.update

    +https://docs.slack.dev/reference/methods/calls.update

    def canvases_access_delete(self,
    *,
    canvas_id:Β str,
    channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9050,7 +9614,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -9066,7 +9630,7 @@

    Methods

    return self.api_call("canvases.access.delete", params=kwargs)

    Create a Channel Canvas for a channel -https://api.slack.com/methods/canvases.access.delete

    +https://docs.slack.dev/reference/methods/canvases.access.delete

    def canvases_access_set(self,
    *,
    canvas_id:Β str,
    access_level:Β str,
    channel_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9086,7 +9650,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -9103,7 +9667,7 @@

    Methods

    return self.api_call("canvases.access.set", params=kwargs)

    Sets the access level to a canvas for specified entities -https://api.slack.com/methods/canvases.access.set

    +https://docs.slack.dev/reference/methods/canvases.access.set

    def canvases_create(self, *, title:Β strΒ |Β NoneΒ =Β None, document_content:Β Dict[str,Β str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -9121,13 +9685,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs)
    +https://docs.slack.dev/reference/methods/canvases.create

    def canvases_delete(self, *, canvas_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -9144,13 +9708,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/canvases.delete

    def canvases_edit(self, *, canvas_id:Β str, changes:Β Sequence[Dict[str,Β Any]], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -9168,13 +9732,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs)
    +https://docs.slack.dev/reference/methods/canvases.edit

    def canvases_sections_lookup(self, *, canvas_id:Β str, criteria:Β Dict[str,Β Any], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -9192,13 +9756,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs)

    Find sections matching the provided criteria -https://api.slack.com/methods/canvases.sections.lookup

    +https://docs.slack.dev/reference/methods/canvases.sections.lookup

    def channels_archive(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -9515,6 +10079,38 @@

    Methods

    Unarchives a channel.

    +
    +def chat_appendStream(self, *, channel:Β str, ts:Β str, markdown_text:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def chat_appendStream(
    +    self,
    +    *,
    +    channel: str,
    +    ts: str,
    +    markdown_text: str,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Appends text to an existing streaming conversation.
    +    https://docs.slack.dev/reference/methods/chat.appendStream
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "ts": ts,
    +            "markdown_text": markdown_text,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("chat.appendStream", json=kwargs)
    +
    +

    Appends text to an existing streaming conversation. +https://docs.slack.dev/reference/methods/chat.appendStream

    +
    def chat_delete(self, *, channel:Β str, ts:Β str, as_user:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9532,13 +10128,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/chat.delete

    def chat_deleteScheduledMessage(self,
    *,
    channel:Β str,
    scheduled_message_id:Β str,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9557,7 +10153,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -9569,7 +10165,7 @@

    Methods

    return self.api_call("chat.deleteScheduledMessage", params=kwargs)
    +https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage

    def chat_meMessage(self, *, channel:Β str, text:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -9611,16 +10207,16 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs)

    Share a me message into a channel. -https://api.slack.com/methods/chat.meMessage

    +https://docs.slack.dev/reference/methods/chat.meMessage

    -def chat_postEphemeral(self,
    *,
    channel:Β str,
    user:Β str,
    text:Β strΒ |Β NoneΒ =Β None,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    icon_emoji:Β strΒ |Β NoneΒ =Β None,
    icon_url:Β strΒ |Β NoneΒ =Β None,
    link_names:Β boolΒ |Β NoneΒ =Β None,
    username:Β strΒ |Β NoneΒ =Β None,
    parse:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +def chat_postEphemeral(self,
    *,
    channel:Β str,
    user:Β str,
    text:Β strΒ |Β NoneΒ =Β None,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    icon_emoji:Β strΒ |Β NoneΒ =Β None,
    icon_url:Β strΒ |Β NoneΒ =Β None,
    link_names:Β boolΒ |Β NoneΒ =Β None,
    username:Β strΒ |Β NoneΒ =Β None,
    parse:Β strΒ |Β NoneΒ =Β None,
    markdown_text:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9642,10 +10238,11 @@

    Methods

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -9661,19 +10258,20 @@

    Methods

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)

    Sends an ephemeral message to a user in a channel. -https://api.slack.com/methods/chat.postEphemeral

    +https://docs.slack.dev/reference/methods/chat.postEphemeral

    -def chat_postMessage(self,
    *,
    channel:Β str,
    text:Β strΒ |Β NoneΒ =Β None,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
    unfurl_links:Β boolΒ |Β NoneΒ =Β None,
    unfurl_media:Β boolΒ |Β NoneΒ =Β None,
    container_id:Β strΒ |Β NoneΒ =Β None,
    icon_emoji:Β strΒ |Β NoneΒ =Β None,
    icon_url:Β strΒ |Β NoneΒ =Β None,
    mrkdwn:Β boolΒ |Β NoneΒ =Β None,
    link_names:Β boolΒ |Β NoneΒ =Β None,
    username:Β strΒ |Β NoneΒ =Β None,
    parse:Β strΒ |Β NoneΒ =Β None,
    metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +def chat_postMessage(self,
    *,
    channel:Β str,
    text:Β strΒ |Β NoneΒ =Β None,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
    unfurl_links:Β boolΒ |Β NoneΒ =Β None,
    unfurl_media:Β boolΒ |Β NoneΒ =Β None,
    container_id:Β strΒ |Β NoneΒ =Β None,
    icon_emoji:Β strΒ |Β NoneΒ =Β None,
    icon_url:Β strΒ |Β NoneΒ =Β None,
    mrkdwn:Β boolΒ |Β NoneΒ =Β None,
    link_names:Β boolΒ |Β NoneΒ =Β None,
    username:Β strΒ |Β NoneΒ =Β None,
    parse:Β strΒ |Β NoneΒ =Β None,
    metadata:Β DictΒ |Β MetadataΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
    markdown_text:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9699,11 +10297,12 @@

    Methods

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -9724,19 +10323,20 @@

    Methods

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)

    Sends a message to a channel. -https://api.slack.com/methods/chat.postMessage

    +https://docs.slack.dev/reference/methods/chat.postMessage

    -def chat_scheduleMessage(self,
    *,
    channel:Β str,
    post_at:Β strΒ |Β int,
    text:Β str,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    parse:Β strΒ |Β NoneΒ =Β None,
    reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
    unfurl_links:Β boolΒ |Β NoneΒ =Β None,
    unfurl_media:Β boolΒ |Β NoneΒ =Β None,
    link_names:Β boolΒ |Β NoneΒ =Β None,
    metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +def chat_scheduleMessage(self,
    *,
    channel:Β str,
    post_at:Β strΒ |Β int,
    text:Β strΒ |Β NoneΒ =Β None,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    parse:Β strΒ |Β NoneΒ =Β None,
    reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
    unfurl_links:Β boolΒ |Β NoneΒ =Β None,
    unfurl_media:Β boolΒ |Β NoneΒ =Β None,
    link_names:Β boolΒ |Β NoneΒ =Β None,
    metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
    markdown_text:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9748,7 +10348,7 @@

    Methods

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9759,10 +10359,11 @@

    Methods

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -9779,16 +10380,17 @@

    Methods

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
    +https://docs.slack.dev/reference/methods/chat.scheduleMessage

    def chat_scheduledMessages_list(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    latest:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    oldest:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9810,7 +10412,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list """ kwargs.update( { @@ -9825,10 +10427,83 @@

    Methods

    return self.api_call("chat.scheduledMessages.list", params=kwargs)
    +https://docs.slack.dev/reference/methods/chat.scheduledMessages.list

    + +
    +def chat_startStream(self,
    *,
    channel:Β str,
    thread_ts:Β str,
    markdown_text:Β strΒ |Β NoneΒ =Β None,
    recipient_team_id:Β strΒ |Β NoneΒ =Β None,
    recipient_user_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def chat_startStream(
    +    self,
    +    *,
    +    channel: str,
    +    thread_ts: str,
    +    markdown_text: Optional[str] = None,
    +    recipient_team_id: Optional[str] = None,
    +    recipient_user_id: Optional[str] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Starts a new streaming conversation.
    +    https://docs.slack.dev/reference/methods/chat.startStream
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "thread_ts": thread_ts,
    +            "markdown_text": markdown_text,
    +            "recipient_team_id": recipient_team_id,
    +            "recipient_user_id": recipient_user_id,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("chat.startStream", json=kwargs)
    +
    +

    Starts a new streaming conversation. +https://docs.slack.dev/reference/methods/chat.startStream

    +
    +
    +def chat_stopStream(self,
    *,
    channel:Β str,
    ts:Β str,
    markdown_text:Β strΒ |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def chat_stopStream(
    +    self,
    +    *,
    +    channel: str,
    +    ts: str,
    +    markdown_text: Optional[str] = None,
    +    blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
    +    metadata: Optional[Union[Dict, Metadata]] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Stops a streaming conversation.
    +    https://docs.slack.dev/reference/methods/chat.stopStream
    +    """
    +    kwargs.update(
    +        {
    +            "channel": channel,
    +            "ts": ts,
    +            "markdown_text": markdown_text,
    +            "blocks": blocks,
    +            "metadata": metadata,
    +        }
    +    )
    +    _parse_web_class_objects(kwargs)
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("chat.stopStream", json=kwargs)
    +
    +
    -def chat_unfurl(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    ts:Β strΒ |Β NoneΒ =Β None,
    source:Β strΒ |Β NoneΒ =Β None,
    unfurl_id:Β strΒ |Β NoneΒ =Β None,
    unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
    user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    user_auth_message:Β strΒ |Β NoneΒ =Β None,
    user_auth_required:Β boolΒ |Β NoneΒ =Β None,
    user_auth_url:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +def chat_unfurl(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    ts:Β strΒ |Β NoneΒ =Β None,
    source:Β strΒ |Β NoneΒ =Β None,
    unfurl_id:Β strΒ |Β NoneΒ =Β None,
    unfurls:Β Dict[str,Β Dict]Β |Β NoneΒ =Β None,
    metadata:Β DictΒ |Β EventAndEntityMetadataΒ |Β NoneΒ =Β None,
    user_auth_blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    user_auth_message:Β strΒ |Β NoneΒ =Β None,
    user_auth_required:Β boolΒ |Β NoneΒ =Β None,
    user_auth_url:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9843,6 +10518,7 @@

    Methods

    source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -9850,7 +10526,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -9859,6 +10535,7 @@

    Methods

    "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -9871,10 +10548,10 @@

    Methods

    return self.api_call("chat.unfurl", json=kwargs)

    Provide custom unfurl behavior for user-posted URLs. -https://api.slack.com/methods/chat.unfurl

    +https://docs.slack.dev/reference/methods/chat.unfurl

    -def chat_update(self,
    *,
    channel:Β str,
    ts:Β str,
    text:Β strΒ |Β NoneΒ =Β None,
    attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    link_names:Β boolΒ |Β NoneΒ =Β None,
    parse:Β strΒ |Β NoneΒ =Β None,
    reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
    metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +def chat_update(self,
    *,
    channel:Β str,
    ts:Β str,
    text:Β strΒ |Β NoneΒ =Β None,
    attachments:Β strΒ |Β Sequence[DictΒ |Β Attachment]Β |Β NoneΒ =Β None,
    blocks:Β strΒ |Β Sequence[DictΒ |Β Block]Β |Β NoneΒ =Β None,
    as_user:Β boolΒ |Β NoneΒ =Β None,
    file_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    link_names:Β boolΒ |Β NoneΒ =Β None,
    parse:Β strΒ |Β NoneΒ =Β None,
    reply_broadcast:Β boolΒ |Β NoneΒ =Β None,
    metadata:Β DictΒ |Β MetadataΒ |Β NoneΒ =Β None,
    markdown_text:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9895,10 +10572,11 @@

    Methods

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -9912,6 +10590,7 @@

    Methods

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -9920,12 +10599,12 @@

    Methods

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)

    Updates a message in a channel. -https://api.slack.com/methods/chat.update

    +https://docs.slack.dev/reference/methods/chat.update

    def conversations_acceptSharedInvite(self,
    *,
    channel_name:Β str,
    channel_id:Β strΒ |Β NoneΒ =Β None,
    invite_id:Β strΒ |Β NoneΒ =Β None,
    free_trial_accepted:Β boolΒ |Β NoneΒ =Β None,
    is_private:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -9947,7 +10626,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -9964,7 +10643,7 @@

    Methods

    return self.api_call("conversations.acceptSharedInvite", http_verb="POST", params=kwargs)

    Accepts an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.acceptSharedInvite

    +https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite

    def conversations_approveSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -9982,13 +10661,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs)

    Approves an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.approveSharedInvite

    +https://docs.slack.dev/reference/methods/conversations.approveSharedInvite

    def conversations_archive(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10005,13 +10684,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.archive

    def conversations_canvases_create(self, *, channel_id:Β str, document_content:Β Dict[str,Β str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10029,13 +10708,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.canvases.create

    def conversations_close(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10052,13 +10731,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs)

    Closes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.close

    +https://docs.slack.dev/reference/methods/conversations.close

    def conversations_create(self,
    *,
    name:Β str,
    is_private:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10077,13 +10756,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs)

    Initiates a public or private channel-based conversation -https://api.slack.com/methods/conversations.create

    +https://docs.slack.dev/reference/methods/conversations.create

    def conversations_declineSharedInvite(self, *, invite_id:Β str, target_team:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10101,13 +10780,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs)

    Declines a Slack Connect channel invite. -https://api.slack.com/methods/conversations.declineSharedInvite

    +https://docs.slack.dev/reference/methods/conversations.declineSharedInvite

    def conversations_externalInvitePermissions_set(self, *, action:Β str, channel:Β str, target_team:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10121,7 +10800,7 @@

    Methods

    self, *, action: str, channel: str, target_team: str, **kwargs ) -> Union[Future, SlackResponse]: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -10133,7 +10812,7 @@

    Methods

    return self.api_call("conversations.externalInvitePermissions.set", params=kwargs)

    Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. -https://api.slack.com/methods/conversations.externalInvitePermissions.set

    +https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set

    def conversations_history(self,
    *,
    channel:Β str,
    cursor:Β strΒ |Β NoneΒ =Β None,
    inclusive:Β boolΒ |Β NoneΒ =Β None,
    include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
    latest:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    oldest:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10156,7 +10835,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -10172,7 +10851,7 @@

    Methods

    return self.api_call("conversations.history", http_verb="GET", params=kwargs)

    Fetches a conversation's history of messages and events. -https://api.slack.com/methods/conversations.history

    +https://docs.slack.dev/reference/methods/conversations.history

    def conversations_info(self,
    *,
    channel:Β str,
    include_locale:Β boolΒ |Β NoneΒ =Β None,
    include_num_members:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10191,7 +10870,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -10203,7 +10882,7 @@

    Methods

    return self.api_call("conversations.info", http_verb="GET", params=kwargs)

    Retrieve information about a conversation. -https://api.slack.com/methods/conversations.info

    +https://docs.slack.dev/reference/methods/conversations.info

    def conversations_invite(self,
    *,
    channel:Β str,
    users:Β strΒ |Β Sequence[str],
    force:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10222,7 +10901,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -10237,7 +10916,7 @@

    Methods

    return self.api_call("conversations.invite", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.invite

    def conversations_inviteShared(self,
    *,
    channel:Β str,
    emails:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    user_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10256,7 +10935,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -10272,7 +10951,7 @@

    Methods

    return self.api_call("conversations.inviteShared", http_verb="GET", params=kwargs)

    Sends an invitation to a Slack Connect channel. -https://api.slack.com/methods/conversations.inviteShared

    +https://docs.slack.dev/reference/methods/conversations.inviteShared

    def conversations_join(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10289,13 +10968,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs)

    Joins an existing conversation. -https://api.slack.com/methods/conversations.join

    +https://docs.slack.dev/reference/methods/conversations.join

    def conversations_kick(self, *, channel:Β str, user:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10313,13 +10992,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs)

    Removes a user from a conversation. -https://api.slack.com/methods/conversations.kick

    +https://docs.slack.dev/reference/methods/conversations.kick

    def conversations_leave(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10336,13 +11015,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.leave

    def conversations_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    exclude_archived:Β boolΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10363,7 +11042,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -10380,7 +11059,7 @@

    Methods

    return self.api_call("conversations.list", http_verb="GET", params=kwargs)

    Lists all channels in a Slack team. -https://api.slack.com/methods/conversations.list

    +https://docs.slack.dev/reference/methods/conversations.list

    def conversations_listConnectInvites(self,
    *,
    count:Β intΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10400,14 +11079,14 @@

    Methods

    ) -> Union[Future, SlackResponse]: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs)

    List shared channel invites that have been generated or received but have not yet been approved by all parties. -https://api.slack.com/methods/conversations.listConnectInvites

    +https://docs.slack.dev/reference/methods/conversations.listConnectInvites

    def conversations_mark(self, *, channel:Β str, ts:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10425,13 +11104,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs)

    Sets the read cursor in a channel. -https://api.slack.com/methods/conversations.mark

    +https://docs.slack.dev/reference/methods/conversations.mark

    def conversations_members(self, *, channel:Β str, cursor:Β strΒ |Β NoneΒ =Β None, limit:Β intΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10450,13 +11129,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs)

    Retrieve members of a conversation. -https://api.slack.com/methods/conversations.members

    +https://docs.slack.dev/reference/methods/conversations.members

    def conversations_open(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    return_im:Β boolΒ |Β NoneΒ =Β None,
    users:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10475,7 +11154,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -10487,7 +11166,7 @@

    Methods

    return self.api_call("conversations.open", params=kwargs)

    Opens or resumes a direct message or multi-person direct message. -https://api.slack.com/methods/conversations.open

    +https://docs.slack.dev/reference/methods/conversations.open

    def conversations_rename(self, *, channel:Β str, name:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10505,13 +11184,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.rename

    def conversations_replies(self,
    *,
    channel:Β str,
    ts:Β str,
    cursor:Β strΒ |Β NoneΒ =Β None,
    inclusive:Β boolΒ |Β NoneΒ =Β None,
    include_all_metadata:Β boolΒ |Β NoneΒ =Β None,
    latest:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    oldest:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10535,7 +11214,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -10552,7 +11231,7 @@

    Methods

    return self.api_call("conversations.replies", http_verb="GET", params=kwargs)

    Retrieve a thread of messages posted to a conversation -https://api.slack.com/methods/conversations.replies

    +https://docs.slack.dev/reference/methods/conversations.replies

    def conversations_requestSharedInvite_approve(self,
    *,
    invite_id:Β str,
    channel_id:Β strΒ |Β NoneΒ =Β None,
    is_external_limited:Β strΒ |Β NoneΒ =Β None,
    message:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10572,7 +11251,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -10586,7 +11265,7 @@

    Methods

    return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)

    Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. -https://api.slack.com/methods/conversations.requestSharedInvite.approve

    +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve

    def conversations_requestSharedInvite_deny(self, *, invite_id:Β str, message:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10604,13 +11283,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)

    Deny a request to invite an external user to a channel. -https://api.slack.com/methods/conversations.requestSharedInvite.deny

    +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny

    def conversations_requestSharedInvite_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    include_approved:Β boolΒ |Β NoneΒ =Β None,
    include_denied:Β boolΒ |Β NoneΒ =Β None,
    include_expired:Β boolΒ |Β NoneΒ =Β None,
    invite_ids:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    user_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10633,7 +11312,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -10653,7 +11332,7 @@

    Methods

    return self.api_call("conversations.requestSharedInvite.list", params=kwargs)

    Lists requests to add external users to channels with ability to filter. -https://api.slack.com/methods/conversations.requestSharedInvite.list

    +https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list

    def conversations_setPurpose(self, *, channel:Β str, purpose:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10671,13 +11350,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs)

    Sets the purpose for a conversation. -https://api.slack.com/methods/conversations.setPurpose

    +https://docs.slack.dev/reference/methods/conversations.setPurpose

    def conversations_setTopic(self, *, channel:Β str, topic:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10695,13 +11374,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs)

    Sets the topic for a conversation. -https://api.slack.com/methods/conversations.setTopic

    +https://docs.slack.dev/reference/methods/conversations.setTopic

    def conversations_unarchive(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10718,13 +11397,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs)
    +https://docs.slack.dev/reference/methods/conversations.unarchive

    def dialog_open(self, *, dialog:Β Dict[str,Β Any], trigger_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10742,7 +11421,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -10750,7 +11429,7 @@

    Methods

    return self.api_call("dialog.open", json=kwargs)

    Open a dialog with a user. -https://api.slack.com/methods/dialog.open

    +https://docs.slack.dev/reference/methods/dialog.open

    def dnd_endDnd(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10765,12 +11444,12 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs)

    Ends the current user's Do Not Disturb session immediately. -https://api.slack.com/methods/dnd.endDnd

    +https://docs.slack.dev/reference/methods/dnd.endDnd

    def dnd_endSnooze(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10785,12 +11464,12 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs)

    Ends the current user's snooze mode immediately. -https://api.slack.com/methods/dnd.endSnooze

    +https://docs.slack.dev/reference/methods/dnd.endSnooze

    def dnd_info(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10808,13 +11487,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs)

    Retrieves a user's current Do Not Disturb status. -https://api.slack.com/methods/dnd.info

    +https://docs.slack.dev/reference/methods/dnd.info

    def dnd_setSnooze(self, *, num_minutes:Β strΒ |Β int, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10831,13 +11510,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs)

    Turns on Do Not Disturb mode for the current user, or changes its duration. -https://api.slack.com/methods/dnd.setSnooze

    +https://docs.slack.dev/reference/methods/dnd.setSnooze

    def dnd_teamInfo(self, users:Β strΒ |Β Sequence[str], team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10854,7 +11533,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -10864,7 +11543,7 @@

    Methods

    return self.api_call("dnd.teamInfo", http_verb="GET", params=kwargs)

    Retrieves the Do Not Disturb status for users on a team. -https://api.slack.com/methods/dnd.teamInfo

    +https://docs.slack.dev/reference/methods/dnd.teamInfo

    def emoji_list(self, include_categories:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10880,13 +11559,48 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs)

    Lists custom emoji for a team. -https://api.slack.com/methods/emoji.list

    +https://docs.slack.dev/reference/methods/emoji.list

    + +
    +def entity_presentDetails(self,
    trigger_id:Β str,
    metadata:Β DictΒ |Β EntityMetadataΒ |Β NoneΒ =Β None,
    user_auth_required:Β boolΒ |Β NoneΒ =Β None,
    user_auth_url:Β strΒ |Β NoneΒ =Β None,
    error:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def entity_presentDetails(
    +    self,
    +    trigger_id: str,
    +    metadata: Optional[Union[Dict, EntityMetadata]] = None,
    +    user_auth_required: Optional[bool] = None,
    +    user_auth_url: Optional[str] = None,
    +    error: Optional[Dict[str, Any]] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Provides entity details for the flexpane.
    +    https://docs.slack.dev/reference/methods/entity.presentDetails/
    +    """
    +    kwargs.update({"trigger_id": trigger_id})
    +    if metadata is not None:
    +        kwargs.update({"metadata": metadata})
    +    if user_auth_required is not None:
    +        kwargs.update({"user_auth_required": user_auth_required})
    +    if user_auth_url is not None:
    +        kwargs.update({"user_auth_url": user_auth_url})
    +    if error is not None:
    +        kwargs.update({"error": error})
    +    _parse_web_class_objects(kwargs)
    +    return self.api_call("entity.presentDetails", json=kwargs)
    +
    +

    Provides entity details for the flexpane. +https://docs.slack.dev/reference/methods/entity.presentDetails/

    def files_comments_delete(self, *, file:Β str, id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10904,13 +11618,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs)

    Deletes an existing comment on a file. -https://api.slack.com/methods/files.comments.delete

    +https://docs.slack.dev/reference/methods/files.comments.delete

    def files_completeUploadExternal(self,
    *,
    files:Β List[Dict[str,Β str]],
    channel_id:Β strΒ |Β NoneΒ =Β None,
    channels:Β List[str]Β |Β NoneΒ =Β None,
    initial_comment:Β strΒ |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10931,7 +11645,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -10947,7 +11661,7 @@

    Methods

    return self.api_call("files.completeUploadExternal", params=kwargs)

    Finishes an upload started with files.getUploadURLExternal. -https://api.slack.com/methods/files.completeUploadExternal

    +https://docs.slack.dev/reference/methods/files.completeUploadExternal

    def files_delete(self, *, file:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -10964,13 +11678,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/files.delete

    def files_getUploadURLExternal(self,
    *,
    filename:Β str,
    length:Β int,
    alt_txt:Β strΒ |Β NoneΒ =Β None,
    snippet_type:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -10990,7 +11704,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -11003,7 +11717,7 @@

    Methods

    return self.api_call("files.getUploadURLExternal", params=kwargs)

    Gets a URL for an edge external upload. -https://api.slack.com/methods/files.getUploadURLExternal

    +https://docs.slack.dev/reference/methods/files.getUploadURLExternal

    def files_info(self,
    *,
    file:Β str,
    count:Β intΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    page:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -11024,7 +11738,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -11038,7 +11752,7 @@

    Methods

    return self.api_call("files.info", http_verb="GET", params=kwargs)

    Gets information about a team file. -https://api.slack.com/methods/files.info

    +https://docs.slack.dev/reference/methods/files.info

    def files_list(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    count:Β intΒ |Β NoneΒ =Β None,
    page:Β intΒ |Β NoneΒ =Β None,
    show_files_hidden_by_limit:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    ts_from:Β strΒ |Β NoneΒ =Β None,
    ts_to:Β strΒ |Β NoneΒ =Β None,
    types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    user:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -11063,7 +11777,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -11084,7 +11798,7 @@

    Methods

    return self.api_call("files.list", http_verb="GET", params=kwargs)

    Lists & filters team files. -https://api.slack.com/methods/files.list

    +https://docs.slack.dev/reference/methods/files.list

    def files_remote_add(self,
    *,
    external_id:Β str,
    external_url:Β str,
    title:Β str,
    filetype:Β strΒ |Β NoneΒ =Β None,
    indexable_file_contents:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
    preview_image:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -11106,7 +11820,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -11133,7 +11847,7 @@

    Methods

    )

    Adds a file from a remote service. -https://api.slack.com/methods/files.remote.add

    +https://docs.slack.dev/reference/methods/files.remote.add

    def files_remote_info(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -11151,13 +11865,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs)

    Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.info

    +https://docs.slack.dev/reference/methods/files.remote.info

    def files_remote_list(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    ts_from:Β strΒ |Β NoneΒ =Β None,
    ts_to:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -11178,7 +11892,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -11192,7 +11906,7 @@

    Methods

    return self.api_call("files.remote.list", http_verb="GET", params=kwargs)

    Retrieve information about a remote file added to Slack. -https://api.slack.com/methods/files.remote.list

    +https://docs.slack.dev/reference/methods/files.remote.list

    def files_remote_remove(self, *, external_id:Β strΒ |Β NoneΒ =Β None, file:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -11210,13 +11924,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs)
    +https://docs.slack.dev/reference/methods/files.remote.remove

    def files_remote_share(self,
    *,
    channels:Β strΒ |Β Sequence[str],
    external_id:Β strΒ |Β NoneΒ =Β None,
    file:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -11235,7 +11949,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -11247,7 +11961,7 @@

    Methods

    return self.api_call("files.remote.share", http_verb="GET", params=kwargs)

    Share a remote file into a channel. -https://api.slack.com/methods/files.remote.share

    +https://docs.slack.dev/reference/methods/files.remote.share

    def files_remote_update(self,
    *,
    external_id:Β strΒ |Β NoneΒ =Β None,
    external_url:Β strΒ |Β NoneΒ =Β None,
    file:Β strΒ |Β NoneΒ =Β None,
    title:Β strΒ |Β NoneΒ =Β None,
    filetype:Β strΒ |Β NoneΒ =Β None,
    indexable_file_contents:Β strΒ |Β NoneΒ =Β None,
    preview_image:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -11270,7 +11984,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -11298,7 +12012,7 @@

    Methods

    )

    Updates an existing remote file. -https://api.slack.com/methods/files.remote.update

    +https://docs.slack.dev/reference/methods/files.remote.update

    def files_revokePublicURL(self, *, file:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -11315,13 +12029,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs)

    Revokes public/external sharing access for a file -https://api.slack.com/methods/files.revokePublicURL

    +https://docs.slack.dev/reference/methods/files.revokePublicURL

    def files_sharedPublicURL(self, *, file:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -11338,13 +12052,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs)

    Enables a file for public/external sharing. -https://api.slack.com/methods/files.sharedPublicURL

    +https://docs.slack.dev/reference/methods/files.sharedPublicURL

    def files_upload(self,
    *,
    file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β NoneΒ =Β None,
    content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
    filename:Β strΒ |Β NoneΒ =Β None,
    filetype:Β strΒ |Β NoneΒ =Β None,
    initial_comment:Β strΒ |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    title:Β strΒ |Β NoneΒ =Β None,
    channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -11368,7 +12082,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -11401,7 +12115,7 @@

    Methods

    return self.api_call("files.upload", data=kwargs)

    Uploads or creates a file. -https://api.slack.com/methods/files.upload

    +https://docs.slack.dev/reference/methods/files.upload

    def files_upload_v2(self,
    *,
    filename:Β strΒ |Β NoneΒ =Β None,
    file:Β strΒ |Β bytesΒ |Β io.IOBaseΒ |Β os.PathLikeΒ |Β NoneΒ =Β None,
    content:Β strΒ |Β bytesΒ |Β NoneΒ =Β None,
    title:Β strΒ |Β NoneΒ =Β None,
    alt_txt:Β strΒ |Β NoneΒ =Β None,
    snippet_type:Β strΒ |Β NoneΒ =Β None,
    file_uploads:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
    channel:Β strΒ |Β NoneΒ =Β None,
    channels:Β List[str]Β |Β NoneΒ =Β None,
    initial_comment:Β strΒ |Β NoneΒ =Β None,
    thread_ts:Β strΒ |Β NoneΒ =Β None,
    request_file_info:Β boolΒ =Β True,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -11432,12 +12146,12 @@

    Methods

    ) -> Union[Future, SlackResponse]: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -11516,14 +12230,14 @@

    Methods

    This wrapper method provides an easy way to upload files using the following endpoints:

    @@ -11543,13 +12257,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs)

    Signal the failure to execute a function -https://api.slack.com/methods/functions.completeError

    +https://docs.slack.dev/reference/methods/functions.completeError

    def functions_completeSuccess(self, *, function_execution_id:Β str, outputs:Β Dict[str,Β Any], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -11567,13 +12281,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs)

    Signal the successful completion of a function -https://api.slack.com/methods/functions.completeSuccess

    +https://docs.slack.dev/reference/methods/functions.completeSuccess

    def groups_archive(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12049,7 +12763,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -12059,7 +12773,7 @@

    Methods

    return self.api_call("migration.exchange", http_verb="GET", params=kwargs)

    For Enterprise Grid workspaces, map local user IDs to global user IDs -https://api.slack.com/methods/migration.exchange

    +https://docs.slack.dev/reference/methods/migration.exchange

    def mpim_close(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12206,7 +12920,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12218,7 +12932,7 @@

    Methods

    )

    Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.access

    +https://docs.slack.dev/reference/methods/oauth.access

    def oauth_v2_access(self,
    *,
    client_id:Β str,
    client_secret:Β str,
    code:Β strΒ |Β NoneΒ =Β None,
    redirect_uri:Β strΒ |Β NoneΒ =Β None,
    grant_type:Β strΒ |Β NoneΒ =Β None,
    refresh_token:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12244,7 +12958,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12261,7 +12975,7 @@

    Methods

    )

    Exchanges a temporary OAuth verifier code for an access token. -https://api.slack.com/methods/oauth.v2.access

    +https://docs.slack.dev/reference/methods/oauth.v2.access

    def oauth_v2_exchange(self, *, token:Β str, client_id:Β str, client_secret:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12280,13 +12994,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs)

    Exchanges a legacy access token for a new expiring access token and refresh token -https://api.slack.com/methods/oauth.v2.exchange

    +https://docs.slack.dev/reference/methods/oauth.v2.exchange

    def openid_connect_token(self,
    client_id:Β str,
    client_secret:Β str,
    code:Β strΒ |Β NoneΒ =Β None,
    redirect_uri:Β strΒ |Β NoneΒ =Β None,
    grant_type:Β strΒ |Β NoneΒ =Β None,
    refresh_token:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12307,7 +13021,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -12324,7 +13038,7 @@

    Methods

    )

    Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. -https://api.slack.com/methods/openid.connect.token

    +https://docs.slack.dev/reference/methods/openid.connect.token

    def openid_connect_userInfo(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12339,12 +13053,12 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs)

    Get the identity of a user who has authorized Sign in with Slack. -https://api.slack.com/methods/openid.connect.userInfo

    +https://docs.slack.dev/reference/methods/openid.connect.userInfo

    def pins_add(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12362,13 +13076,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs)

    Pins an item to a channel. -https://api.slack.com/methods/pins.add

    +https://docs.slack.dev/reference/methods/pins.add

    def pins_list(self, *, channel:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12385,13 +13099,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs)

    Lists items pinned to a channel. -https://api.slack.com/methods/pins.list

    +https://docs.slack.dev/reference/methods/pins.list

    def pins_remove(self, *, channel:Β str, timestamp:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12409,13 +13123,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs)

    Un-pins an item from a channel. -https://api.slack.com/methods/pins.remove

    +https://docs.slack.dev/reference/methods/pins.remove

    def reactions_add(self, *, channel:Β str, name:Β str, timestamp:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12434,13 +13148,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs)

    Adds a reaction to an item. -https://api.slack.com/methods/reactions.add

    +https://docs.slack.dev/reference/methods/reactions.add

    def reactions_get(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    file:Β strΒ |Β NoneΒ =Β None,
    file_comment:Β strΒ |Β NoneΒ =Β None,
    full:Β boolΒ |Β NoneΒ =Β None,
    timestamp:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12461,7 +13175,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -12475,7 +13189,7 @@

    Methods

    return self.api_call("reactions.get", http_verb="GET", params=kwargs)

    Gets reactions for an item. -https://api.slack.com/methods/reactions.get

    +https://docs.slack.dev/reference/methods/reactions.get

    def reactions_list(self,
    *,
    count:Β intΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    full:Β boolΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    page:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    user:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12498,7 +13212,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -12514,7 +13228,7 @@

    Methods

    return self.api_call("reactions.list", http_verb="GET", params=kwargs)

    Lists reactions made by a user. -https://api.slack.com/methods/reactions.list

    +https://docs.slack.dev/reference/methods/reactions.list

    def reactions_remove(self,
    *,
    name:Β str,
    channel:Β strΒ |Β NoneΒ =Β None,
    file:Β strΒ |Β NoneΒ =Β None,
    file_comment:Β strΒ |Β NoneΒ =Β None,
    timestamp:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12535,7 +13249,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -12549,7 +13263,7 @@

    Methods

    return self.api_call("reactions.remove", params=kwargs)

    Removes a reaction from an item. -https://api.slack.com/methods/reactions.remove

    +https://docs.slack.dev/reference/methods/reactions.remove

    def reminders_add(self,
    *,
    text:Β str,
    time:Β str,
    team_id:Β strΒ |Β NoneΒ =Β None,
    user:Β strΒ |Β NoneΒ =Β None,
    recurrence:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12570,7 +13284,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -12584,7 +13298,7 @@

    Methods

    return self.api_call("reminders.add", params=kwargs)
    +https://docs.slack.dev/reference/methods/reminders.add

    def reminders_complete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12602,13 +13316,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs)
    +https://docs.slack.dev/reference/methods/reminders.complete

    def reminders_delete(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12626,13 +13340,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs)
    +https://docs.slack.dev/reference/methods/reminders.delete

    def reminders_info(self, *, reminder:Β str, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12650,13 +13364,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs)

    Gets information about a reminder. -https://api.slack.com/methods/reminders.info

    +https://docs.slack.dev/reference/methods/reminders.info

    def reminders_list(self, *, team_id:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -12673,13 +13387,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs)

    Lists all reminders created by or for a given user. -https://api.slack.com/methods/reminders.list

    +https://docs.slack.dev/reference/methods/reminders.list

    def rtm_connect(self,
    *,
    batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
    presence_sub:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12697,13 +13411,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs)

    Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.connect

    +https://docs.slack.dev/reference/methods/rtm.connect

    def rtm_start(self,
    *,
    batch_presence_aware:Β boolΒ |Β NoneΒ =Β None,
    include_locale:Β boolΒ |Β NoneΒ =Β None,
    mpim_aware:Β boolΒ |Β NoneΒ =Β None,
    no_latest:Β boolΒ |Β NoneΒ =Β None,
    no_unreads:Β boolΒ |Β NoneΒ =Β None,
    presence_sub:Β boolΒ |Β NoneΒ =Β None,
    simple_latest:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12726,7 +13440,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -12742,7 +13456,7 @@

    Methods

    return self.api_call("rtm.start", http_verb="GET", params=kwargs)

    Starts a Real Time Messaging session. -https://api.slack.com/methods/rtm.start

    +https://docs.slack.dev/reference/methods/rtm.start

    def search_all(self,
    *,
    query:Β str,
    count:Β intΒ |Β NoneΒ =Β None,
    highlight:Β boolΒ |Β NoneΒ =Β None,
    page:Β intΒ |Β NoneΒ =Β None,
    sort:Β strΒ |Β NoneΒ =Β None,
    sort_dir:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12765,7 +13479,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -12781,7 +13495,7 @@

    Methods

    return self.api_call("search.all", http_verb="GET", params=kwargs)

    Searches for messages and files matching a query. -https://api.slack.com/methods/search.all

    +https://docs.slack.dev/reference/methods/search.all

    def search_files(self,
    *,
    query:Β str,
    count:Β intΒ |Β NoneΒ =Β None,
    highlight:Β boolΒ |Β NoneΒ =Β None,
    page:Β intΒ |Β NoneΒ =Β None,
    sort:Β strΒ |Β NoneΒ =Β None,
    sort_dir:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12804,7 +13518,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -12820,7 +13534,7 @@

    Methods

    return self.api_call("search.files", http_verb="GET", params=kwargs)

    Searches for files matching a query. -https://api.slack.com/methods/search.files

    +https://docs.slack.dev/reference/methods/search.files

    def search_messages(self,
    *,
    query:Β str,
    count:Β intΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    highlight:Β boolΒ |Β NoneΒ =Β None,
    page:Β intΒ |Β NoneΒ =Β None,
    sort:Β strΒ |Β NoneΒ =Β None,
    sort_dir:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12844,7 +13558,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -12861,7 +13575,382 @@

    Methods

    return self.api_call("search.messages", http_verb="GET", params=kwargs)

    Searches for messages matching a query. -https://api.slack.com/methods/search.messages

    +https://docs.slack.dev/reference/methods/search.messages

    + +
    +def slackLists_access_delete(self,
    *,
    list_id:Β str,
    channel_ids:Β List[str]Β |Β NoneΒ =Β None,
    user_ids:Β List[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def slackLists_access_delete(
    +    self,
    +    *,
    +    list_id: str,
    +    channel_ids: Optional[List[str]] = None,
    +    user_ids: Optional[List[str]] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Revoke access to a List for specified entities.
    +    https://docs.slack.dev/reference/methods/slackLists.access.delete
    +    """
    +    kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids})
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.access.delete", json=kwargs)
    +
    +

    Revoke access to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.delete

    +
    +
    +def slackLists_access_set(self,
    *,
    list_id:Β str,
    access_level:Β str,
    channel_ids:Β List[str]Β |Β NoneΒ =Β None,
    user_ids:Β List[str]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def slackLists_access_set(
    +    self,
    +    *,
    +    list_id: str,
    +    access_level: str,
    +    channel_ids: Optional[List[str]] = None,
    +    user_ids: Optional[List[str]] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Set the access level to a List for specified entities.
    +    https://docs.slack.dev/reference/methods/slackLists.access.set
    +    """
    +    kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids})
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.access.set", json=kwargs)
    +
    +

    Set the access level to a List for specified entities. +https://docs.slack.dev/reference/methods/slackLists.access.set

    +
    +
    +def slackLists_create(self,
    *,
    name:Β str,
    description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
    schema:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
    copy_from_list_id:Β strΒ |Β NoneΒ =Β None,
    include_copied_list_records:Β boolΒ |Β NoneΒ =Β None,
    todo_mode:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def slackLists_create(
    +    self,
    +    *,
    +    name: str,
    +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
    +    schema: Optional[List[Dict[str, Any]]] = None,
    +    copy_from_list_id: Optional[str] = None,
    +    include_copied_list_records: Optional[bool] = None,
    +    todo_mode: Optional[bool] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Creates a List.
    +    https://docs.slack.dev/reference/methods/slackLists.create
    +    """
    +    kwargs.update(
    +        {
    +            "name": name,
    +            "description_blocks": description_blocks,
    +            "schema": schema,
    +            "copy_from_list_id": copy_from_list_id,
    +            "include_copied_list_records": include_copied_list_records,
    +            "todo_mode": todo_mode,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.create", json=kwargs)
    +
    + +
    +
    +def slackLists_download_get(self, *, list_id:Β str, job_id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def slackLists_download_get(
    +    self,
    +    *,
    +    list_id: str,
    +    job_id: str,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Retrieve List download URL from an export job to download List contents.
    +    https://docs.slack.dev/reference/methods/slackLists.download.get
    +    """
    +    kwargs.update(
    +        {
    +            "list_id": list_id,
    +            "job_id": job_id,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.download.get", json=kwargs)
    +
    +

    Retrieve List download URL from an export job to download List contents. +https://docs.slack.dev/reference/methods/slackLists.download.get

    +
    +
    +def slackLists_download_start(self, *, list_id:Β str, include_archived:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def slackLists_download_start(
    +    self,
    +    *,
    +    list_id: str,
    +    include_archived: Optional[bool] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Initiate a job to export List contents.
    +    https://docs.slack.dev/reference/methods/slackLists.download.start
    +    """
    +    kwargs.update(
    +        {
    +            "list_id": list_id,
    +            "include_archived": include_archived,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.download.start", json=kwargs)
    +
    + +
    +
    +def slackLists_items_create(self,
    *,
    list_id:Β str,
    duplicated_item_id:Β strΒ |Β NoneΒ =Β None,
    parent_item_id:Β strΒ |Β NoneΒ =Β None,
    initial_fields:Β List[Dict[str,Β Any]]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def slackLists_items_create(
    +    self,
    +    *,
    +    list_id: str,
    +    duplicated_item_id: Optional[str] = None,
    +    parent_item_id: Optional[str] = None,
    +    initial_fields: Optional[List[Dict[str, Any]]] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Add a new item to an existing List.
    +    https://docs.slack.dev/reference/methods/slackLists.items.create
    +    """
    +    kwargs.update(
    +        {
    +            "list_id": list_id,
    +            "duplicated_item_id": duplicated_item_id,
    +            "parent_item_id": parent_item_id,
    +            "initial_fields": initial_fields,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.items.create", json=kwargs)
    +
    + +
    +
    +def slackLists_items_delete(self, *, list_id:Β str, id:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def slackLists_items_delete(
    +    self,
    +    *,
    +    list_id: str,
    +    id: str,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Deletes an item from an existing List.
    +    https://docs.slack.dev/reference/methods/slackLists.items.delete
    +    """
    +    kwargs.update(
    +        {
    +            "list_id": list_id,
    +            "id": id,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.items.delete", json=kwargs)
    +
    + +
    +
    +def slackLists_items_deleteMultiple(self, *, list_id:Β str, ids:Β List[str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def slackLists_items_deleteMultiple(
    +    self,
    +    *,
    +    list_id: str,
    +    ids: List[str],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Deletes multiple items from an existing List.
    +    https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple
    +    """
    +    kwargs.update(
    +        {
    +            "list_id": list_id,
    +            "ids": ids,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.items.deleteMultiple", json=kwargs)
    +
    + +
    +
    +def slackLists_items_info(self, *, list_id:Β str, id:Β str, include_is_subscribed:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def slackLists_items_info(
    +    self,
    +    *,
    +    list_id: str,
    +    id: str,
    +    include_is_subscribed: Optional[bool] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Get a row from a List.
    +    https://docs.slack.dev/reference/methods/slackLists.items.info
    +    """
    +    kwargs.update(
    +        {
    +            "list_id": list_id,
    +            "id": id,
    +            "include_is_subscribed": include_is_subscribed,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.items.info", json=kwargs)
    +
    + +
    +
    +def slackLists_items_list(self,
    *,
    list_id:Β str,
    limit:Β intΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    archived:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def slackLists_items_list(
    +    self,
    +    *,
    +    list_id: str,
    +    limit: Optional[int] = None,
    +    cursor: Optional[str] = None,
    +    archived: Optional[bool] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Get records from a List.
    +    https://docs.slack.dev/reference/methods/slackLists.items.list
    +    """
    +    kwargs.update(
    +        {
    +            "list_id": list_id,
    +            "limit": limit,
    +            "cursor": cursor,
    +            "archived": archived,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.items.list", json=kwargs)
    +
    + +
    +
    +def slackLists_items_update(self, *, list_id:Β str, cells:Β List[Dict[str,Β Any]], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse +
    +
    +
    + +Expand source code + +
    def slackLists_items_update(
    +    self,
    +    *,
    +    list_id: str,
    +    cells: List[Dict[str, Any]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Updates cells in a List.
    +    https://docs.slack.dev/reference/methods/slackLists.items.update
    +    """
    +    kwargs.update(
    +        {
    +            "list_id": list_id,
    +            "cells": cells,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.items.update", json=kwargs)
    +
    + +
    +
    +def slackLists_update(self,
    *,
    id:Β str,
    name:Β strΒ |Β NoneΒ =Β None,
    description_blocks:Β strΒ |Β Sequence[DictΒ |Β RichTextBlock]Β |Β NoneΒ =Β None,
    todo_mode:Β boolΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    +
    +
    +
    + +Expand source code + +
    def slackLists_update(
    +    self,
    +    *,
    +    id: str,
    +    name: Optional[str] = None,
    +    description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None,
    +    todo_mode: Optional[bool] = None,
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Update a List.
    +    https://docs.slack.dev/reference/methods/slackLists.update
    +    """
    +    kwargs.update(
    +        {
    +            "id": id,
    +            "name": name,
    +            "description_blocks": description_blocks,
    +            "todo_mode": todo_mode,
    +        }
    +    )
    +    kwargs = _remove_none_values(kwargs)
    +    return self.api_call("slackLists.update", json=kwargs)
    +
    +
    def stars_add(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    file:Β strΒ |Β NoneΒ =Β None,
    file_comment:Β strΒ |Β NoneΒ =Β None,
    timestamp:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12881,7 +13970,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -12894,7 +13983,7 @@

    Methods

    return self.api_call("stars.add", params=kwargs)
    +https://docs.slack.dev/reference/methods/stars.add

    def stars_list(self,
    *,
    count:Β intΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    page:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12915,7 +14004,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -12929,7 +14018,7 @@

    Methods

    return self.api_call("stars.list", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/stars.list

    def stars_remove(self,
    *,
    channel:Β strΒ |Β NoneΒ =Β None,
    file:Β strΒ |Β NoneΒ =Β None,
    file_comment:Β strΒ |Β NoneΒ =Β None,
    timestamp:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12949,7 +14038,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -12962,7 +14051,7 @@

    Methods

    return self.api_call("stars.remove", params=kwargs)

    Removes a star from an item. -https://api.slack.com/methods/stars.remove

    +https://docs.slack.dev/reference/methods/stars.remove

    def team_accessLogs(self,
    *,
    before:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -12984,7 +14073,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -12999,7 +14088,7 @@

    Methods

    return self.api_call("team.accessLogs", http_verb="GET", params=kwargs)

    Gets the access logs for the current team. -https://api.slack.com/methods/team.accessLogs

    +https://docs.slack.dev/reference/methods/team.accessLogs

    def team_billableInfo(self, *, team_id:Β strΒ |Β NoneΒ =Β None, user:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13017,13 +14106,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)

    Gets billable users information for the current team. -https://api.slack.com/methods/team.billableInfo

    +https://docs.slack.dev/reference/methods/team.billableInfo

    def team_billing_info(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13038,12 +14127,12 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs)

    Reads a workspace's billing plan information. -https://api.slack.com/methods/team.billing.info

    +https://docs.slack.dev/reference/methods/team.billing.info

    def team_externalTeams_disconnect(self, *, target_team:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13060,7 +14149,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -13070,7 +14159,7 @@

    Methods

    return self.api_call("team.externalTeams.disconnect", params=kwargs)
    +https://docs.slack.dev/reference/methods/team.externalTeams.disconnect

    def team_externalTeams_list(self,
    *,
    connection_status_filter:Β strΒ |Β NoneΒ =Β None,
    slack_connect_pref_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
    sort_direction:Β strΒ |Β NoneΒ =Β None,
    sort_field:Β strΒ |Β NoneΒ =Β None,
    workspace_filter:Β Sequence[str]Β |Β NoneΒ =Β None,
    cursor:Β strΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13093,7 +14182,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -13117,7 +14206,7 @@

    Methods

    return self.api_call("team.externalTeams.list", http_verb="GET", params=kwargs)

    Returns a list of all the external teams connected and details about the connection. -https://api.slack.com/methods/team.externalTeams.list

    +https://docs.slack.dev/reference/methods/team.externalTeams.list

    def team_info(self, *, team:Β strΒ |Β NoneΒ =Β None, domain:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13135,13 +14224,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs)

    Gets information about the current team. -https://api.slack.com/methods/team.info

    +https://docs.slack.dev/reference/methods/team.info

    def team_integrationLogs(self,
    *,
    app_id:Β strΒ |Β NoneΒ =Β None,
    change_type:Β strΒ |Β NoneΒ =Β None,
    count:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    page:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    service_id:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    user:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13164,7 +14253,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -13180,7 +14269,7 @@

    Methods

    return self.api_call("team.integrationLogs", http_verb="GET", params=kwargs)

    Gets the integration logs for the current team. -https://api.slack.com/methods/team.integrationLogs

    +https://docs.slack.dev/reference/methods/team.integrationLogs

    def team_preferences_list(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13195,12 +14284,12 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs)

    Retrieve a list of a workspace's team preferences. -https://api.slack.com/methods/team.preferences.list

    +https://docs.slack.dev/reference/methods/team.preferences.list

    def team_profile_get(self, *, visibility:Β strΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13217,13 +14306,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/team.profile.get

    def tooling_tokens_rotate(self, *, refresh_token:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13240,13 +14329,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs)

    Exchanges a refresh token for a new app configuration token -https://api.slack.com/methods/tooling.tokens.rotate

    +https://docs.slack.dev/reference/methods/tooling.tokens.rotate

    def usergroups_create(self,
    *,
    name:Β str,
    channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    description:Β strΒ |Β NoneΒ =Β None,
    handle:Β strΒ |Β NoneΒ =Β None,
    include_count:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13268,7 +14357,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -13286,7 +14375,7 @@

    Methods

    return self.api_call("usergroups.create", params=kwargs)
    +https://docs.slack.dev/reference/methods/usergroups.create

    def usergroups_disable(self,
    *,
    usergroup:Β str,
    include_count:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13305,13 +14394,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs)

    Disable an existing User Group -https://api.slack.com/methods/usergroups.disable

    +https://docs.slack.dev/reference/methods/usergroups.disable

    def usergroups_enable(self,
    *,
    usergroup:Β str,
    include_count:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13330,13 +14419,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs)
    +https://docs.slack.dev/reference/methods/usergroups.enable

    def usergroups_list(self,
    *,
    include_count:Β boolΒ |Β NoneΒ =Β None,
    include_disabled:Β boolΒ |Β NoneΒ =Β None,
    include_users:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13356,7 +14445,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -13369,7 +14458,7 @@

    Methods

    return self.api_call("usergroups.list", http_verb="GET", params=kwargs)

    List all User Groups for a team -https://api.slack.com/methods/usergroups.list

    +https://docs.slack.dev/reference/methods/usergroups.list

    def usergroups_update(self,
    *,
    usergroup:Β str,
    channels:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    description:Β strΒ |Β NoneΒ =Β None,
    handle:Β strΒ |Β NoneΒ =Β None,
    include_count:Β boolΒ |Β NoneΒ =Β None,
    name:Β strΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13392,7 +14481,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -13411,7 +14500,7 @@

    Methods

    return self.api_call("usergroups.update", params=kwargs)
    +https://docs.slack.dev/reference/methods/usergroups.update

    def usergroups_users_list(self,
    *,
    usergroup:Β str,
    include_disabled:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13430,7 +14519,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -13442,7 +14531,7 @@

    Methods

    return self.api_call("usergroups.users.list", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/usergroups.users.list

    def usergroups_users_update(self,
    *,
    usergroup:Β str,
    users:Β strΒ |Β Sequence[str],
    include_count:Β boolΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13462,7 +14551,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -13478,7 +14567,7 @@

    Methods

    return self.api_call("usergroups.users.update", params=kwargs)

    Update the list of users for a User Group -https://api.slack.com/methods/usergroups.users.update

    +https://docs.slack.dev/reference/methods/usergroups.users.update

    def users_conversations(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    exclude_archived:Β boolΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    types:Β strΒ |Β Sequence[str]Β |Β NoneΒ =Β None,
    user:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13500,7 +14589,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -13518,7 +14607,7 @@

    Methods

    return self.api_call("users.conversations", http_verb="GET", params=kwargs)

    List conversations the calling user may access. -https://api.slack.com/methods/users.conversations

    +https://docs.slack.dev/reference/methods/users.conversations

    def users_deletePhoto(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13533,12 +14622,12 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/users.deletePhoto

    def users_discoverableContacts_lookup(self, email:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13554,13 +14643,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs)

    Lookup an email address to see if someone is on Slack -https://api.slack.com/methods/users.discoverableContacts.lookup

    +https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup

    def users_getPresence(self, *, user:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13577,13 +14666,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs)

    Gets user presence information. -https://api.slack.com/methods/users.getPresence

    +https://docs.slack.dev/reference/methods/users.getPresence

    def users_identity(self, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13598,12 +14687,12 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs)
    +https://docs.slack.dev/reference/methods/users.identity

    def users_info(self, *, user:Β str, include_locale:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13621,13 +14710,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs)

    Gets information about a user. -https://api.slack.com/methods/users.info

    +https://docs.slack.dev/reference/methods/users.info

    def users_list(self,
    *,
    cursor:Β strΒ |Β NoneΒ =Β None,
    include_locale:Β boolΒ |Β NoneΒ =Β None,
    limit:Β intΒ |Β NoneΒ =Β None,
    team_id:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13647,7 +14736,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -13660,7 +14749,7 @@

    Methods

    return self.api_call("users.list", http_verb="GET", params=kwargs)

    Lists all users in a Slack team. -https://api.slack.com/methods/users.list

    +https://docs.slack.dev/reference/methods/users.list

    def users_lookupByEmail(self, *, email:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13677,13 +14766,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs)

    Find a user with an email address. -https://api.slack.com/methods/users.lookupByEmail

    +https://docs.slack.dev/reference/methods/users.lookupByEmail

    def users_profile_get(self, *, user:Β strΒ |Β NoneΒ =Β None, include_labels:Β boolΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13701,13 +14790,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs)

    Retrieves a user's profile information. -https://api.slack.com/methods/users.profile.get

    +https://docs.slack.dev/reference/methods/users.profile.get

    def users_profile_set(self,
    *,
    name:Β strΒ |Β NoneΒ =Β None,
    value:Β strΒ |Β NoneΒ =Β None,
    user:Β strΒ |Β NoneΒ =Β None,
    profile:Β DictΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13727,7 +14816,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -13742,7 +14831,7 @@

    Methods

    return self.api_call("users.profile.set", json=kwargs)

    Set the profile information for a user. -https://api.slack.com/methods/users.profile.set

    +https://docs.slack.dev/reference/methods/users.profile.set

    def users_setPhoto(self,
    *,
    image:Β strΒ |Β io.IOBase,
    crop_w:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    crop_x:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    crop_y:Β strΒ |Β intΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13762,13 +14851,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs)
    +https://docs.slack.dev/reference/methods/users.setPhoto

    def users_setPresence(self, *, presence:Β str, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13785,13 +14874,13 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs)
    +https://docs.slack.dev/reference/methods/users.setPresence

    def views_open(self,
    *,
    trigger_id:Β strΒ |Β NoneΒ =Β None,
    interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
    view:Β dictΒ |Β View,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13810,8 +14899,8 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13823,8 +14912,8 @@

    Methods

    return self.api_call("views.open", json=kwargs)
    +https://docs.slack.dev/reference/methods/views.open +See https://docs.slack.dev/surfaces/modals/ for details.

    def views_publish(self,
    *,
    user_id:Β str,
    view:Β dictΒ |Β View,
    hash:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13844,8 +14933,8 @@

    Methods

    ) -> Union[Future, SlackResponse]: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -13858,8 +14947,8 @@

    Methods

    Publish a static view for a User. Create or update the view that comprises an -app's Home tab (https://api.slack.com/surfaces/tabs) -https://api.slack.com/methods/views.publish

    +app's Home tab (https://docs.slack.dev/surfaces/app-home/) +https://docs.slack.dev/reference/methods/views.publish

    def views_push(self,
    *,
    trigger_id:Β strΒ |Β NoneΒ =Β None,
    interactivity_pointer:Β strΒ |Β NoneΒ =Β None,
    view:Β dictΒ |Β View,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13881,9 +14970,9 @@

    Methods

    Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -13898,9 +14987,9 @@

    Methods

    Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. -Read the modals documentation (https://api.slack.com/surfaces/modals) +Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. -https://api.slack.com/methods/views.push

    +https://docs.slack.dev/reference/methods/views.push

    def views_update(self,
    *,
    view:Β dictΒ |Β View,
    external_id:Β strΒ |Β NoneΒ =Β None,
    view_id:Β strΒ |Β NoneΒ =Β None,
    hash:Β strΒ |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -13922,9 +15011,9 @@

    Methods

    """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -13944,9 +15033,119 @@

    Methods

    Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. -See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) +See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. -https://api.slack.com/methods/views.update

    +https://docs.slack.dev/reference/methods/views.update

    + +
    +
    +
    + +Expand source code + +
    def workflows_featured_add(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Add featured workflows to a channel.
    +    https://docs.slack.dev/reference/methods/workflows.featured.add
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.add", params=kwargs)
    +
    + +
    + +
    +
    + +Expand source code + +
    def workflows_featured_list(
    +    self,
    +    *,
    +    channel_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """List the featured workflows for specified channels.
    +    https://docs.slack.dev/reference/methods/workflows.featured.list
    +    """
    +    if isinstance(channel_ids, (list, tuple)):
    +        kwargs.update({"channel_ids": ",".join(channel_ids)})
    +    else:
    +        kwargs.update({"channel_ids": channel_ids})
    +    return self.api_call("workflows.featured.list", params=kwargs)
    +
    +

    List the featured workflows for specified channels. +https://docs.slack.dev/reference/methods/workflows.featured.list

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_remove(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Remove featured workflows from a channel.
    +    https://docs.slack.dev/reference/methods/workflows.featured.remove
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.remove", params=kwargs)
    +
    + +
    + +
    +
    + +Expand source code + +
    def workflows_featured_set(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Set featured workflows for a channel.
    +    https://docs.slack.dev/reference/methods/workflows.featured.set
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.set", params=kwargs)
    +
    +
    def workflows_stepCompleted(self, *, workflow_step_execute_id:Β str, outputs:Β dictΒ |Β NoneΒ =Β None, **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13964,7 +15163,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -13974,7 +15173,7 @@

    Methods

    return self.api_call("workflows.stepCompleted", json=kwargs)

    Indicate a successful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepCompleted

    +https://docs.slack.dev/reference/methods/workflows.stepCompleted

    def workflows_stepFailed(self, *, workflow_step_execute_id:Β str, error:Β Dict[str,Β str], **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse @@ -13992,7 +15191,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -14005,7 +15204,7 @@

    Methods

    return self.api_call("workflows.stepFailed", json=kwargs)

    Indicate an unsuccessful outcome of a workflow step's execution. -https://api.slack.com/methods/workflows.stepFailed

    +https://docs.slack.dev/reference/methods/workflows.stepFailed

    def workflows_updateStep(self,
    *,
    workflow_step_edit_id:Β str,
    inputs:Β Dict[str,Β Any]Β |Β NoneΒ =Β None,
    outputs:Β List[Dict[str,Β str]]Β |Β NoneΒ =Β None,
    **kwargs) ‑>Β _asyncio.FutureΒ |Β LegacySlackResponse
    @@ -14024,7 +15223,7 @@

    Methods

    **kwargs, ) -> Union[Future, SlackResponse]: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: @@ -14036,7 +15235,7 @@

    Methods

    return self.api_call("workflows.updateStep", json=kwargs)

    Update the configuration for a workflow extension step. -https://api.slack.com/methods/workflows.updateStep

    +https://docs.slack.dev/reference/methods/workflows.updateStep

    Inherited members

    @@ -14100,6 +15299,7 @@

    admin_conversations_convertToPrivate
  • admin_conversations_convertToPublic
  • admin_conversations_create
  • +
  • admin_conversations_createForObjects
  • admin_conversations_delete
  • admin_conversations_disconnectShared
  • admin_conversations_ekm_listOriginalConnectedChannelInfo
  • @@ -14107,6 +15307,7 @@

    admin_conversations_getCustomRetention
  • admin_conversations_getTeams
  • admin_conversations_invite
  • +
  • admin_conversations_linkObjects
  • admin_conversations_lookup
  • admin_conversations_removeCustomRetention
  • admin_conversations_rename
  • @@ -14118,6 +15319,7 @@

    admin_conversations_setCustomRetention
  • admin_conversations_setTeams
  • admin_conversations_unarchive
  • +
  • admin_conversations_unlinkObjects
  • admin_emoji_add
  • admin_emoji_addAlias
  • admin_emoji_list
  • @@ -14216,6 +15418,7 @@

    channels_setPurpose
  • channels_setTopic
  • channels_unarchive
  • +
  • chat_appendStream
  • chat_delete
  • chat_deleteScheduledMessage
  • chat_getPermalink
  • @@ -14224,6 +15427,8 @@

    chat_postMessage
  • chat_scheduleMessage
  • chat_scheduledMessages_list
  • +
  • chat_startStream
  • +
  • chat_stopStream
  • chat_unfurl
  • chat_update
  • conversations_acceptSharedInvite
  • @@ -14261,6 +15466,7 @@

    dnd_setSnooze
  • dnd_teamInfo
  • emoji_list
  • +
  • entity_presentDetails
  • files_comments_delete
  • files_completeUploadExternal
  • files_delete
  • @@ -14330,6 +15536,18 @@

    search_all
  • search_files
  • search_messages
  • +
  • slackLists_access_delete
  • +
  • slackLists_access_set
  • +
  • slackLists_create
  • +
  • slackLists_download_get
  • +
  • slackLists_download_start
  • +
  • slackLists_items_create
  • +
  • slackLists_items_delete
  • +
  • slackLists_items_deleteMultiple
  • +
  • slackLists_items_info
  • +
  • slackLists_items_list
  • +
  • slackLists_items_update
  • +
  • slackLists_update
  • stars_add
  • stars_list
  • stars_remove
  • @@ -14366,6 +15584,10 @@

    views_publish
  • views_push
  • views_update
  • +
  • workflows_featured_add
  • +
  • workflows_featured_list
  • +
  • workflows_featured_remove
  • +
  • workflows_featured_set
  • workflows_stepCompleted
  • workflows_stepFailed
  • workflows_updateStep
  • @@ -14377,7 +15599,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/web/legacy_slack_response.html b/docs/reference/web/legacy_slack_response.html similarity index 99% rename from docs/static/api-docs/slack_sdk/web/legacy_slack_response.html rename to docs/reference/web/legacy_slack_response.html index c3e20da4e..c0531066d 100644 --- a/docs/static/api-docs/slack_sdk/web/legacy_slack_response.html +++ b/docs/reference/web/legacy_slack_response.html @@ -3,7 +3,7 @@ - + slack_sdk.web.legacy_slack_response API documentation @@ -408,7 +408,7 @@

    diff --git a/docs/static/api-docs/slack_sdk/web/slack_response.html b/docs/reference/web/slack_response.html similarity index 99% rename from docs/static/api-docs/slack_sdk/web/slack_response.html rename to docs/reference/web/slack_response.html index be655b57f..6746b3c7d 100644 --- a/docs/static/api-docs/slack_sdk/web/slack_response.html +++ b/docs/reference/web/slack_response.html @@ -3,7 +3,7 @@ - + slack_sdk.web.slack_response API documentation @@ -379,7 +379,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/webhook/async_client.html b/docs/reference/webhook/async_client.html similarity index 98% rename from docs/static/api-docs/slack_sdk/webhook/async_client.html rename to docs/reference/webhook/async_client.html index 84c9eeb06..15c7e4a45 100644 --- a/docs/static/api-docs/slack_sdk/webhook/async_client.html +++ b/docs/reference/webhook/async_client.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook.async_client API documentation @@ -84,7 +84,7 @@

    Classes

    ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -302,7 +302,7 @@

    Classes

    return resp

    API client for Incoming Webhooks and response_url

    -

    https://api.slack.com/messaging/webhooks

    +

    https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/

    Args

    url
    @@ -531,7 +531,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/webhook/client.html b/docs/reference/webhook/client.html similarity index 98% rename from docs/static/api-docs/slack_sdk/webhook/client.html rename to docs/reference/webhook/client.html index 4a6cd8625..aebec5a3f 100644 --- a/docs/static/api-docs/slack_sdk/webhook/client.html +++ b/docs/reference/webhook/client.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook.client API documentation @@ -78,7 +78,7 @@

    Classes

    ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -297,19 +297,19 @@

    Classes

    http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp

    API client for Incoming Webhooks and response_url

    -

    https://api.slack.com/messaging/webhooks

    +

    https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/

    Args

    url
    @@ -521,7 +521,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/webhook/index.html b/docs/reference/webhook/index.html similarity index 98% rename from docs/static/api-docs/slack_sdk/webhook/index.html rename to docs/reference/webhook/index.html index 31124748a..51c387ef4 100644 --- a/docs/static/api-docs/slack_sdk/webhook/index.html +++ b/docs/reference/webhook/index.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook API documentation @@ -100,7 +100,7 @@

    Classes

    ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -319,19 +319,19 @@

    Classes

    http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp

    API client for Incoming Webhooks and response_url

    -

    https://api.slack.com/messaging/webhooks

    +

    https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/

    Args

    url
    @@ -579,7 +579,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/static/api-docs/slack_sdk/webhook/internal_utils.html b/docs/reference/webhook/internal_utils.html similarity index 98% rename from docs/static/api-docs/slack_sdk/webhook/internal_utils.html rename to docs/reference/webhook/internal_utils.html index d31af2920..118a7100f 100644 --- a/docs/static/api-docs/slack_sdk/webhook/internal_utils.html +++ b/docs/reference/webhook/internal_utils.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook.internal_utils API documentation @@ -60,7 +60,7 @@

    Module slack_sdk.webhook.internal_utils

    diff --git a/docs/static/api-docs/slack_sdk/webhook/webhook_response.html b/docs/reference/webhook/webhook_response.html similarity index 98% rename from docs/static/api-docs/slack_sdk/webhook/webhook_response.html rename to docs/reference/webhook/webhook_response.html index 90f3c9db3..f0c372b97 100644 --- a/docs/static/api-docs/slack_sdk/webhook/webhook_response.html +++ b/docs/reference/webhook/webhook_response.html @@ -3,7 +3,7 @@ - + slack_sdk.webhook.webhook_response API documentation @@ -95,7 +95,7 @@

    -

    Generated by pdoc 0.11.5.

    +

    Generated by pdoc 0.11.6.

    diff --git a/docs/sidebars.js b/docs/sidebars.js deleted file mode 100644 index 549930ea3..000000000 --- a/docs/sidebars.js +++ /dev/null @@ -1,66 +0,0 @@ -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - sidebarPythonSDK: [ - { - type: "doc", - id: "index", - label: "Python Slack SDK", - className: "sidebar-title", - }, - "installation", - "web", - "webhook", - "socket-mode", - "oauth", - "audit-logs", - "rtm", - "scim", - { type: "html", value: "
    " }, - { - type: "category", - label: "Legacy slackclient v2", - items: [ - "legacy/index", - "legacy/auth", - "legacy/basic_usage", - "legacy/conversations", - "legacy/real_time_messaging", - "legacy/faq", - "legacy/changelog", - ], - }, - "v3-migration", - { type: "html", value: "
    " }, - { - type: "category", - label: "Tutorials", - items: ["tutorial/uploading-files", "tutorial/understanding-oauth-scopes"], - }, - { type: "html", value: "
    " }, - { - type: "link", - label: "Reference", - href: "https://tools.slack.dev/python-slack-sdk/api-docs/slack_sdk/", - }, - { type: "html", value: "
    " }, - { - type: "link", - label: "Release notes", - href: "https://github.com/slackapi/python-slack-sdk/releases", - }, - { - type: "link", - label: "Code on GitHub", - href: "https://github.com/SlackAPI/python-slack-sdk", - }, - { - type: "link", - label: "Contributors Guide", - href: "https://github.com/SlackAPI/python-slack-sdk/blob/main/.github/contributing.md", - }, - ], -}; - -export default sidebars; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css deleted file mode 100644 index 65b7c372b..000000000 --- a/docs/src/css/custom.css +++ /dev/null @@ -1,583 +0,0 @@ -:root { - --ifm-font-size-base: 15px; - - /* set hex colors here pls */ - --dim: #eef2f6; - - --aubergine: #481a54; - --aubergine-background: #552555; - --aubergine-dark: #2c0134; - - --aubergine-active: #7c3085; - --aubergine-active-70: #7c308570; - --aubergine-active-50: #7c308550; - --aubergine-active-30: #7c308530; - - --horchata: #f4ede4; - - --slack-red: #e3066a; - --slack-red-70: #e3066a70; - --slack-red-50: #e3066a50; - --slack-red-30: #e3066a30; - --slack-red-20: #e3066a20; - - --slack-yellow: #fcc003; - --slack-yellow-70: #fcc00370; - --slack-yellow-50: #fcc00350; - --slack-yellow-30: #fcc00330; - --slack-yellow-20: #fcc00320; - - --slack-green: #41b658; - --slack-green-70: #41b65870; - --slack-green-50: #41b65850; - --slack-green-30: #41b65830; - --slack-green-20: #41b65820; - - --slack-blue: #1ab9ff; - --slack-blue-70: #1ab9ff70; - --slack-blue-50: #1ab9ff70; - --slack-blue-30: #1ab9ff30; - --slack-blue-20: #1ab9ff20; - - /* used for dark-mode links */ - --slack-cloud-blue: #1ab9ff; - /* slack marketing color used for light-mode links */ - --slack-dark-blue: #1264a3; - - /* used for functions */ - --unofficial-orange: #e36606; - --unofficial-orange-70: #e3660670; - --unofficial-orange-50: #e3660650; - --unofficial-orange-30: #e3660630; - - /* turns opacity into flat colors for bubbles on top of things */ - --slack-yellow-70-flat: #fcc00370; - - --slack-yellow-30-on-white: #feecb3; - --slack-green-30-on-white: #c6e9cc; - --slack-red-30-on-white: #f6b4d2; - --slack-blue-30-on-white: #baeaff; - --unofficial-orange-30-on-white: #f6d1b4; - --aubergine-active-30-on-white: #d7c0da; - - --ifm-h5-font-size: 1rem; - /* --ifm-heading-font-family: 'AvantGardeForSalesforce', sans-serif; */ - /* --ifm-font-family-base: 'Salesforce_Sans', sans-serif; */ - --ifm-navbar-height: 83px; - - -} - -.navbar__logo img { - height: 150%; - margin-top: -8px; -} - -.navbar--dark { - --ifm-navbar-background-color: #000 !important; - --ifm-navbar-link-hover-color: var(--slack-blue); -} - -.footer { - --ifm-footer-background-color: #000 !important; - --ifm-footer-link-hover-color: var(--slack-blue); - --ifm-footer-color: white !important; -} - -.theme-admonition div{ - text-transform: none !important; /* Disables uppercase transformation */ - -} - -/* resets striped tables that hurt me eyes */ -table tr:nth-child(even) { - background-color: inherit; -} - -h1 { - font-size: 2.5rem; -} - -/* Reduce title size in blog list */ -.blog-list-page h2[class*="title"] -{ - font-size: 2rem; -} - -/* Reduce title size in blog page */ -.blog-post-page h1[class*="title"] -{ - font-size: 2rem; -} - -/* changing the links to blue for accessibility */ -p a, -.markdown a { - color: var(--slack-cloud-blue); - text-decoration: none; -} - -p a, -.markdown a:hover { - text-decoration: underline; -} - -a:hover { - color: var(--slack-cloud-blue); -} - -.article h1 { - font-size: 1rem !important; /* Adjust the size as needed */ -} - -.card { - box-shadow: none; -} - -/* adjusting for light and dark modes */ -[data-theme="light"] { - --docusaurus-highlighted-code-line-bg: var(--dim); - --ifm-color-primary: var(--aubergine-active); - --ifm-navbar-background-color: black; - --ifm-footer-background-color: black; - --slack-cloud-blue: var(--slack-dark-blue); - --reference-section-color: var(--horchata); -} - -[data-theme="dark"] { - --docusaurus-highlighted-code-line-bg: rgb(0 0 0 / 30%); - --ifm-color-primary: var(--slack-cloud-blue); - --ifm-navbar-background-color: #000 !important; - --ifm-footer-background-color: #000 !important; - --ifm-footer-color: white; -} - -.alert--warning { - --ifm-alert-background-color: var(--slack-yellow-30); - --ifm-alert-border-color: var(--slack-yellow); - --ifm-alert-background-color-highlight: var(--slack-yellow-30); -} - -.alert--info { - --ifm-alert-background-color: var(--slack-blue-30); - --ifm-alert-border-color: var(--slack-blue); - /* --ifm-alert-background-color-highlight: var(--slack-blue-30); */ -} - -.alert--danger { - --ifm-alert-background-color: var(--slack-red-30); - --ifm-alert-border-color: var(--slack-red); -} - -.alert--success { - --ifm-alert-background-color: var(--slack-green-30); - --ifm-alert-border-color: var(--slack-green); -} - -.footer { - /* font-size: 80%; */ - padding-bottom: 0.5rem; -} - -.footer__items a { - color: inherit; -} - -.footer .container { - margin: 0; -} - -.table-of-contents__link { - font-size: .9rem; -} - -/* bolding ToC for contrast */ -.table-of-contents__link--active { - font-weight: bold; -} - -/* removing ToC line */ -.table-of-contents__left-border { - border-left: none !important; -} - - -.dropdown-hr { - margin: 0 -} - -/* increasing name of site in sidebar */ -.sidebar-title { - /* padding-bottom: 0.5rem; - font-size: 1.25em; */ - font-weight: bold; -} - -.theme-doc-sidebar-item-link hr { - margin: 1rem; -} - -.sidebar-sdk-title { - /* margin: 0.5rem 0; */ - padding: 0.5rem; - /* border-radius: 4px; */ - border-bottom: 0.5px solid grey; -} - -/* .theme-doc-sidebar-item-category-level-1 .menu__link { - font-weight: bold; -} */ - -.theme-doc-sidebar-item-category-level-1 .menu__list-item .menu__link { - font-weight: normal; -} - -/* removing sidebar line and adding space to match ToC */ -.theme-doc-sidebar-container { - border-right: none !important; - margin-right: 2rem; -} - -/* announcement bar up top */ -div[class^="announcementBar_"] { - font-size: 20px; - height: 50px; - background: var(--horchata); -} - -/* navbar github link */ -.navbar-github-link { - width: 32px; - height: 32px; - padding: 6px; - margin-right: 6px; - margin-left: 6px; - border-radius: 50%; - transition: background var(--ifm-transition-fast); -} - -.navbar-github-link:hover { - background: var(--ifm-color-gray-800); -} - -.navbar-github-link::before { - content: ""; - height: 100%; - display: block; - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; -} - -/* Delineate tab blocks */ -.tabs-container { - border: 1px solid var(--ifm-color-primary); - border-radius: 4px; - padding: 0.5em; -} - -summary { - background-color: var(--ifm-background-color); - --docusaurus-details-decoration-color: var(--ifm-color-primary); -} - -details { - border: 1px solid var(--ifm-color-primary)!important; - background-color: var(--ifm-background-color)!important; - --docusaurus-details-decoration-color: var(--ifm-color-primary); -} - -details[open] { - border: 1px solid var(--ifm-color-primary); - background-color: var(--ifm-background-color); - --docusaurus-details-decoration-color: var(--ifm-color-primary); - -} - -/* Docs code bubbles */ -[data-theme="light"] { - --contrast-color: black; - --code-link-background: var(--slack-blue-30); - --code-link-text: rgb(21, 50, 59); - - --method-link-background: var(--slack-green-30-on-white); - --method-link-text: rgb(0, 41, 0); - - --scope-link-background: var(--slack-yellow-30-on-white); - --scope-link-text: rgb(63, 46, 0); - - --event-link-background:#fad4e5; - /* --event-link-text: rgb(63, 0, 24); */ - --event-link-text: rgb(0, 0, 0); - - --function-link-background: var(--unofficial-orange-30-on-white); - --function-link-text: rgb(75, 35, 0); - - --command-link-background: var(--aubergine-active-30-on-white); - --command-link-text: rgb(75, 0, 75); -} - -[data-theme="dark"] { - --contrast-color: white; - --code-link-text: white; - --method-link-text: white; - --scope-link-text: white; - --event-link-text: white; - --function-link-text: white; - --command-link-text: white; - - --code-link-background: var(--slack-blue-70); - --method-link-background: var(--slack-green-70); - --scope-link-background: var(--slack-yellow-70); - --event-link-background: var(--slack-red-70); - --command-link-background: var(--aubergine-active); - --function-link-background: var(--unofficial-orange-70); -} - -a code { - background-color: var(--code-link-background); - color: var(--code-link-text); -} - -a[href^="https://api.slack.com/methods"] > code -{ - background-color: var(--method-link-background); - color: var(--method-link-text); -} - -a[href^="/reference/methods"] > code -{ - background-color: var(--method-link-background); - color: var(--method-link-text); -} - -a[href^="https://api.slack.com/scopes"] > code -{ - background-color: var(--scope-link-background); - color: var(--scope-link-text); -} - -a[href^="/reference/scopes"] > code -{ - background-color: var(--scope-link-background); - color: var(--scope-link-text); -} - -a[href^="https://api.slack.com/events"] > code -{ - background-color: var(--event-link-background); - color: var(--event-link-text); -} - -a[href^="/reference/events"] > code -{ - background-color: var(--event-link-background); - color: var(--event-link-text); -} - -a[href^="/deno-slack-sdk/reference/slack-functions/"] > code { - background-color: var(--function-link-background); - color: var(--function-link-text); -} - -a[href^="/deno-slack-sdk/reference/connector-functions/"] > code { - background-color: var(--function-link-background); - color: var(--function-link-text); -} - -a[href^="/slack-cli/reference/commands"] > code { - background-color: var(--command-link-background); - color: var(--command-link-text); -} - -.facts-section { - margin-top: 2rem; - background-color: var(--slack-green-20) !important; -} - - -.facts-section .tabs-container { - border: none; - border-radius: 0px; - padding: 0em; - --ifm-leading: 0rem - -} - -.facts-section .tabs__item { - padding: 0 0.5rem; - color: inherit; -} - -.facts-section .tabs__item--active { - border-bottom-color: inherit -} - -.errors-section { - background-color: var(--slack-red-20) !important; -} - - -.inputs-section { - background-color: var(--slack-blue-20) !important; -} - -.functions-section { - border-radius: 6px; - padding: 1rem; - margin-bottom: 2rem; -} - -.facts-row-list { - display: flex; - flex-wrap: wrap; - column-gap: 0.5rem; - row-gap: 0.5rem; - align-items: baseline; /* Aligns items to the same baseline */ -} - -.facts-row-list-item { - display: inline-block; -} - - -.inline-icon { - height: 1.9em; /* Matches the height of the text */ - width: auto; /* Maintains aspect ratio */ - vertical-align: middle; /* Aligns with the text */ -} - -.functions-section .type { - text-align: right; -} - -.param-required-section { - padding-top: 1rem; - margin-bottom: 1rem; -} - -.reference-container { - display: flex; - flex-direction: column; - width: 100%; - /* border: 1px solid #ddd; */ - border-radius: 8px; - overflow: hidden; -} -.reference-facts-header { - display: flex; - /* background: #f4f4f4; */ - padding: 10px 0; - font-weight: bold; -} -.reference-facts-item { - display: flex; - padding: 10px 0; - border-bottom: 1px solid var(--ifm-color-emphasis-200); -} -.reference-facts-item:last-child { - border-bottom: none; -} - -.reference-name { - flex: 2; - /* padding: 5px;*/ - min-width: 200px; -} - -.reference-description { - flex: 2; /* Makes description take extra space */ - padding: 5px; -} - -.reference-last-column { - flex: 1; - padding: 5px 0; -} - -.reference-subitems-bubble { - display: inline-block; - background: var(--ifm-color-emphasis-200); - color: var(--ifm-color-emphasis-1000); - padding: 2px 6px; - margin: 2px; - border-radius: 4px; - font-size: 12px; -} - -.param-container { - border-top: 1px solid lightgray; - padding-top: 1rem; - padding-bottom: 1rem; -} - -.param-container:last-child { - padding-bottom: 0; -} - -.param-top-row { - display: flex; - align-items: center; - margin-bottom: 1rem; -} - -/* left-align param name */ -.param-top-row .name { - flex: 1; -} - -/* right-align Required and Type */ -.param-top-row .required, -.param-top-row .type { - margin-left: auto; - text-align: right; -} - -/* add space between Required and Type */ -.param-top-row .required { - margin-left: 10px; -} - -.info-row { - display: flex; - /* align-items: center; */ - padding-top: 1rem; - padding-bottom: 1rem; - border-top: 1px solid var(--ifm-color-emphasis-400); -} - -.info-key { - flex: 0 0 10rem; - align-items: center; -} - -/* hides next and previous */ -.pagination-nav__link { - display: none; -} - -/* -html[data-theme="dark"] .button:hover { - background-color: var(--slack-blue-30-on-white); -} - -html[data-theme="light"] .button:hover { - background-color: var(--aubergine-active-30-on-white); -} */ - -.button { - background-color: var(--aubergine); /* Change color on hover */ - border: 0; - color: white; -} - -.button:hover { - background-color: var(--aubergine-active); - border: 0; - color: white; -} - -.footer-spaced { - display: flex; - gap: 20px; - padding-bottom: 1rem -} \ No newline at end of file diff --git a/docs/src/theme/NotFound/Content/index.js b/docs/src/theme/NotFound/Content/index.js deleted file mode 100644 index c122bc039..000000000 --- a/docs/src/theme/NotFound/Content/index.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import Translate from '@docusaurus/Translate'; -import Heading from '@theme/Heading'; -export default function NotFoundContent({className}) { - return ( -
    -
    -
    - - - Oh no! There's nothing here. - - -

    - - If we've led you astray, please let us know. We'll do our best to get things in order. - - -

    -

    - - For now, we suggest heading back to the beginning to get your bearings. May your next journey have clear skies to guide you true. - -

    -
    -
    -
    - ); -} diff --git a/docs/src/theme/NotFound/index.js b/docs/src/theme/NotFound/index.js deleted file mode 100644 index 3b551f9e4..000000000 --- a/docs/src/theme/NotFound/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import {translate} from '@docusaurus/Translate'; -import {PageMetadata} from '@docusaurus/theme-common'; -import Layout from '@theme/Layout'; -import NotFoundContent from '@theme/NotFound/Content'; -export default function Index() { - const title = translate({ - id: 'theme.NotFound.title', - message: 'Page Not Found', - }); - return ( - <> - - - - - - ); -} diff --git a/docs/static/api-docs/slack_sdk/models/metadata/index.html b/docs/static/api-docs/slack_sdk/models/metadata/index.html deleted file mode 100644 index 6db012be7..000000000 --- a/docs/static/api-docs/slack_sdk/models/metadata/index.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -slack_sdk.models.metadata API documentation - - - - - - - - - - - -
    -
    -
    -

    Module slack_sdk.models.metadata

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    Classes

    -
    -
    -class Metadata -(event_type:Β str, event_payload:Β Dict[str,Β Any], **kwargs) -
    -
    -
    - -Expand source code - -
    class Metadata(JsonObject):
    -    """Message metadata
    -
    -    https://api.slack.com/metadata
    -    """
    -
    -    attributes = {
    -        "event_type",
    -        "event_payload",
    -    }
    -
    -    def __init__(
    -        self,
    -        event_type: str,
    -        event_payload: Dict[str, Any],
    -        **kwargs,
    -    ):
    -        self.event_type = event_type
    -        self.event_payload = event_payload
    -        self.additional_attributes = kwargs
    -
    -    def __str__(self):
    -        return str(self.get_non_null_attributes())
    -
    -    def __repr__(self):
    -        return self.__str__()
    -
    - -

    Ancestors

    - -

    Class variables

    -
    -
    var attributes
    -
    -

    The type of the None singleton.

    -
    -
    -

    Inherited members

    - -
    -
    -
    -
    - -
    - - - diff --git a/docs/static/img/bolt-logo.svg b/docs/static/img/bolt-logo.svg deleted file mode 100644 index 5077600d5..000000000 --- a/docs/static/img/bolt-logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/static/img/bolt-py-logo.svg b/docs/static/img/bolt-py-logo.svg deleted file mode 100644 index 1dcab5261..000000000 --- a/docs/static/img/bolt-py-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico deleted file mode 100644 index e6e9a4aa7..000000000 Binary files a/docs/static/img/favicon.ico and /dev/null differ diff --git a/docs/static/img/slack-logo-on-white.png b/docs/static/img/slack-logo-on-white.png deleted file mode 100644 index 2a73996c6..000000000 Binary files a/docs/static/img/slack-logo-on-white.png and /dev/null differ diff --git a/docs/static/img/slack-logo.svg b/docs/static/img/slack-logo.svg deleted file mode 100644 index fb55f7245..000000000 --- a/docs/static/img/slack-logo.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/integration_tests/samples/oauth/oauth_v2.py b/integration_tests/samples/oauth/oauth_v2.py index 5741b4ef8..c1c32d879 100644 --- a/integration_tests/samples/oauth/oauth_v2.py +++ b/integration_tests/samples/oauth/oauth_v2.py @@ -123,13 +123,19 @@ def oauth_callback(): @app.route("/slack/events", methods=["POST"]) def slack_app(): + data = request.get_data() if not signature_verifier.is_valid( - body=request.get_data(), + body=data, timestamp=request.headers.get("X-Slack-Request-Timestamp"), signature=request.headers.get("X-Slack-Signature"), ): return make_response("invalid request", 403) + if data and b"url_verification" in data: + body = json.loads(data) + if body.get("type") == "url_verification" and "challenge" in body: + return make_response(body["challenge"], 200) + if "command" in request.form and request.form["command"] == "/open-modal": try: enterprise_id = request.form.get("enterprise_id") @@ -193,4 +199,4 @@ def slack_app(): # python3 integration_tests/samples/oauth/oauth_v2.py # ngrok http 3000 - # https://{yours}.ngrok.io/slack/oauth/start + # https://{yours}.ngrok.io/slack/install diff --git a/integration_tests/samples/oauth/oauth_v2_async.py b/integration_tests/samples/oauth/oauth_v2_async.py index c43add6f3..588b0b5f0 100644 --- a/integration_tests/samples/oauth/oauth_v2_async.py +++ b/integration_tests/samples/oauth/oauth_v2_async.py @@ -135,13 +135,19 @@ async def oauth_callback(req: Request): @app.post("/slack/events") async def slack_app(req: Request): + data = req.body.decode("utf-8") if not signature_verifier.is_valid( - body=req.body.decode("utf-8"), + body=data, timestamp=req.headers.get("X-Slack-Request-Timestamp"), signature=req.headers.get("X-Slack-Signature"), ): return HTTPResponse(status=403, body="invalid request") + if data and "url_verification" in data: + body = json.loads(data) + if body.get("type") == "url_verification" and "challenge" in body: + return HTTPResponse(status=200, body=body["challenge"]) + if "command" in req.form and req.form.get("command") == "/open-modal": try: enterprise_id = req.form.get("enterprise_id") diff --git a/integration_tests/web/test_admin_conversations_restrictAccess.py b/integration_tests/web/test_admin_conversations_restrictAccess.py index 54ee4e6c9..97915abe5 100644 --- a/integration_tests/web/test_admin_conversations_restrictAccess.py +++ b/integration_tests/web/test_admin_conversations_restrictAccess.py @@ -40,7 +40,10 @@ def setUp(self): if self.channel_id is None: millis = int(round(time.time() * 1000)) channel_name = f"private-test-channel-{millis}" - self.channel_id = client.conversations_create(name=channel_name, is_private=True,)[ + self.channel_id = client.conversations_create( + name=channel_name, + is_private=True, + )[ "channel" ]["id"] diff --git a/integration_tests/web/test_calls.py b/integration_tests/web/test_calls.py index 7f5979378..d285c03f0 100644 --- a/integration_tests/web/test_calls.py +++ b/integration_tests/web/test_calls.py @@ -24,7 +24,12 @@ def tearDown(self): def test_sync(self): client = self.sync_client - user_id = list(filter(lambda u: not u["deleted"] and "bot_id" not in u, client.users_list(limit=50)["members"],))[ + user_id = list( + filter( + lambda u: not u["deleted"] and "bot_id" not in u, + client.users_list(limit=50)["members"], + ) + )[ 0 ]["id"] diff --git a/integration_tests/web/test_conversations_connect.py b/integration_tests/web/test_conversations_connect.py index 0e5271c8f..1d988946c 100644 --- a/integration_tests/web/test_conversations_connect.py +++ b/integration_tests/web/test_conversations_connect.py @@ -22,7 +22,7 @@ class TestWebClient(unittest.TestCase): one for the inviting workspace(list and send invites) another for the recipient workspace (accept and approve) sent invites. Before being able to run this test suite, we also need to have manually created a slack connect shared channel and added - these two bots as members first. See: https://api.slack.com/apis/connect + these two bots as members first. See: https://docs.slack.dev/apis/slack-connect/ In addition to conversations.connect:* scopes, your sender bot token should have channels:manage scopes. """ diff --git a/integration_tests/web/test_message_metadata.py b/integration_tests/web/test_message_metadata.py index bb3a4de7b..dc2626d27 100644 --- a/integration_tests/web/test_message_metadata.py +++ b/integration_tests/web/test_message_metadata.py @@ -2,9 +2,32 @@ import os import time import unittest +import json from integration_tests.env_variable_names import SLACK_SDK_TEST_BOT_TOKEN -from slack_sdk.models.metadata import Metadata +from slack_sdk.models.metadata import ( + Metadata, + EventAndEntityMetadata, + EntityMetadata, + ExternalRef, + EntityPayload, + EntityAttributes, + EntityTitle, + TaskEntityFields, + EntityStringField, + EntityTitle, + EntityAttributes, + EntityFullSizePreview, + TaskEntityFields, + EntityTypedField, + EntityStringField, + EntityTimestampField, + EntityEditSupport, + EntityEditTextConfig, + EntityCustomField, + EntityUserIDField, + ExternalRef, +) from slack_sdk.web import WebClient @@ -125,3 +148,97 @@ def test_publishing_message_metadata_using_models(self): ) self.assertIsNone(scheduled.get("error")) self.assertIsNotNone(scheduled.get("message").get("metadata")) + + def test_publishing_entity_metadata(self): + client: WebClient = WebClient(token=self.bot_token) + new_message = client.chat_postMessage( + channel="C014KLZN9M0", + text="Message with entity metadata", + metadata={ + "entities": [ + { + "entity_type": "slack#/entities/task", + "url": "https://abc.com/123", + "external_ref": {"id": "123"}, + "entity_payload": { + "attributes": {"title": {"text": "My task"}, "product_name": "We reference only"}, + "fields": { + "due_date": {"value": "2026-06-06", "type": "slack#/types/date", "edit": {"enabled": True}}, + "created_by": {"type": "slack#/types/user", "user": {"user_id": "U014KLZE350"}}, + "date_created": {"value": 1760629278}, + }, + "custom_fields": [ + { + "label": "img", + "key": "img", + "type": "slack#/types/image", + "image_url": "https://s3-media2.fl.yelpcdn.com/bphoto/korel-1YjNtFtJlMTaC26A/o.jpg", + } + ], + }, + } + ] + }, + ) + + self.assertIsNone(new_message.get("error")) + self.assertIsNone(new_message.get("warning")) + + def test_publishing_entity_metadata_using_models(self): + # Build the metadata + + title = EntityTitle(text="My title") + full_size_preview = EntityFullSizePreview( + is_supported=True, + preview_url="https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg", + mime_type="image/jpeg", + ) + attributes = EntityAttributes(title=title, product_name="My Product", full_size_preview=full_size_preview) + description = EntityStringField( + value="Description of the task.", + long=True, + edit=EntityEditSupport(enabled=True, text=EntityEditTextConfig(min_length=5, max_length=100)), + ) + due_date = EntityTypedField(value="2026-06-06", type="slack#/types/date", edit=EntityEditSupport(enabled=True)) + created_by = EntityTypedField( + type="slack#/types/user", + user=EntityUserIDField(user_id="USLACKBOT"), + ) + date_created = EntityTimestampField(value=1762450663, type="slack#/types/timestamp") + date_updated = EntityTimestampField(value=1762450663, type="slack#/types/timestamp") + fields = TaskEntityFields( + description=description, + due_date=due_date, + created_by=created_by, + date_created=date_created, + date_updated=date_updated, + ) + custom_fields = [] + custom_fields.append( + EntityCustomField( + label="My Image", + key="my-image", + type="slack#/types/image", + image_url="https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg", + ) + ) + entity = EntityPayload(attributes=attributes, fields=fields, custom_fields=custom_fields) + + client: WebClient = WebClient(token=self.bot_token) + new_message = client.chat_postMessage( + channel="#random", + text="Message with entity metadata", + metadata=EventAndEntityMetadata( + entities=[ + EntityMetadata( + entity_type="slack#/entities/task", + external_ref=ExternalRef(id="abc123"), + url="https://myappdomain.com", + entity_payload=entity, + ) + ] + ), + ) + + self.assertIsNone(new_message.get("error")) + self.assertIsNone(new_message.get("warning")) diff --git a/integration_tests/web/test_slack_lists.py b/integration_tests/web/test_slack_lists.py new file mode 100644 index 000000000..6d813bffe --- /dev/null +++ b/integration_tests/web/test_slack_lists.py @@ -0,0 +1,88 @@ +import logging +import os +import unittest + +from integration_tests.env_variable_names import ( + SLACK_SDK_TEST_BOT_TOKEN, +) +from integration_tests.helpers import async_test +from slack_sdk.web import WebClient +from slack_sdk.web.async_client import AsyncWebClient +from slack_sdk.models.blocks import RichTextBlock +from slack_sdk.models.blocks.block_elements import RichTextSection, RichTextText + + +class TestSlackLists(unittest.TestCase): + """Runs integration tests with real Slack API testing the slackLists.* APIs""" + + def setUp(self): + if not hasattr(self, "logger"): + self.logger = logging.getLogger(__name__) + self.bot_token = os.environ[SLACK_SDK_TEST_BOT_TOKEN] + self.async_client: AsyncWebClient = AsyncWebClient(token=self.bot_token) + self.sync_client: WebClient = WebClient(token=self.bot_token) + + def tearDown(self): + pass + + def test_create_list_with_dicts(self): + """Test creating a list with description_blocks as dicts""" + client = self.sync_client + + create_response = client.slackLists_create( + name="Test Sales Pipeline", + description_blocks=[ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [{"type": "text", "text": "This is a test list for integration testing"}], + } + ], + } + ], + schema=[ + {"key": "deal_name", "name": "Deal Name", "type": "text", "is_primary_column": True}, + {"key": "amount", "name": "Amount", "type": "number", "options": {"format": "currency", "precision": 2}}, + ], + ) + + self.assertIsNotNone(create_response) + self.assertTrue(create_response["ok"]) + self.assertIn("list", create_response) + list_id = create_response["list"]["id"] + self.logger.info(f"βœ“ Created list with ID: {list_id}") + + def test_create_list_with_rich_text_blocks(self): + """Test creating a list with RichTextBlock objects""" + client = self.sync_client + + create_response = client.slackLists_create( + name="Test List with Rich Text Blocks", + description_blocks=[ + RichTextBlock( + elements=[RichTextSection(elements=[RichTextText(text="Created with RichTextBlock objects!")])] + ) + ], + schema=[{"key": "task_name", "name": "Task", "type": "text", "is_primary_column": True}], + ) + + self.assertIsNotNone(create_response) + self.assertTrue(create_response["ok"]) + list_id = create_response["list"]["id"] + self.logger.info(f"βœ“ Created list with RichTextBlocks, ID: {list_id}") + + @async_test + async def test_create_list_async(self): + """Test creating a list with async client""" + client = self.async_client + + create_response = await client.slackLists_create( + name="Async Test List", schema=[{"key": "item_name", "name": "Item", "type": "text", "is_primary_column": True}] + ) + + self.assertIsNotNone(create_response) + self.assertTrue(create_response["ok"]) + list_id = create_response["list"]["id"] + self.logger.info(f"βœ“ Created list asynchronously, ID: {list_id}") diff --git a/pyproject.toml b/pyproject.toml index 9eb6201b7..37c6f3546 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "slack_sdk" dynamic = ["version", "readme", "authors", "optional-dependencies"] description = "The Slack API Platform SDK for Python" license = { text = "MIT" } -requires-python = ">=3.6" +requires-python = ">=3.7" keywords = [ "slack", "slack-api", @@ -27,7 +27,6 @@ classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", @@ -35,13 +34,14 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", ] [project.urls] -Documentation = "https://slack.dev/python-slack-sdk/" +Documentation = "https://docs.slack.dev/tools/python-slack-sdk/" [tool.setuptools.packages.find] include = ["slack*", "slack_sdk*"] diff --git a/requirements/documentation.txt b/requirements/documentation.txt index 45461e1e3..57304cb53 100644 --- a/requirements/documentation.txt +++ b/requirements/documentation.txt @@ -1,2 +1,2 @@ -docutils==0.21.2 +docutils==0.22.4 pdoc3==0.11.6 diff --git a/requirements/testing.txt b/requirements/testing.txt index c1ccbf9cd..9e1a3fd67 100644 --- a/requirements/testing.txt +++ b/requirements/testing.txt @@ -1,22 +1,14 @@ # pip install -r requirements/testing.txt aiohttp<4 # used for a WebSocket server mock pytest>=7.0.1,<9 -pytest-asyncio<1 # for async -pytest-cov>=2,<7 -# while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, -# so 5.x should be kept in order to stay compatible with Python 3.6/3.7 -flake8>=5.0.4,<8 -# Don't change this version without running CI builds; -# The latest version may not be available for older Python runtime -black>=22.8.0; python_version=="3.6" -black==22.10.0; python_version>"3.6" +pytest-asyncio<2 # for async +pytest-cov>=2,<8 click==8.0.4 # black is affected by https://github.com/pallets/click/issues/2225 psutil>=6.0.0,<8 # used only under slack_sdk/*_store boto3<=2 # For AWS tests moto>=4.0.13,<6 -mypy<=1.15.0 # For AsyncSQLAlchemy tests greenlet<=4 -aiosqlite<=1 \ No newline at end of file +aiosqlite<=1 diff --git a/requirements/tools.txt b/requirements/tools.txt new file mode 100644 index 000000000..39946a86d --- /dev/null +++ b/requirements/tools.txt @@ -0,0 +1,7 @@ +mypy<=1.19.0; +# while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 3.8.1, +# so 5.x should be kept in order to stay compatible with Python 3.7/3.8 +flake8>=5.0.4,<8 +# Don't change this version without running CI builds; +# The latest version may not be available for older Python runtime +black==24.3.0; diff --git a/scripts/build_pypi_package.sh b/scripts/build_pypi_package.sh index e4acb96bb..76b3e8e41 100755 --- a/scripts/build_pypi_package.sh +++ b/scripts/build_pypi_package.sh @@ -5,7 +5,7 @@ cd ${script_dir}/.. rm -rf ./slack_sdk.egg-info pip install -U pip && \ - pip install twine build && \ + pip install -U twine build && \ rm -rf dist/ build/ slack_sdk.egg-info/ && \ python -m build --sdist --wheel && \ twine check dist/* diff --git a/scripts/codegen.py b/scripts/codegen.py index f58de8bd1..3633faf35 100644 --- a/scripts/codegen.py +++ b/scripts/codegen.py @@ -1,5 +1,5 @@ -import sys import argparse +import sys parser = argparse.ArgumentParser() parser.add_argument("-p", "--path", help="Path to the project source code.", type=str) @@ -35,7 +35,6 @@ "from .async_base_client import AsyncBaseClient, AsyncSlackResponse", async_source, ) - # from slack_sdk import WebClient async_source = re.sub( r"class WebClient\(BaseClient\):", "class AsyncWebClient(AsyncBaseClient):", @@ -47,6 +46,28 @@ async_source, ) async_source = re.sub(r"= WebClient\(", "= AsyncWebClient(", async_source) + async_source = re.sub( + "from slack_sdk.web.chat_stream import ChatStream", + "from slack_sdk.web.async_chat_stream import AsyncChatStream", + async_source, + ) + async_source = re.sub(r"ChatStream:", "AsyncChatStream:", async_source) + async_source = re.sub(r"ChatStream\(", "AsyncChatStream(", async_source) + async_source = re.sub( + r" client.chat_stream\(", + " await client.chat_stream(", + async_source, + ) + async_source = re.sub( + r" streamer.append\(", + " await streamer.append(", + async_source, + ) + async_source = re.sub( + r" streamer.stop\(", + " await streamer.stop(", + async_source, + ) async_source = re.sub( r" self.files_getUploadURLExternal\(", " await self.files_getUploadURLExternal(", @@ -98,5 +119,35 @@ legacy_source, ) legacy_source = re.sub(r"= WebClient\(", "= LegacyWebClient(", legacy_source) + legacy_source = re.sub(r"^from slack_sdk.web.chat_stream import ChatStream\n", "", legacy_source, flags=re.MULTILINE) + legacy_source = re.sub(r"(?s)def chat_stream.*?(?=def)", "", legacy_source) with open(f"{args.path}/slack_sdk/web/legacy_client.py", "w") as output: output.write(legacy_source) + +with open(f"{args.path}/slack_sdk/web/chat_stream.py", "r") as original: + source = original.read() + import re + + async_source = header + source + async_source = re.sub( + "from slack_sdk.web.slack_response import SlackResponse", + "from slack_sdk.web.async_slack_response import AsyncSlackResponse", + async_source, + ) + async_source = re.sub( + r"from slack_sdk import WebClient", + "from slack_sdk.web.async_client import AsyncWebClient", + async_source, + ) + async_source = re.sub("class ChatStream", "class AsyncChatStream", async_source) + async_source = re.sub('"WebClient"', '"AsyncWebClient"', async_source) + async_source = re.sub(r"Optional\[SlackResponse\]", "Optional[AsyncSlackResponse]", async_source) + async_source = re.sub(r"SlackResponse ", "AsyncSlackResponse ", async_source) + async_source = re.sub(r"SlackResponse:", "AsyncSlackResponse:", async_source) + async_source = re.sub(r"def append\(", "async def append(", async_source) + async_source = re.sub(r"def stop\(", "async def stop(", async_source) + async_source = re.sub(r"def _flush_buffer\(", "async def _flush_buffer(", async_source) + async_source = re.sub("self._client.chat_", "await self._client.chat_", async_source) + async_source = re.sub("self._flush_buffer", "await self._flush_buffer", async_source) + with open(f"{args.path}/slack_sdk/web/async_chat_stream.py", "w") as output: + output.write(async_source) diff --git a/scripts/deploy_to_prod_pypi_org.sh b/scripts/deploy_to_prod_pypi_org.sh deleted file mode 100755 index 01863545c..000000000 --- a/scripts/deploy_to_prod_pypi_org.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -script_dir=`dirname $0` -cd ${script_dir}/.. -rm -rf ./slack_sdk.egg-info - -pip install -U pip && \ - pip install twine build && \ - rm -rf dist/ build/ slack_sdk.egg-info/ && \ - python -m build --sdist --wheel && \ - twine check dist/* && \ - twine upload dist/* diff --git a/scripts/deploy_to_test_pypi_org.sh b/scripts/deploy_to_test_pypi.sh similarity index 88% rename from scripts/deploy_to_test_pypi_org.sh rename to scripts/deploy_to_test_pypi.sh index 01f6a9818..54ed0e04b 100755 --- a/scripts/deploy_to_test_pypi_org.sh +++ b/scripts/deploy_to_test_pypi.sh @@ -5,7 +5,7 @@ cd ${script_dir}/.. rm -rf ./slack_sdk.egg-info pip install -U pip && \ - pip install twine build && \ + pip install -U twine build && \ rm -rf dist/ build/ slack_sdk.egg-info/ && \ python -m build --sdist --wheel && \ twine check dist/* && \ diff --git a/scripts/format.sh b/scripts/format.sh new file mode 100755 index 000000000..56ca68077 --- /dev/null +++ b/scripts/format.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# ./scripts/format.sh + +script_dir=`dirname $0` +cd ${script_dir}/.. + +if [[ "$1" != "--no-install" ]]; then + export PIP_REQUIRE_VIRTUALENV=1 + pip install -U pip + pip install -U -r requirements/tools.txt +fi + +black slack/ slack_sdk/ tests/ integration_tests/ diff --git a/scripts/generate_api_docs.sh b/scripts/generate_api_docs.sh index 52c86c1e5..c2bb260ab 100755 --- a/scripts/generate_api_docs.sh +++ b/scripts/generate_api_docs.sh @@ -6,6 +6,11 @@ cd ${script_dir}/.. pip install -U -r requirements/documentation.txt pip install -U -r requirements/optional.txt -rm -rf docs/static/api-docs -pdoc slack_sdk --html -o docs/static/api-docs -open docs/static/api-docs/slack_sdk/index.html + +rm -rf docs/reference + +HOME="\$HOME" pdoc slack_sdk --html -o docs/reference +cp -R docs/reference/slack_sdk/* docs/reference/ +rm -rf docs/reference/slack_sdk + +open docs/reference/index.html diff --git a/scripts/lint.sh b/scripts/lint.sh new file mode 100755 index 000000000..8fac67888 --- /dev/null +++ b/scripts/lint.sh @@ -0,0 +1,14 @@ + +#!/bin/bash +# ./scripts/lint.sh + +script_dir=`dirname $0` +cd ${script_dir}/.. + +if [[ "$1" != "--no-install" ]]; then + pip install -U pip + pip install -U -r requirements/tools.txt +fi + +black --check slack/ slack_sdk/ tests/ integration_tests/ +flake8 slack/ slack_sdk/ diff --git a/scripts/run_integration_tests.sh b/scripts/run_integration_tests.sh index 8bf922c7b..1a6f254cb 100755 --- a/scripts/run_integration_tests.sh +++ b/scripts/run_integration_tests.sh @@ -9,11 +9,12 @@ script_dir=`dirname $0` cd ${script_dir}/.. pip install -U pip -pip install -r requirements/testing.txt \ - -r requirements/optional.txt +pip install -U -r requirements/testing.txt \ + -U -r requirements/optional.txt \ + -U -r requirements/tools.txt echo "Generating code ..." && python scripts/codegen.py --path . -echo "Running black (code formatter) ..." && black slack_sdk/ +echo "Running black (code formatter) ..." && ./scripts/format.sh --no-install test_target="${1:-tests/integration_tests/}" PYTHONPATH=$PWD:$PYTHONPATH pytest $test_target diff --git a/scripts/run_mypy.sh b/scripts/run_mypy.sh index e7ffb7970..cc1146f15 100755 --- a/scripts/run_mypy.sh +++ b/scripts/run_mypy.sh @@ -7,7 +7,8 @@ script_dir=$(dirname $0) cd ${script_dir}/.. pip install -U pip setuptools wheel -pip install -r requirements/testing.txt \ - -r requirements/optional.txt +pip install -U -r requirements/testing.txt \ + -U -r requirements/optional.txt \ + -U -r requirements/tools.txt mypy --config-file pyproject.toml diff --git a/scripts/run_unit_tests.sh b/scripts/run_unit_tests.sh index e827dc32a..c8ab0af78 100755 --- a/scripts/run_unit_tests.sh +++ b/scripts/run_unit_tests.sh @@ -9,11 +9,13 @@ script_dir=`dirname $0` cd ${script_dir}/.. pip install -U pip -pip install -r requirements/testing.txt \ - -r requirements/optional.txt +pip install -U -r requirements/testing.txt \ + -U -r requirements/optional.txt \ + -U -r requirements/tools.txt echo "Generating code ..." && python scripts/codegen.py --path . -echo "Running black (code formatter) ..." && black slack_sdk/ +echo "Running black (code formatter) ..." && ./scripts/format.sh --no-install +echo "Running tests ..." test_target="${1:-tests/}" PYTHONPATH=$PWD:$PYTHONPATH pytest $test_target diff --git a/scripts/run_validation.sh b/scripts/run_validation.sh index cbbec0355..366f0d321 100755 --- a/scripts/run_validation.sh +++ b/scripts/run_validation.sh @@ -7,15 +7,15 @@ set -e script_dir=`dirname $0` cd ${script_dir}/.. -pip install -U pip setuptools wheel -pip install -r requirements/testing.txt \ - -r requirements/optional.txt +pip install -U -r requirements/testing.txt \ + -U -r requirements/optional.txt \ + -U -r requirements/tools.txt echo "Generating code ..." && python scripts/codegen.py --path . -echo "Running black (code formatter) ..." && black slack_sdk/ +echo "Running black (code formatter) ..." && ./scripts/format.sh --no-install -black --check slack/ slack_sdk/ tests/ integration_tests/ -flake8 slack/ slack_sdk/ +echo "Running linting checks ..." && ./scripts/lint.sh --no-install +echo "Running tests with coverage reporting ..." test_target="${1:-tests/}" PYTHONPATH=$PWD:$PYTHONPATH pytest --cov-report=xml --cov=slack_sdk/ $test_target diff --git a/scripts/uninstall_all.sh b/scripts/uninstall_all.sh index bf53e7175..71a1e51f6 100755 --- a/scripts/uninstall_all.sh +++ b/scripts/uninstall_all.sh @@ -1,4 +1,10 @@ #!/bin/bash -pip uninstall -y slack-sdk && \ - pip freeze | grep -v "^-e" | sed 's/@.*//' | sed 's/\=\=.*//' | xargs pip uninstall -y +# remove slack-sdk without a version specifier so that local builds are cleaned up +pip uninstall -y slack-sdk +# collect all installed packages +PACKAGES=$(pip freeze | grep -v "^-e" | sed 's/@.*//' | sed 's/\=\=.*//') +# uninstall packages without exiting on a failure +for package in $PACKAGES; do + pip uninstall -y $package +done diff --git a/slack/deprecation.py b/slack/deprecation.py index 6352e66a7..8c5e8207b 100644 --- a/slack/deprecation.py +++ b/slack/deprecation.py @@ -9,6 +9,6 @@ def show_message(old: str, new: str) -> None: message = ( f"{old} package is deprecated. Please use {new} package instead. " - "For more info, go to https://slack.dev/python-slack-sdk/v3-migration/" + "For more info, go to https://docs.slack.dev/tools/python-slack-sdk/v3-migration/" ) warnings.warn(message) diff --git a/slack/signature/verifier.py b/slack/signature/verifier.py index f5923ced8..da9c6ef5e 100644 --- a/slack/signature/verifier.py +++ b/slack/signature/verifier.py @@ -17,7 +17,7 @@ def __init__(self, signing_secret: str, clock: Clock = Clock()): Slack signs its requests using a secret that's unique to your app. With the help of signing secrets, your app can more confidently verify whether requests from us are authentic. - https://api.slack.com/authentication/verifying-requests-from-slack + https://docs.slack.dev/authentication/verifying-requests-from-slack/ """ self.signing_secret = signing_secret self.clock = clock diff --git a/slack/web/async_internal_utils.py b/slack/web/async_internal_utils.py index 10c6c2fdf..1148dc9e7 100644 --- a/slack/web/async_internal_utils.py +++ b/slack/web/async_internal_utils.py @@ -56,7 +56,7 @@ def _get_headers( e.g. { 'Content-Type': 'application/json;charset=utf-8', 'Authorization': 'Bearer xoxb-1234-1243', - 'User-Agent': 'Python/3.6.8 slack/2.1.0 Darwin/17.7.0' + 'User-Agent': 'Python/3.7.17 slack/2.1.0 Darwin/17.7.0' } """ final_headers = { diff --git a/slack/web/base_client.py b/slack/web/base_client.py index dc52a9915..28f597411 100644 --- a/slack/web/base_client.py +++ b/slack/web/base_client.py @@ -472,7 +472,7 @@ def validate_slack_signature(*, signing_secret: str, data: str, timestamp: str, header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/ Args: signing_secret: Your application's signing secret, available in the diff --git a/slack/web/deprecation.py b/slack/web/deprecation.py index 5ce5f067e..059bf149f 100644 --- a/slack/web/deprecation.py +++ b/slack/web/deprecation.py @@ -1,7 +1,7 @@ import os import warnings -# https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api +# https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ deprecated_method_prefixes_2020_01 = [ "channels.", "groups.", @@ -25,6 +25,6 @@ def show_2020_01_deprecation(method_name: str): message = ( f"{method_name} is deprecated. Please use the Conversations API instead. " "For more info, go to " - "https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api" + "https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/" ) warnings.warn(message) diff --git a/slack_sdk/__init__.py b/slack_sdk/__init__.py index cb928798e..b5204e3e3 100644 --- a/slack_sdk/__init__.py +++ b/slack_sdk/__init__.py @@ -1,5 +1,5 @@ """ -* The SDK website: https://slack.dev/python-slack-sdk/ +* The SDK website: https://docs.slack.dev/tools/python-slack-sdk * PyPI package: https://pypi.org/project/slack-sdk/ Here is the list of key modules in this SDK: @@ -37,6 +37,7 @@ * `slack_sdk.scim.v1.async_client` """ + import logging from logging import NullHandler diff --git a/slack_sdk/aiohttp_version_checker.py b/slack_sdk/aiohttp_version_checker.py index 9f4d70fc3..1eff14efa 100644 --- a/slack_sdk/aiohttp_version_checker.py +++ b/slack_sdk/aiohttp_version_checker.py @@ -1,4 +1,5 @@ """Internal module for checking aiohttp compatibility of async modules""" + import logging from typing import Callable diff --git a/slack_sdk/audit_logs/__init__.py b/slack_sdk/audit_logs/__init__.py index 0460ad2eb..f8a7a2a91 100644 --- a/slack_sdk/audit_logs/__init__.py +++ b/slack_sdk/audit_logs/__init__.py @@ -1,7 +1,8 @@ """Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization. -Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ + from .v1.client import AuditLogsClient from .v1.response import AuditLogsResponse diff --git a/slack_sdk/audit_logs/v1/__init__.py b/slack_sdk/audit_logs/v1/__init__.py index 24677fe37..9d03c76ce 100644 --- a/slack_sdk/audit_logs/v1/__init__.py +++ b/slack_sdk/audit_logs/v1/__init__.py @@ -1,4 +1,4 @@ """Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization. -Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ diff --git a/slack_sdk/audit_logs/v1/async_client.py b/slack_sdk/audit_logs/v1/async_client.py index 24e22ec6a..7de8fd5b2 100644 --- a/slack_sdk/audit_logs/v1/async_client.py +++ b/slack_sdk/audit_logs/v1/async_client.py @@ -1,6 +1,6 @@ """Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization. -Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ import json @@ -59,7 +59,7 @@ def __init__( retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` diff --git a/slack_sdk/audit_logs/v1/client.py b/slack_sdk/audit_logs/v1/client.py index b62bf72df..704b872fa 100644 --- a/slack_sdk/audit_logs/v1/client.py +++ b/slack_sdk/audit_logs/v1/client.py @@ -1,6 +1,6 @@ """Audit Logs API is a set of APIs for monitoring what’s happening in your Enterprise Grid organization. -Refer to https://slack.dev/python-slack-sdk/audit-logs/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/audit-logs for details. """ import json @@ -54,7 +54,7 @@ def __init__( retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for Audit Logs API - See https://api.slack.com/admins/audit-logs for more details + See https://docs.slack.dev/admins/audit-logs-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` diff --git a/slack_sdk/models/attachments/__init__.py b/slack_sdk/models/attachments/__init__.py index e516ad35b..85695cfb1 100644 --- a/slack_sdk/models/attachments/__init__.py +++ b/slack_sdk/models/attachments/__init__.py @@ -19,8 +19,8 @@ class Action(JsonObject): """Action in attachments - https://api.slack.com/messaging/composing/layouts#attachments - https://api.slack.com/legacy/interactive-message-field-guide#message_action_fields + https://docs.slack.dev/messaging/formatting-message-text/#rich-layouts + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#message_action_fields """ attributes = {"name", "text", "url"} @@ -66,7 +66,7 @@ def __init__( ): """Simple button for use inside attachments - https://api.slack.com/legacy/message-buttons + https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons/ Args: name: Name this specific action. The name will be returned to your @@ -108,7 +108,7 @@ class ActionLinkButton(Action): def __init__(self, *, text: str, url: str): """A simple interactive button that just opens a URL - https://api.slack.com/messaging/composing/layouts#attachments + https://docs.slack.dev/messaging/formatting-message-text/#rich-layouts Args: text: text to display on the button, eg 'Click Me!" @@ -150,7 +150,7 @@ class ActionUserSelector(AbstractActionSelector): def __init__(self, name: str, text: str, selected_user: Optional[Option] = None): """Automatically populate the selector with a list of users in the workspace. - https://api.slack.com/legacy/message-menus#allow_users_to_select_from_a_list_of_members + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/#menu_team_members Args: name: Name this specific action. The name will be returned to your @@ -172,7 +172,7 @@ def __init__(self, name: str, text: str, selected_channel: Optional[Option] = No Automatically populate the selector with a list of public channels in the workspace. - https://api.slack.com/legacy/message-menus#let_users_choose_one_of_their_workspace_s_channels + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/#menu_channels Args: name: Name this specific action. The name will be returned to your @@ -194,7 +194,7 @@ def __init__(self, name: str, text: str, selected_conversation: Optional[Option] Automatically populate the selector with a list of conversations they have in the workspace. - https://api.slack.com/legacy/message-menus#let_users_choose_one_of_their_conversations + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/#menu_conversations Args: name: Name this specific action. The name will be returned to your @@ -226,7 +226,7 @@ def __init__( """ Populate a message select menu from your own application dynamically. - https://api.slack.com/legacy/message-menus#populate_message_menus_dynamically + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/#menu_dynamic Args: name: Name this specific action. The name will be returned to your @@ -312,7 +312,7 @@ def __init__( A supplemental object that will display after the rest of the message. Considered legacy - recommended replacement is to use message blocks instead. - https://api.slack.com/reference/messaging/attachments#fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#fields Args: text: The main body text of the attachment. It can be formatted as @@ -444,7 +444,7 @@ def __init__( A bridge between legacy attachments and Block Kit formatting - pass a list of Block objects directly to this attachment. - https://api.slack.com/reference/messaging/attachments#fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#fields Args: blocks: a sequence of Block objects @@ -501,8 +501,8 @@ def __init__( An Attachment, but designed to contain interactive Actions Considered legacy - recommended replacement is to use message blocks instead. - https://api.slack.com/legacy/interactive-message-field-guide#attachment_fields - https://api.slack.com/reference/messaging/attachments#fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#attachment_fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#fields Args: actions: A collection of Action objects to include in the attachment. diff --git a/slack_sdk/models/basic_objects.py b/slack_sdk/models/basic_objects.py index 339358790..4feefe3f6 100644 --- a/slack_sdk/models/basic_objects.py +++ b/slack_sdk/models/basic_objects.py @@ -40,6 +40,9 @@ def validate_json(self) -> None: if callable(method) and hasattr(method, "validator"): method() + def get_object_attribute(self, key: str): + return getattr(self, key, None) + def get_non_null_attributes(self) -> dict: """ Construct a dictionary out of non-null keys (from attributes property) @@ -57,7 +60,7 @@ def to_dict_compatible(value: Union[dict, list, object, tuple]) -> Union[dict, l return value def is_not_empty(self, key: str) -> bool: - value = getattr(self, key, None) + value = self.get_object_attribute(key) if value is None: return False @@ -75,7 +78,9 @@ def is_not_empty(self, key: str) -> bool: return value is not None return { - key: to_dict_compatible(getattr(self, key, None)) for key in sorted(self.attributes) if is_not_empty(self, key) + key: to_dict_compatible(value=self.get_object_attribute(key)) + for key in sorted(self.attributes) + if is_not_empty(self, key) } def to_dict(self, *args) -> dict: diff --git a/slack_sdk/models/blocks/__init__.py b/slack_sdk/models/blocks/__init__.py index 96ecfb9e8..d2776a9dc 100644 --- a/slack_sdk/models/blocks/__init__.py +++ b/slack_sdk/models/blocks/__init__.py @@ -2,74 +2,90 @@ To learn more about Block Kit, please check the following resources and tools: -* https://api.slack.com/block-kit -* https://api.slack.com/reference/block-kit/blocks +* https://docs.slack.dev/block-kit/ +* https://docs.slack.dev/reference/block-kit/blocks * https://app.slack.com/block-kit-builder """ -from .basic_components import ButtonStyles -from .basic_components import ConfirmObject -from .basic_components import DynamicSelectElementTypes -from .basic_components import MarkdownTextObject -from .basic_components import Option -from .basic_components import OptionGroup -from .basic_components import PlainTextObject -from .basic_components import TextObject -from .block_elements import BlockElement -from .block_elements import ButtonElement -from .block_elements import ChannelMultiSelectElement -from .block_elements import ChannelSelectElement -from .block_elements import CheckboxesElement -from .block_elements import ConversationFilter -from .block_elements import ConversationMultiSelectElement -from .block_elements import ConversationSelectElement -from .block_elements import DatePickerElement -from .block_elements import TimePickerElement -from .block_elements import DateTimePickerElement -from .block_elements import ExternalDataMultiSelectElement -from .block_elements import ExternalDataSelectElement -from .block_elements import ImageElement -from .block_elements import InputInteractiveElement -from .block_elements import InteractiveElement -from .block_elements import LinkButtonElement -from .block_elements import OverflowMenuElement -from .block_elements import RichTextInputElement -from .block_elements import PlainTextInputElement -from .block_elements import EmailInputElement -from .block_elements import UrlInputElement -from .block_elements import NumberInputElement -from .block_elements import RadioButtonsElement -from .block_elements import SelectElement -from .block_elements import StaticMultiSelectElement -from .block_elements import StaticSelectElement -from .block_elements import UserMultiSelectElement -from .block_elements import UserSelectElement -from .block_elements import RichTextElement -from .block_elements import RichTextElementParts -from .block_elements import RichTextListElement -from .block_elements import RichTextPreformattedElement -from .block_elements import RichTextQuoteElement -from .block_elements import RichTextSectionElement -from .blocks import ActionsBlock -from .blocks import Block -from .blocks import CallBlock -from .blocks import ContextBlock -from .blocks import DividerBlock -from .blocks import FileBlock -from .blocks import HeaderBlock -from .blocks import ImageBlock -from .blocks import InputBlock -from .blocks import SectionBlock -from .blocks import VideoBlock -from .blocks import RichTextBlock + +from .basic_components import ( + ButtonStyles, + ConfirmObject, + DynamicSelectElementTypes, + FeedbackButtonObject, + MarkdownTextObject, + Option, + OptionGroup, + PlainTextObject, + RawTextObject, + TextObject, +) +from .block_elements import ( + BlockElement, + ButtonElement, + ChannelMultiSelectElement, + ChannelSelectElement, + CheckboxesElement, + ConversationFilter, + ConversationMultiSelectElement, + ConversationSelectElement, + DatePickerElement, + DateTimePickerElement, + EmailInputElement, + ExternalDataMultiSelectElement, + ExternalDataSelectElement, + FeedbackButtonsElement, + IconButtonElement, + ImageElement, + InputInteractiveElement, + InteractiveElement, + LinkButtonElement, + NumberInputElement, + OverflowMenuElement, + PlainTextInputElement, + RadioButtonsElement, + RichTextElement, + RichTextElementParts, + RichTextInputElement, + RichTextListElement, + RichTextPreformattedElement, + RichTextQuoteElement, + RichTextSectionElement, + SelectElement, + StaticMultiSelectElement, + StaticSelectElement, + TimePickerElement, + UrlInputElement, + UserMultiSelectElement, + UserSelectElement, +) +from .blocks import ( + ActionsBlock, + Block, + CallBlock, + ContextActionsBlock, + ContextBlock, + DividerBlock, + FileBlock, + HeaderBlock, + ImageBlock, + InputBlock, + MarkdownBlock, + RichTextBlock, + SectionBlock, + TableBlock, + VideoBlock, +) __all__ = [ "ButtonStyles", "ConfirmObject", "DynamicSelectElementTypes", + "FeedbackButtonObject", "MarkdownTextObject", "Option", "OptionGroup", "PlainTextObject", + "RawTextObject", "TextObject", "BlockElement", "ButtonElement", @@ -84,6 +100,8 @@ "DateTimePickerElement", "ExternalDataMultiSelectElement", "ExternalDataSelectElement", + "FeedbackButtonsElement", + "IconButtonElement", "ImageElement", "InputInteractiveElement", "InteractiveElement", @@ -109,13 +127,16 @@ "ActionsBlock", "Block", "CallBlock", + "ContextActionsBlock", "ContextBlock", "DividerBlock", "FileBlock", "HeaderBlock", "ImageBlock", "InputBlock", + "MarkdownBlock", "SectionBlock", + "TableBlock", "VideoBlock", "RichTextBlock", ] diff --git a/slack_sdk/models/blocks/basic_components.py b/slack_sdk/models/blocks/basic_components.py index dcbcf0625..b6e71683a 100644 --- a/slack_sdk/models/blocks/basic_components.py +++ b/slack_sdk/models/blocks/basic_components.py @@ -1,13 +1,10 @@ import copy import logging import warnings -from typing import List, Optional, Set, Union, Sequence, Dict, Any +from typing import Any, Dict, List, Optional, Sequence, Set, Union from slack_sdk.models import show_unknown_key_warning -from slack_sdk.models.basic_objects import ( - JsonObject, - JsonValidator, -) +from slack_sdk.models.basic_objects import JsonObject, JsonValidator from slack_sdk.models.messages import Link ButtonStyles = {"danger", "primary"} @@ -85,7 +82,7 @@ def attributes(self) -> Set[str]: # type: ignore[override] def __init__(self, *, text: str, emoji: Optional[bool] = None): """A plain text object, meaning markdown characters will not be parsed as formatting information. - https://api.slack.com/reference/block-kit/composition-objects#text + https://docs.slack.dev/reference/block-kit/composition-objects/text-object Args: text (required): The text for the block. This field accepts any of the standard text formatting markup @@ -118,7 +115,7 @@ def attributes(self) -> Set[str]: # type: ignore[override] def __init__(self, *, text: str, verbatim: Optional[bool] = None): """A Markdown text object, meaning markdown characters will be parsed as formatting information. - https://api.slack.com/reference/block-kit/composition-objects#text + https://docs.slack.dev/reference/block-kit/composition-objects/text-object Args: text (required): The text for the block. This field accepts any of the standard text formatting markup @@ -160,13 +157,47 @@ def direct_from_link(link: Link, title: str = "") -> Dict[str, Any]: return MarkdownTextObject.from_link(link, title).to_dict() +class RawTextObject(TextObject): + """raw_text typed text object""" + + type = "raw_text" + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return {"text", "type"} + + def __init__(self, *, text: str): + """A raw text object used in table block cells. + https://docs.slack.dev/reference/block-kit/composition-objects/text-object/ + https://docs.slack.dev/reference/block-kit/blocks/table-block + + Args: + text (required): The text content for the table block cell. + """ + super().__init__(text=text, type=self.type) + + @staticmethod + def from_str(text: str) -> "RawTextObject": + """Transforms a string into a RawTextObject""" + return RawTextObject(text=text) + + @staticmethod + def direct_from_string(text: str) -> Dict[str, Any]: + """Transforms a string into the required object shape to act as a RawTextObject""" + return RawTextObject.from_str(text).to_dict() + + @JsonValidator("text attribute must have at least 1 character") + def _validate_text_min_length(self): + return len(self.text) >= 1 + + class Option(JsonObject): """Option object used in dialogs, legacy message actions (interactivity in attachments), and blocks. JSON must be retrieved with an explicit option_type - the Slack API has different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() logger = logging.getLogger(__name__) label_max_length = 75 @@ -188,13 +219,13 @@ def __init__( (StaticDialogSelectElement) Blocks: - https://api.slack.com/reference/block-kit/composition-objects#option + https://docs.slack.dev/reference/block-kit/composition-objects/option-object Dialogs: - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements Legacy interactive attachments: - https://api.slack.com/legacy/interactive-message-field-guide#option_fields + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_fields Args: label: A short, user-facing string to label this option to users. @@ -313,7 +344,7 @@ class OptionGroup(JsonObject): different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() label_max_length = 75 options_max_length = 100 logger = logging.getLogger(__name__) @@ -330,13 +361,13 @@ def __init__( UI) and a list of Option objects. Blocks: - https://api.slack.com/reference/block-kit/composition-objects#option-group + https://docs.slack.dev/reference/block-kit/composition-objects/option-group-object Dialogs: - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements Legacy interactive attachments: - https://api.slack.com/legacy/interactive-message-field-guide#option_groups_to_place_within_message_menu_actions + https://docs.slack.dev/legacy/legacy-messaging/legacy-interactive-message-field-guide/#option_groups Args: label: Text to display at the top of this group of options. @@ -395,7 +426,7 @@ def to_dict(self, option_type: str = "block") -> Dict[str, Any]: class ConfirmObject(JsonObject): - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() title_max_length = 100 text_max_length = 300 @@ -427,7 +458,7 @@ def __init__( An object that defines a dialog that provides a confirmation step to any interactive element. This dialog will ask the user to confirm their action by offering a confirm and deny button. - https://api.slack.com/reference/block-kit/composition-objects#confirm + https://docs.slack.dev/reference/block-kit/composition-objects/confirmation-dialog-object/ """ self._title = TextObject.parse(title, default_type=PlainTextObject.type) self._text = TextObject.parse(text, default_type=MarkdownTextObject.type) @@ -514,7 +545,7 @@ def __init__( ): """ Determines when a plain-text input element will return a block_actions interaction payload. - https://api.slack.com/reference/block-kit/composition-objects#dispatch_action_config + https://docs.slack.dev/reference/block-kit/composition-objects/dispatch-action-configuration-object """ self._trigger_actions_on = trigger_actions_on or [] @@ -526,6 +557,67 @@ def to_dict(self) -> Dict[str, Any]: return json +class FeedbackButtonObject(JsonObject): + attributes: Set[str] = set() + + text_max_length = 75 + value_max_length = 2000 + + @classmethod + def parse(cls, feedback_button: Union["FeedbackButtonObject", Dict[str, Any]]): + if feedback_button: + if isinstance(feedback_button, FeedbackButtonObject): + return feedback_button + elif isinstance(feedback_button, dict): + return FeedbackButtonObject(**feedback_button) + else: + # Not yet implemented: show some warning here + return None + return None + + def __init__( + self, + *, + text: Union[str, Dict[str, Any], PlainTextObject], + accessibility_label: Optional[str] = None, + value: str, + **others: Dict[str, Any], + ): + """ + A feedback button element object for either positive or negative feedback. + https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element#button-object-fields + + Args: + text (required): An object containing some text. Maximum length for this field is 75 characters. + accessibility_label: A label for longer descriptive text about a button element. This label will be read out by + screen readers instead of the button `text` object. + value (required): The button value. Maximum length for this field is 2000 characters. + """ + self._text: Optional[TextObject] = PlainTextObject.parse(text, default_type=PlainTextObject.type) + self._accessibility_label: Optional[str] = accessibility_label + self._value: Optional[str] = value + show_unknown_key_warning(self, others) + + @JsonValidator(f"text attribute cannot exceed {text_max_length} characters") + def text_length(self) -> bool: + return self._text is None or len(self._text.text) <= self.text_max_length + + @JsonValidator(f"value attribute cannot exceed {value_max_length} characters") + def value_length(self) -> bool: + return self._value is None or len(self._value) <= self.value_max_length + + def to_dict(self) -> Dict[str, Any]: + self.validate_json() + json: Dict[str, Union[str, dict]] = {} + if self._text: + json["text"] = self._text.to_dict() + if self._accessibility_label: + json["accessibility_label"] = self._accessibility_label + if self._value: + json["value"] = self._value + return json + + class WorkflowTrigger(JsonObject): attributes = {"trigger"} @@ -571,7 +663,7 @@ def __init__( url: Optional[str] = None, ): """An object containing Slack file information to be used in an image block or image element. - https://api.slack.com/reference/block-kit/composition-objects#slack_file + https://docs.slack.dev/reference/block-kit/composition-objects/slack-file-object Args: id: Slack ID of the file. diff --git a/slack_sdk/models/blocks/block_elements.py b/slack_sdk/models/blocks/block_elements.py index 4f0fc6d2d..89f0a7994 100644 --- a/slack_sdk/models/blocks/block_elements.py +++ b/slack_sdk/models/blocks/block_elements.py @@ -3,23 +3,24 @@ import re import warnings from abc import ABCMeta -from typing import Iterator, List, Optional, Set, Type, Union, Sequence, Dict, Any +from typing import Any, Dict, Iterator, List, Optional, Sequence, Set, Type, Union from slack_sdk.models import show_unknown_key_warning -from slack_sdk.models.basic_objects import ( - JsonObject, - JsonValidator, - EnumValidator, +from slack_sdk.models.basic_objects import EnumValidator, JsonObject, JsonValidator + +from .basic_components import ( + ButtonStyles, + ConfirmObject, + DispatchActionConfig, + FeedbackButtonObject, + MarkdownTextObject, + Option, + OptionGroup, + PlainTextObject, + SlackFile, + TextObject, + Workflow, ) -from .basic_components import ButtonStyles, Workflow, SlackFile -from .basic_components import ConfirmObject -from .basic_components import DispatchActionConfig -from .basic_components import MarkdownTextObject -from .basic_components import Option -from .basic_components import OptionGroup -from .basic_components import PlainTextObject -from .basic_components import TextObject - # ------------------------------------------------- # Block Elements @@ -28,7 +29,7 @@ class BlockElement(JsonObject, metaclass=ABCMeta): """Block Elements are things that exists inside of your Blocks. - https://api.slack.com/reference/block-kit/block-elements + https://docs.slack.dev/reference/block-kit/block-elements/ """ attributes = {"type"} @@ -205,7 +206,7 @@ def __init__( ): """An interactive element that inserts a button. The button can be a trigger for anything from opening a simple link to starting a complex workflow. - https://api.slack.com/reference/block-kit/block-elements#button + https://docs.slack.dev/reference/block-kit/block-elements/button-element/ Args: text (required): A text object that defines the button's text. @@ -277,7 +278,7 @@ def __init__( """A simple button that simply opens a given URL. You will still receive an interaction payload and will need to send an acknowledgement response. This is a helper class that makes creating links simpler. - https://api.slack.com/reference/block-kit/block-elements#button + https://docs.slack.dev/reference/block-kit/block-elements/button-element/ Args: text (required): A text object that defines the button's text. @@ -332,7 +333,7 @@ def __init__( **others: dict, ): """A checkbox group that allows a user to choose multiple items from a list of possible options. - https://api.slack.com/reference/block-kit/block-elements#checkboxes + https://docs.slack.dev/reference/block-kit/block-elements/checkboxes-element/ Args: action_id (required): An identifier for the action triggered when the checkbox group is changed. @@ -384,7 +385,7 @@ def __init__( """ An element which lets users easily select a date from a calendar style UI. Date picker elements can be used inside of SectionBlocks and ActionsBlocks. - https://api.slack.com/reference/block-kit/block-elements#datepicker + https://docs.slack.dev/reference/block-kit/block-elements/date-picker-element Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -447,7 +448,7 @@ def __init__( On desktop clients, this time picker will take the form of a dropdown list with free-text entry for precise choices. On mobile clients, the time picker will use native time picker UIs. - https://api.slack.com/reference/block-kit/block-elements#timepicker + https://docs.slack.dev/reference/block-kit/block-elements/time-picker-element Args: action_id (required): An identifier for the action triggered when a time is selected. @@ -509,7 +510,7 @@ def __init__( date picker will take the form of a dropdown calendar. Both options will have free-text entry for precise choices. On mobile clients, the time picker and date picker will use native UIs. - https://api.slack.com/reference/block-kit/block-elements#datetimepicker + https://docs.slack.dev/reference/block-kit/block-elements/date-picker-element/ Args: action_id (required): An identifier for the action triggered when a time is selected. You can use this @@ -539,6 +540,44 @@ def _validate_initial_date_time_valid(self) -> bool: return self.initial_date_time is None or (0 <= self.initial_date_time <= 9999999999) +# ------------------------------------------------- +# Feedback Buttons Element +# ------------------------------------------------- + + +class FeedbackButtonsElement(InteractiveElement): + type = "feedback_buttons" + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"positive_button", "negative_button"}) + + def __init__( + self, + *, + action_id: Optional[str] = None, + positive_button: Union[dict, FeedbackButtonObject], + negative_button: Union[dict, FeedbackButtonObject], + **others: dict, + ): + """Buttons to indicate positive or negative feedback. + https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element + + Args: + action_id (required): An identifier for this action. + You can use this when you receive an interaction payload to identify the source of the action. + Should be unique among all other action_ids in the containing block. + Maximum length for this field is 255 characters. + positive_button (required): A button to indicate positive feedback. + negative_button (required): A button to indicate negative feedback. + """ + super().__init__(action_id=action_id, type=self.type) + show_unknown_key_warning(self, others) + + self.positive_button = FeedbackButtonObject.parse(positive_button) + self.negative_button = FeedbackButtonObject.parse(negative_button) + + # ------------------------------------------------- # Image # ------------------------------------------------- @@ -564,7 +603,7 @@ def __init__( """An element to insert an image - this element can be used in section and context blocks only. If you want a block with only an image in it, you're looking for the image block. - https://api.slack.com/reference/block-kit/block-elements#image + https://docs.slack.dev/reference/block-kit/block-elements/image-element Args: alt_text (required): A plain-text summary of the image. This should not contain any markup. @@ -587,6 +626,60 @@ def _validate_alt_text_length(self) -> bool: return len(self.alt_text) <= self.alt_text_max_length # type: ignore[arg-type] +# ------------------------------------------------- +# Icon Button Element +# ------------------------------------------------- + + +class IconButtonElement(InteractiveElement): + type = "icon_button" + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"icon", "text", "accessibility_label", "value", "visible_to_user_ids", "confirm"}) + + def __init__( + self, + *, + action_id: Optional[str] = None, + icon: str, + text: Union[str, dict, TextObject], + accessibility_label: Optional[str] = None, + value: Optional[str] = None, + visible_to_user_ids: Optional[List[str]] = None, + confirm: Optional[Union[dict, ConfirmObject]] = None, + **others: dict, + ): + """An icon button to perform actions. + https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element + + Args: + action_id: An identifier for this action. + You can use this when you receive an interaction payload to identify the source of the action. + Should be unique among all other action_ids in the containing block. + Maximum length for this field is 255 characters. + icon (required): The icon to show (e.g., 'trash'). + text (required): Defines an object containing some text. + accessibility_label: A label for longer descriptive text about a button element. + This label will be read out by screen readers instead of the button text object. + Maximum length for this field is 75 characters. + value: The button value. + Maximum length for this field is 2000 characters. + visible_to_user_ids: User IDs for which the icon appears. + Maximum length for this field is 10 user IDs. + confirm: A confirm object that defines an optional confirmation dialog after the button is clicked. + """ + super().__init__(action_id=action_id, type=self.type) + show_unknown_key_warning(self, others) + + self.icon = icon + self.text = TextObject.parse(text, PlainTextObject.type) + self.accessibility_label = accessibility_label + self.value = value + self.visible_to_user_ids = visible_to_user_ids + self.confirm = ConfirmObject.parse(confirm) if confirm else None + + # ------------------------------------------------- # Static Select # ------------------------------------------------- @@ -614,7 +707,7 @@ def __init__( **others: dict, ): """This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#static_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -690,7 +783,7 @@ def __init__( ): """ This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#static_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -768,7 +861,7 @@ def __init__( **others: dict, ): """This is the simplest form of select menu, with a static list of options passed in when defining the element. - https://api.slack.com/reference/block-kit/block-elements#static_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#static_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -846,7 +939,7 @@ def __init__( """ This select menu will load its options from an external data source, allowing for a dynamic list of options. - https://api.slack.com/reference/block-kit/block-elements#external_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#external_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -903,7 +996,7 @@ def __init__( """ This select menu will load its options from an external data source, allowing for a dynamic list of options. - https://api.slack.com/reference/block-kit/block-elements#external_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#external_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -965,7 +1058,7 @@ def __init__( """ This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#users_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element#users_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1013,7 +1106,7 @@ def __init__( """ This select menu will populate its options with a list of Slack users visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#users_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#users_multi_select Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -1061,7 +1154,7 @@ def __init__( ): """Provides a way to filter the list of options in a conversations select menu or conversations multi-select menu. - https://api.slack.com/reference/block-kit/composition-objects#filter_conversations + https://docs.slack.dev/reference/block-kit/composition-objects/conversation-filter-object Args: include: Indicates which type of conversations should be included in the list. @@ -1120,7 +1213,7 @@ def __init__( """ This select menu will populate its options with a list of public and private channels, DMs, and MPIMs visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#conversation_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element/#conversations_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1188,7 +1281,7 @@ def __init__( """ This multi-select menu will populate its options with a list of public and private channels, DMs, and MPIMs visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#conversation_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element/#conversation_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1251,7 +1344,7 @@ def __init__( """ This select menu will populate its options with a list of public channels visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#channel_select + https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element/#channels_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1304,7 +1397,7 @@ def __init__( """ This multi-select menu will populate its options with a list of public channels visible to the current user in the active workspace. - https://api.slack.com/reference/block-kit/block-elements#channel_multi_select + https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element#channel_multi_select Args: placeholder (required): A plain_text only text object that defines the placeholder text shown on the menu. @@ -1413,7 +1506,7 @@ def __init__( where a user can enter freeform data. It can appear as a single-line field or a larger textarea using the multiline flag. Plain-text input elements can be used inside of SectionBlocks and ActionsBlocks. - https://api.slack.com/reference/block-kit/block-elements#input + https://docs.slack.dev/reference/block-kit/block-elements/plain-text-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1477,7 +1570,7 @@ def __init__( **others: dict, ): """ - https://api.slack.com/reference/block-kit/block-elements#email + https://docs.slack.dev/reference/block-kit/block-elements/email-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1534,7 +1627,7 @@ def __init__( """ A URL input element, similar to the Plain-text input element, creates a single line field where a user can enter URL-encoded data. - https://api.slack.com/reference/block-kit/block-elements#url + https://docs.slack.dev/reference/block-kit/block-elements/url-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1595,7 +1688,7 @@ def __init__( **others: dict, ): """ - https://api.slack.com/reference/block-kit/block-elements#number + https://docs.slack.dev/reference/block-kit/block-elements/number-input-element/ Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1655,7 +1748,7 @@ def __init__( **others: dict, ): """ - https://api.slack.com/reference/block-kit/block-elements#file_input + https://docs.slack.dev/reference/block-kit/block-elements/file-input-element Args: action_id (required): An identifier for the input value when the parent modal is submitted. @@ -1701,7 +1794,7 @@ def __init__( **others: dict, ): """A radio button group that allows a user to choose one item from a list of possible options. - https://api.slack.com/reference/block-kit/block-elements#radio + https://docs.slack.dev/reference/block-kit/block-elements/radio-button-group-element Args: action_id (required): An identifier for the action triggered when the radio button group is changed. @@ -1761,7 +1854,7 @@ def __init__( buttons. You can also specify simple URL links as overflow menu options, instead of actions. - https://api.slack.com/reference/block-kit/block-elements#overflow + https://docs.slack.dev/reference/block-kit/block-elements/overflow-menu-element Args: action_id (required): An identifier for the action triggered when a menu option is selected. @@ -1809,7 +1902,7 @@ def __init__( """Allows users to run a link trigger with customizable inputs Interactive component - but interactions with workflow button elements will not send block_actions events, since these are used to start new workflow runs. - https://api.slack.com/reference/block-kit/block-elements#workflow_button + https://docs.slack.dev/reference/block-kit/block-elements/workflow-button-element Args: text (required): A text object that defines the button's text. @@ -1941,11 +2034,13 @@ def __init__( italic: Optional[bool] = None, strike: Optional[bool] = None, code: Optional[bool] = None, + underline: Optional[bool] = None, ): self.bold = bold self.italic = italic self.strike = strike self.code = code + self.underline = underline def to_dict(self, *args) -> dict: result = { @@ -1953,6 +2048,7 @@ def to_dict(self, *args) -> dict: "italic": self.italic, "strike": self.strike, "code": self.code, + "underline": self.underline, } return {k: v for k, v in result.items() if v is not None} diff --git a/slack_sdk/models/blocks/blocks.py b/slack_sdk/models/blocks/blocks.py index 3b39af577..cac463c99 100644 --- a/slack_sdk/models/blocks/blocks.py +++ b/slack_sdk/models/blocks/blocks.py @@ -1,22 +1,22 @@ import copy import logging import warnings -from typing import Dict, Sequence, Optional, Set, Union, Any, List +from typing import Any, Dict, List, Optional, Sequence, Set, Union from slack_sdk.models import show_unknown_key_warning -from slack_sdk.models.basic_objects import ( - JsonObject, - JsonValidator, -) -from .basic_components import MarkdownTextObject, SlackFile -from .basic_components import PlainTextObject -from .basic_components import TextObject -from .block_elements import BlockElement, RichTextElement -from .block_elements import ImageElement -from .block_elements import InputInteractiveElement -from .block_elements import InteractiveElement -from ...errors import SlackObjectFormationError +from slack_sdk.models.basic_objects import JsonObject, JsonValidator +from ...errors import SlackObjectFormationError +from .basic_components import MarkdownTextObject, PlainTextObject, SlackFile, TextObject +from .block_elements import ( + BlockElement, + FeedbackButtonsElement, + IconButtonElement, + ImageElement, + InputInteractiveElement, + InteractiveElement, + RichTextElement, +) # ------------------------------------------------- # Base Classes @@ -26,7 +26,7 @@ class Block(JsonObject): """Blocks are a series of components that can be combined to create visually rich and compellingly interactive messages. - https://api.slack.com/reference/block-kit/blocks + https://docs.slack.dev/reference/block-kit/blocks """ attributes = {"block_id", "type"} @@ -79,6 +79,8 @@ def parse(cls, block: Union[dict, "Block"]) -> Optional["Block"]: return ActionsBlock(**block) elif type == ContextBlock.type: return ContextBlock(**block) + elif type == ContextActionsBlock.type: + return ContextActionsBlock(**block) elif type == InputBlock.type: return InputBlock(**block) elif type == FileBlock.type: @@ -87,10 +89,14 @@ def parse(cls, block: Union[dict, "Block"]) -> Optional["Block"]: return CallBlock(**block) elif type == HeaderBlock.type: return HeaderBlock(**block) + elif type == MarkdownBlock.type: + return MarkdownBlock(**block) elif type == VideoBlock.type: return VideoBlock(**block) elif type == RichTextBlock.type: return RichTextBlock(**block) + elif type == TableBlock.type: + return TableBlock(**block) else: cls.logger.warning(f"Unknown block detected and skipped ({block})") return None @@ -128,7 +134,7 @@ def __init__( **others: dict, ): """A section is one of the most flexible blocks available. - https://api.slack.com/reference/block-kit/blocks#section + https://docs.slack.dev/reference/block-kit/blocks/section-block Args: block_id (required): A string acting as a unique identifier for a block. @@ -196,7 +202,7 @@ def __init__( **others: dict, ): """A content divider, like an
    , to split up different blocks inside of a message. - https://api.slack.com/reference/block-kit/blocks#divider + https://docs.slack.dev/reference/block-kit/blocks/divider-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -231,7 +237,7 @@ def __init__( **others: dict, ): """A simple image block, designed to make those cat photos really pop. - https://api.slack.com/reference/block-kit/blocks#image + https://docs.slack.dev/reference/block-kit/blocks/image-block Args: alt_text (required): A plain-text summary of the image. This should not contain any markup. @@ -298,7 +304,7 @@ def __init__( **others: dict, ): """A block that is used to hold interactive elements. - https://api.slack.com/reference/block-kit/blocks#actions + https://docs.slack.dev/reference/block-kit/blocks/actions-block Args: elements (required): An array of interactive element objects - buttons, select menus, overflow menus, @@ -336,7 +342,7 @@ def __init__( **others: dict, ): """Displays message context, which can include both images and text. - https://api.slack.com/reference/block-kit/blocks#context + https://docs.slack.dev/reference/block-kit/blocks/context-block Args: elements (required): An array of image elements and text objects. Maximum number of items is 10. @@ -355,6 +361,45 @@ def _validate_elements_length(self): return self.elements is None or len(self.elements) <= self.elements_max_length +class ContextActionsBlock(Block): + type = "context_actions" + elements_max_length = 5 + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"elements"}) + + def __init__( + self, + *, + elements: Sequence[Union[dict, FeedbackButtonsElement, IconButtonElement]], + block_id: Optional[str] = None, + **others: dict, + ): + """Displays actions as contextual info, which can include both feedback buttons and icon buttons. + https://docs.slack.dev/reference/block-kit/blocks/context-actions-block + + Args: + elements (required): An array of feedback_buttons or icon_button block elements. Maximum number of items is 5. + block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. + Maximum length for this field is 255 characters. + block_id should be unique for each message and each iteration of a message. + If a message is updated, use a new block_id. + """ + super().__init__(type=self.type, block_id=block_id) + show_unknown_key_warning(self, others) + + self.elements = BlockElement.parse_all(elements) + + @JsonValidator("elements attribute must be specified") + def _validate_elements(self): + return self.elements is None or len(self.elements) > 0 + + @JsonValidator(f"elements attribute cannot exceed {elements_max_length} elements") + def _validate_elements_length(self): + return self.elements is None or len(self.elements) <= self.elements_max_length + + class InputBlock(Block): type = "input" label_max_length = 2000 @@ -377,7 +422,7 @@ def __init__( ): """A block that collects information from users - it can hold a plain-text input element, a select menu element, a multi-select menu element, or a datepicker. - https://api.slack.com/reference/block-kit/blocks#input + https://docs.slack.dev/reference/block-kit/blocks/input-block Args: label (required): A label that appears above an input element in the form of a text object @@ -439,7 +484,7 @@ def __init__( **others: dict, ): """Displays a remote file. - https://api.slack.com/reference/block-kit/blocks#file + https://docs.slack.dev/reference/block-kit/blocks/file-block Args: external_id (required): The external unique ID for this file. @@ -473,7 +518,7 @@ def __init__( **others: dict, ): """Displays a call information - https://api.slack.com/reference/block-kit/blocks#call + https://docs.slack.dev/reference/block-kit/blocks#call """ super().__init__(type=self.type, block_id=block_id) show_unknown_key_warning(self, others) @@ -499,7 +544,7 @@ def __init__( **others: dict, ): """A header is a plain-text block that displays in a larger, bold font. - https://api.slack.com/reference/block-kit/blocks#header + https://docs.slack.dev/reference/block-kit/blocks/header-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -523,6 +568,45 @@ def _validate_alt_text_length(self): return self.text is None or len(self.text.text) <= self.text_max_length +class MarkdownBlock(Block): + type = "markdown" + text_max_length = 12000 + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"text"}) + + def __init__( + self, + *, + text: str, + block_id: Optional[str] = None, + **others: dict, + ): + """Displays formatted markdown. + https://docs.slack.dev/reference/block-kit/blocks/markdown-block/ + + Args: + block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. + Maximum length for this field is 255 characters. + block_id should be unique for each message and each iteration of a message. + If a message is updated, use a new block_id. + text (required): The standard markdown-formatted text. Limit 12,000 characters max. + """ + super().__init__(type=self.type, block_id=block_id) + show_unknown_key_warning(self, others) + + self.text = text + + @JsonValidator("text attribute must be specified") + def _validate_text(self): + return self.text != "" + + @JsonValidator(f"text attribute cannot exceed {text_max_length} characters") + def _validate_alt_text_length(self): + return len(self.text) <= self.text_max_length + + class VideoBlock(Block): type = "video" title_max_length = 200 @@ -563,7 +647,7 @@ def __init__( (e.g. link unfurls, messages, modals, App Home) β€” anywhere you can put blocks! To use the video block within your app, you must have the links.embed:write scope. - https://api.slack.com/reference/block-kit/blocks#video + https://docs.slack.dev/reference/block-kit/blocks/video-block Args: block_id: A string acting as a unique identifier for a block. If not specified, one will be generated. @@ -635,7 +719,7 @@ def __init__( **others: dict, ): """A block that is used to hold interactive elements. - https://api.slack.com/reference/block-kit/blocks#rich_text + https://docs.slack.dev/reference/block-kit/blocks/rich-text-block Args: elements (required): An array of rich text objects - @@ -649,3 +733,47 @@ def __init__( show_unknown_key_warning(self, others) self.elements = BlockElement.parse_all(elements) + + +class TableBlock(Block): + type = "table" + + @property + def attributes(self) -> Set[str]: # type: ignore[override] + return super().attributes.union({"rows", "column_settings"}) + + def __init__( + self, + *, + rows: Sequence[Sequence[Dict[str, Any]]], + column_settings: Optional[Sequence[Optional[Dict[str, Any]]]] = None, + block_id: Optional[str] = None, + **others: dict, + ): + """Displays structured information in a table. + https://docs.slack.dev/reference/block-kit/blocks/table-block + + Args: + rows (required): An array consisting of table rows. Maximum 100 rows. + Each row object is an array with a max of 20 table cells. + Table cells can have a type of raw_text or rich_text. + column_settings: An array describing column behavior. If there are fewer items in the column_settings array + than there are columns in the table, then the items in the the column_settings array will describe + the same number of columns in the table as there are in the array itself. + Any additional columns will have the default behavior. Maximum 20 items. + See below for column settings schema. + block_id: A unique identifier for a block. If not specified, a block_id will be generated. + You can use this block_id when you receive an interaction payload to identify the source of the action. + Maximum length for this field is 255 characters. + block_id should be unique for each message and each iteration of a message. + If a message is updated, use a new block_id. + """ + super().__init__(type=self.type, block_id=block_id) + show_unknown_key_warning(self, others) + + self.rows = rows + self.column_settings = column_settings + + @JsonValidator("rows attribute must be specified") + def _validate_rows(self): + return self.rows is not None and len(self.rows) > 0 diff --git a/slack_sdk/models/dialogs/__init__.py b/slack_sdk/models/dialogs/__init__.py index 51df93060..cc67ed37e 100644 --- a/slack_sdk/models/dialogs/__init__.py +++ b/slack_sdk/models/dialogs/__init__.py @@ -111,7 +111,7 @@ class DialogTextField(DialogTextComponent): """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#text_elements """ type = "text" @@ -125,7 +125,7 @@ class DialogTextArea(DialogTextComponent): answer from users. The element UI provides a remaining character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#textarea_elements """ type = "textarea" @@ -199,7 +199,7 @@ class DialogStaticSelector(AbstractDialogSelector): single item from a list. True to web roots, this selection is displayed as a dropdown menu. - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements """ data_source = "static" @@ -224,7 +224,7 @@ def __init__( A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -277,7 +277,7 @@ def __init__( assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -313,7 +313,7 @@ def __init__( You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -350,7 +350,7 @@ def __init__( private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -395,7 +395,7 @@ def __init__( A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -421,7 +421,7 @@ def __init__( class DialogBuilder(JsonObject): - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementation + attributes: Set[str] = set() _callback_id: Optional[str] _elements: List[Union[DialogTextComponent, AbstractDialogSelector]] @@ -522,7 +522,7 @@ def text_field( """ Text elements are single-line plain text fields. - https://api.slack.com/dialogs#attributes_text_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_text_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -577,7 +577,7 @@ def text_area( character count to the max_length you have set or the default, 3000. - https://api.slack.com/dialogs#attributes_textarea_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_textarea_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -630,7 +630,7 @@ def static_selector( A select element may contain up to 100 selections, provided as a list of Option or OptionGroup objects - https://api.slack.com/dialogs#attributes_select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#attributes_select_elements Args: name: Name of form element. Required. No more than 300 characters. @@ -673,7 +673,7 @@ def external_selector( A list of options can be loaded from an external URL and used in your dialog menus. - https://api.slack.com/dialogs#dynamic_select_elements_external + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_external Args: name: Name of form element. Required. No more than 300 characters. @@ -716,7 +716,7 @@ def user_selector( assignee. Slack pre-populates the user list in client-side, so your app doesn't need access to a related OAuth scope. - https://api.slack.com/dialogs#dynamic_select_elements_users + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_users Args: name: Name of form element. Required. No more than 300 characters. @@ -751,7 +751,7 @@ def channel_selector( You can also provide a select menu with a list of channels. Specify your data_source as channels to limit only to public channels - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -787,7 +787,7 @@ def conversation_selector( private channels, direct messages, MPIMs, and whatever else we consider a conversation-like thing. - https://api.slack.com/dialogs#dynamic_select_elements_channels_conversations + https://docs.slack.dev/legacy/legacy-dialogs/#dynamic_select_elements_channels_conversations Args: name: Name of form element. Required. No more than 300 characters. @@ -858,7 +858,7 @@ class ActionStaticSelector(AbstractActionSelector): single item from a list. True to web roots, this selection is displayed as a dropdown menu. - https://api.slack.com/dialogs#select_elements + https://docs.slack.dev/legacy/legacy-dialogs/#select_elements """ data_source = "static" @@ -877,7 +877,7 @@ def __init__( Help users make clear, concise decisions by providing a menu of options within messages. - https://api.slack.com/docs/message-menus + https://docs.slack.dev/legacy/legacy-messaging/legacy-adding-menus-to-messages/ Args: name: Name this specific action. The name will be returned to your diff --git a/slack_sdk/models/messages/__init__.py b/slack_sdk/models/messages/__init__.py index 610624e1c..47d42ddc6 100644 --- a/slack_sdk/models/messages/__init__.py +++ b/slack_sdk/models/messages/__init__.py @@ -7,7 +7,7 @@ class Link(BaseObject): def __init__(self, *, url: str, text: str): """Base class used to generate links in Slack's not-quite Markdown, not quite HTML syntax - https://api.slack.com/reference/surfaces/formatting#linking_to_urls + https://docs.slack.dev/messaging/formatting-message-text/#linking_to_urls """ self.url = url self.text = text @@ -30,7 +30,7 @@ def __init__( link: Optional[str] = None, ): """Text containing a date or time should display that date in the local timezone of the person seeing the text. - https://api.slack.com/reference/surfaces/formatting#date-formatting + https://docs.slack.dev/messaging/formatting-message-text/#date-formatting """ if isinstance(date, datetime): epoch = int(date.timestamp()) @@ -55,7 +55,7 @@ class ObjectLink(Link): def __init__(self, *, object_id: str, text: str = ""): """Convenience class to create links to specific object types - https://api.slack.com/reference/surfaces/formatting#linking-channels + https://docs.slack.dev/messaging/formatting-message-text/#linking-channels """ prefix = self.prefix_mapping.get(object_id[0].upper(), "@") super().__init__(url=f"{prefix}{object_id}", text=text) @@ -64,7 +64,7 @@ def __init__(self, *, object_id: str, text: str = ""): class ChannelLink(Link): def __init__(self): """Represents an @channel link, which notifies everyone present in this channel. - https://api.slack.com/reference/surfaces/formatting + https://docs.slack.dev/messaging/formatting-message-text/ """ super().__init__(url="!channel", text="channel") @@ -72,7 +72,7 @@ def __init__(self): class HereLink(Link): def __init__(self): """Represents an @here link, which notifies all online users of this channel. - https://api.slack.com/reference/surfaces/formatting + https://docs.slack.dev/messaging/formatting-message-text/ """ super().__init__(url="!here", text="here") @@ -80,6 +80,6 @@ def __init__(self): class EveryoneLink(Link): def __init__(self): """Represents an @everyone link, which notifies all users of this workspace. - https://api.slack.com/reference/surfaces/formatting + https://docs.slack.dev/messaging/formatting-message-text/ """ super().__init__(url="!everyone", text="everyone") diff --git a/slack_sdk/models/messages/message.py b/slack_sdk/models/messages/message.py index 355e3befa..d4744aae7 100644 --- a/slack_sdk/models/messages/message.py +++ b/slack_sdk/models/messages/message.py @@ -35,7 +35,7 @@ def __init__( """ Create a message. - https://api.slack.com/messaging/composing#message-structure + https://docs.slack.dev/messaging/#message-structure Args: text: Plain or Slack Markdown-like text to display in the message. diff --git a/slack_sdk/models/metadata/__init__.py b/slack_sdk/models/metadata/__init__.py index 5a1b7a9e3..7e4918401 100644 --- a/slack_sdk/models/metadata/__init__.py +++ b/slack_sdk/models/metadata/__init__.py @@ -1,11 +1,11 @@ -from typing import Dict, Any -from slack_sdk.models.basic_objects import JsonObject +from typing import Dict, Any, Union, Optional, List +from slack_sdk.models.basic_objects import JsonObject, EnumValidator class Metadata(JsonObject): """Message metadata - https://api.slack.com/metadata + https://docs.slack.dev/messaging/message-metadata/ """ attributes = { @@ -28,3 +28,1228 @@ def __str__(self): def __repr__(self): return self.__str__() + + +# +# Work object entity metadata +# https://docs.slack.dev/messaging/work-objects/ +# + + +"""Entity types""" +EntityType = { + "slack#/entities/task", + "slack#/entities/file", + "slack#/entities/item", + "slack#/entities/incident", + "slack#/entities/content_item", +} + + +"""Custom field types""" +CustomFieldType = { + "integer", + "string", + "array", + "boolean", + "slack#/types/date", + "slack#/types/timestamp", + "slack#/types/image", + "slack#/types/channel_id", + "slack#/types/user", + "slack#/types/entity_ref", + "slack#/types/link", + "slack#/types/email", +} + + +class ExternalRef(JsonObject): + """Reference (and optional type) used to identify an entity within the developer's system""" + + attributes = { + "id", + "type", + } + + def __init__( + self, + id: str, + type: Optional[str] = None, + **kwargs, + ): + self.id = id + self.type = type + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class FileEntitySlackFile(JsonObject): + """Slack file reference for file entities""" + + attributes = { + "id", + "type", + } + + def __init__( + self, + id: str, + type: Optional[str] = None, + **kwargs, + ): + self.id = id + self.type = type + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityIconSlackFile(JsonObject): + """Slack file reference for entity icon""" + + attributes = { + "id", + "url", + } + + def __init__( + self, + id: Optional[str] = None, + url: Optional[str] = None, + **kwargs, + ): + self.id = id + self.url = url + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityIconField(JsonObject): + """Icon field for entity attributes""" + + attributes = { + "alt_text", + "url", + "slack_file", + } + + def __init__( + self, + alt_text: str, + url: Optional[str] = None, + slack_file: Optional[Union[Dict[str, Any], EntityIconSlackFile]] = None, + **kwargs, + ): + self.alt_text = alt_text + self.url = url + self.slack_file = slack_file + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityEditSelectConfig(JsonObject): + """Select configuration for entity edit support""" + + attributes = { + "current_value", + "current_values", + "static_options", + "fetch_options_dynamically", + "min_query_length", + } + + def __init__( + self, + current_value: Optional[str] = None, + current_values: Optional[List[str]] = None, + static_options: Optional[List[Dict[str, Any]]] = None, # Option[] + fetch_options_dynamically: Optional[bool] = None, + min_query_length: Optional[int] = None, + **kwargs, + ): + self.current_value = current_value + self.current_values = current_values + self.static_options = static_options + self.fetch_options_dynamically = fetch_options_dynamically + self.min_query_length = min_query_length + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityEditNumberConfig(JsonObject): + """Number configuration for entity edit support""" + + attributes = { + "is_decimal_allowed", + "min_value", + "max_value", + } + + def __init__( + self, + is_decimal_allowed: Optional[bool] = None, + min_value: Optional[Union[int, float]] = None, + max_value: Optional[Union[int, float]] = None, + **kwargs, + ): + self.is_decimal_allowed = is_decimal_allowed + self.min_value = min_value + self.max_value = max_value + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityEditTextConfig(JsonObject): + """Text configuration for entity edit support""" + + attributes = { + "min_length", + "max_length", + } + + def __init__( + self, + min_length: Optional[int] = None, + max_length: Optional[int] = None, + **kwargs, + ): + self.min_length = min_length + self.max_length = max_length + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityEditSupport(JsonObject): + """Edit support configuration for entity fields""" + + attributes = { + "enabled", + "placeholder", + "hint", + "optional", + "select", + "number", + "text", + } + + def __init__( + self, + enabled: bool, + placeholder: Optional[Dict[str, Any]] = None, # PlainTextElement + hint: Optional[Dict[str, Any]] = None, # PlainTextElement + optional: Optional[bool] = None, + select: Optional[Union[Dict[str, Any], EntityEditSelectConfig]] = None, + number: Optional[Union[Dict[str, Any], EntityEditNumberConfig]] = None, + text: Optional[Union[Dict[str, Any], EntityEditTextConfig]] = None, + **kwargs, + ): + self.enabled = enabled + self.placeholder = placeholder + self.hint = hint + self.optional = optional + self.select = select + self.number = number + self.text = text + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityFullSizePreviewError(JsonObject): + """Error information for full-size preview""" + + attributes = { + "code", + "message", + } + + def __init__( + self, + code: str, + message: Optional[str] = None, + **kwargs, + ): + self.code = code + self.message = message + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityFullSizePreview(JsonObject): + """Full-size preview configuration for entity""" + + attributes = { + "is_supported", + "preview_url", + "mime_type", + "error", + } + + def __init__( + self, + is_supported: bool, + preview_url: Optional[str] = None, + mime_type: Optional[str] = None, + error: Optional[Union[Dict[str, Any], EntityFullSizePreviewError]] = None, + **kwargs, + ): + self.is_supported = is_supported + self.preview_url = preview_url + self.mime_type = mime_type + self.error = error + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityUserIDField(JsonObject): + """User ID field for entity""" + + attributes = { + "user_id", + } + + def __init__( + self, + user_id: str, + **kwargs, + ): + self.user_id = user_id + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityUserField(JsonObject): + """User field for entity""" + + attributes = { + "text", + "url", + "email", + "icon", + } + + def __init__( + self, + text: str, + url: Optional[str] = None, + email: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + **kwargs, + ): + self.text = text + self.url = url + self.email = email + self.icon = icon + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityRefField(JsonObject): + """Entity reference field""" + + attributes = { + "entity_url", + "external_ref", + "title", + "display_type", + "icon", + } + + def __init__( + self, + entity_url: str, + external_ref: Union[Dict[str, Any], ExternalRef], + title: str, + display_type: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + **kwargs, + ): + self.entity_url = entity_url + self.external_ref = external_ref + self.title = title + self.display_type = display_type + self.icon = icon + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityTypedField(JsonObject): + """Typed field for entity with various display options""" + + attributes = { + "type", + "label", + "value", + "link", + "icon", + "long", + "format", + "image_url", + "slack_file", + "alt_text", + "edit", + "tag_color", + "user", + "entity_ref", + } + + def __init__( + self, + type: str, + label: Optional[str] = None, + value: Optional[Union[str, int]] = None, + link: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + long: Optional[bool] = None, + format: Optional[str] = None, + image_url: Optional[str] = None, + slack_file: Optional[Dict[str, Any]] = None, + alt_text: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + tag_color: Optional[str] = None, + user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None, + entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None, + **kwargs, + ): + self.type = type + self.label = label + self.value = value + self.link = link + self.icon = icon + self.long = long + self.format = format + self.image_url = image_url + self.slack_file = slack_file + self.alt_text = alt_text + self.edit = edit + self.tag_color = tag_color + self.user = user + self.entity_ref = entity_ref + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityStringField(JsonObject): + """String field for entity""" + + attributes = { + "value", + "label", + "format", + "link", + "icon", + "long", + "type", + "tag_color", + "edit", + } + + def __init__( + self, + value: str, + label: Optional[str] = None, + format: Optional[str] = None, + link: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + long: Optional[bool] = None, + type: Optional[str] = None, + tag_color: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + **kwargs, + ): + self.value = value + self.label = label + self.format = format + self.link = link + self.icon = icon + self.long = long + self.type = type + self.tag_color = tag_color + self.edit = edit + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityTimestampField(JsonObject): + """Timestamp field for entity""" + + attributes = { + "value", + "label", + "type", + "edit", + } + + def __init__( + self, + value: int, + label: Optional[str] = None, + type: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + **kwargs, + ): + self.value = value + self.label = label + self.type = type + self.edit = edit + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityImageField(JsonObject): + """Image field for entity""" + + attributes = { + "alt_text", + "label", + "image_url", + "slack_file", + "title", + "type", + } + + def __init__( + self, + alt_text: str, + label: Optional[str] = None, + image_url: Optional[str] = None, + slack_file: Optional[Dict[str, Any]] = None, + title: Optional[str] = None, + type: Optional[str] = None, + **kwargs, + ): + self.alt_text = alt_text + self.label = label + self.image_url = image_url + self.slack_file = slack_file + self.title = title + self.type = type + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityBooleanCheckboxField(JsonObject): + """Boolean checkbox properties""" + + attributes = {"type", "text", "description"} + + def __init__( + self, + type: str, + text: str, + description: Optional[str], + **kwargs, + ): + self.type = type + self.text = text + self.description = description + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityBooleanTextField(JsonObject): + """Boolean text properties""" + + attributes = {"type", "true_text", "false_text", "true_description", "false_description"} + + def __init__( + self, + type: str, + true_text: str, + false_text: str, + true_description: Optional[str], + false_description: Optional[str], + **kwargs, + ): + self.type = type + self.true_text = (true_text,) + self.false_text = (false_text,) + self.true_description = (true_description,) + self.false_description = (false_description,) + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityArrayItemField(JsonObject): + """Array item field for entity (similar to EntityTypedField but with optional type)""" + + attributes = { + "type", + "label", + "value", + "link", + "icon", + "long", + "format", + "image_url", + "slack_file", + "alt_text", + "edit", + "tag_color", + "user", + "entity_ref", + } + + def __init__( + self, + type: Optional[str] = None, + label: Optional[str] = None, + value: Optional[Union[str, int]] = None, + link: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + long: Optional[bool] = None, + format: Optional[str] = None, + image_url: Optional[str] = None, + slack_file: Optional[Dict[str, Any]] = None, + alt_text: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + tag_color: Optional[str] = None, + user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None, + entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None, + **kwargs, + ): + self.type = type + self.label = label + self.value = value + self.link = link + self.icon = icon + self.long = long + self.format = format + self.image_url = image_url + self.slack_file = slack_file + self.alt_text = alt_text + self.edit = edit + self.tag_color = tag_color + self.user = user + self.entity_ref = entity_ref + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityCustomField(JsonObject): + """Custom field for entity with flexible types""" + + attributes = { + "label", + "key", + "type", + "value", + "link", + "icon", + "long", + "format", + "image_url", + "slack_file", + "alt_text", + "tag_color", + "edit", + "item_type", + "user", + "entity_ref", + "boolean", + } + + def __init__( + self, + label: str, + key: str, + type: str, + value: Optional[Union[str, int, List[Union[Dict[str, Any], EntityArrayItemField]]]] = None, + link: Optional[str] = None, + icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + long: Optional[bool] = None, + format: Optional[str] = None, + image_url: Optional[str] = None, + slack_file: Optional[Dict[str, Any]] = None, + alt_text: Optional[str] = None, + tag_color: Optional[str] = None, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + item_type: Optional[str] = None, + user: Optional[Union[Dict[str, Any], EntityUserIDField, EntityUserField]] = None, + entity_ref: Optional[Union[Dict[str, Any], EntityRefField]] = None, + boolean: Optional[Union[Dict[str, Any], EntityBooleanCheckboxField, EntityBooleanTextField]] = None, + **kwargs, + ): + self.label = label + self.key = key + self.type = type + self.value = value + self.link = link + self.icon = icon + self.long = long + self.format = format + self.image_url = image_url + self.slack_file = slack_file + self.alt_text = alt_text + self.tag_color = tag_color + self.edit = edit + self.item_type = item_type + self.user = user + self.entity_ref = entity_ref + self.boolean = boolean + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + @EnumValidator("type", CustomFieldType) + def type_valid(self): + return self.type is None or self.type in CustomFieldType + + +class FileEntityFields(JsonObject): + """Fields specific to file entities""" + + attributes = { + "preview", + "created_by", + "date_created", + "date_updated", + "last_modified_by", + "file_size", + "mime_type", + "full_size_preview", + } + + def __init__( + self, + preview: Optional[Union[Dict[str, Any], EntityImageField]] = None, + created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + last_modified_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + file_size: Optional[Union[Dict[str, Any], EntityStringField]] = None, + mime_type: Optional[Union[Dict[str, Any], EntityStringField]] = None, + full_size_preview: Optional[Union[Dict[str, Any], EntityFullSizePreview]] = None, + **kwargs, + ): + self.preview = preview + self.created_by = created_by + self.date_created = date_created + self.date_updated = date_updated + self.last_modified_by = last_modified_by + self.file_size = file_size + self.mime_type = mime_type + self.full_size_preview = full_size_preview + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class TaskEntityFields(JsonObject): + """Fields specific to task entities""" + + attributes = { + "description", + "created_by", + "date_created", + "date_updated", + "assignee", + "status", + "due_date", + "priority", + } + + def __init__( + self, + description: Optional[Union[Dict[str, Any], EntityStringField]] = None, + created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + assignee: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + status: Optional[Union[Dict[str, Any], EntityStringField]] = None, + due_date: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + priority: Optional[Union[Dict[str, Any], EntityStringField]] = None, + **kwargs, + ): + self.description = description + self.created_by = created_by + self.date_created = date_created + self.date_updated = date_updated + self.assignee = assignee + self.status = status + self.due_date = due_date + self.priority = priority + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class IncidentEntityFields(JsonObject): + """Fields specific to incident entities""" + + attributes = { + "status", + "priority", + "urgency", + "created_by", + "assigned_to", + "date_created", + "date_updated", + "description", + "service", + } + + def __init__( + self, + status: Optional[Union[Dict[str, Any], EntityStringField]] = None, + priority: Optional[Union[Dict[str, Any], EntityStringField]] = None, + urgency: Optional[Union[Dict[str, Any], EntityStringField]] = None, + created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + assigned_to: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + description: Optional[Union[Dict[str, Any], EntityStringField]] = None, + service: Optional[Union[Dict[str, Any], EntityStringField]] = None, + **kwargs, + ): + self.status = status + self.priority = priority + self.urgency = urgency + self.created_by = created_by + self.assigned_to = assigned_to + self.date_created = date_created + self.date_updated = date_updated + self.description = description + self.service = service + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class ContentItemEntityFields(JsonObject): + """Fields specific to content item entities""" + + attributes = { + "preview", + "description", + "created_by", + "date_created", + "date_updated", + "last_modified_by", + } + + def __init__( + self, + preview: Optional[Union[Dict[str, Any], EntityImageField]] = None, + description: Optional[Union[Dict[str, Any], EntityStringField]] = None, + created_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + date_created: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + date_updated: Optional[Union[Dict[str, Any], EntityTimestampField]] = None, + last_modified_by: Optional[Union[Dict[str, Any], EntityTypedField]] = None, + **kwargs, + ): + self.preview = preview + self.description = description + self.created_by = created_by + self.date_created = date_created + self.date_updated = date_updated + self.last_modified_by = last_modified_by + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityActionProcessingState(JsonObject): + """Processing state configuration for entity action button""" + + attributes = { + "enabled", + "interstitial_text", + } + + def __init__( + self, + enabled: bool, + interstitial_text: Optional[str] = None, + **kwargs, + ): + self.enabled = enabled + self.interstitial_text = interstitial_text + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityActionButton(JsonObject): + """Action button for entity""" + + attributes = { + "text", + "action_id", + "value", + "style", + "url", + "accessibility_label", + "processing_state", + } + + def __init__( + self, + text: str, + action_id: str, + value: Optional[str] = None, + style: Optional[str] = None, + url: Optional[str] = None, + accessibility_label: Optional[str] = None, + processing_state: Optional[Union[Dict[str, Any], EntityActionProcessingState]] = None, + **kwargs, + ): + self.text = text + self.action_id = action_id + self.value = value + self.style = style + self.url = url + self.accessibility_label = accessibility_label + self.processing_state = processing_state + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityTitle(JsonObject): + """Title for entity attributes""" + + attributes = { + "text", + "edit", + } + + def __init__( + self, + text: str, + edit: Optional[Union[Dict[str, Any], EntityEditSupport]] = None, + **kwargs, + ): + self.text = text + self.edit = edit + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityAttributes(JsonObject): + """Attributes for an entity""" + + attributes = { + "title", + "display_type", + "display_id", + "product_icon", + "product_name", + "locale", + "full_size_preview", + "metadata_last_modified", + } + + def __init__( + self, + title: Union[Dict[str, Any], EntityTitle], + display_type: Optional[str] = None, + display_id: Optional[str] = None, + product_icon: Optional[Union[Dict[str, Any], EntityIconField]] = None, + product_name: Optional[str] = None, + locale: Optional[str] = None, + full_size_preview: Optional[Union[Dict[str, Any], EntityFullSizePreview]] = None, + metadata_last_modified: Optional[int] = None, + **kwargs, + ): + self.title = title + self.display_type = display_type + self.display_id = display_id + self.product_icon = product_icon + self.product_name = product_name + self.locale = locale + self.full_size_preview = full_size_preview + self.metadata_last_modified = metadata_last_modified + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityActions(JsonObject): + """Actions configuration for entity""" + + attributes = { + "primary_actions", + "overflow_actions", + } + + def __init__( + self, + primary_actions: Optional[List[Union[Dict[str, Any], EntityActionButton]]] = None, + overflow_actions: Optional[List[Union[Dict[str, Any], EntityActionButton]]] = None, + **kwargs, + ): + self.primary_actions = primary_actions + self.overflow_actions = overflow_actions + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityPayload(JsonObject): + """Payload schema for an entity""" + + attributes = { + "attributes", + "fields", + "custom_fields", + "slack_file", + "display_order", + "actions", + } + + def __init__( + self, + attributes: Union[Dict[str, Any], EntityAttributes], + fields: Optional[ + Union[Dict[str, Any], ContentItemEntityFields, FileEntityFields, IncidentEntityFields, TaskEntityFields] + ] = None, + custom_fields: Optional[List[Union[Dict[str, Any], EntityCustomField]]] = None, + slack_file: Optional[Union[Dict[str, Any], FileEntitySlackFile]] = None, + display_order: Optional[List[str]] = None, + actions: Optional[Union[Dict[str, Any], EntityActions]] = None, + **kwargs, + ): + # Store entity attributes data with a different internal name to avoid + # shadowing the class-level 'attributes' set used for JSON serialization + self._entity_attributes = attributes + self.fields = fields + self.custom_fields = custom_fields + self.slack_file = slack_file + self.display_order = display_order + self.actions = actions + self.additional_attributes = kwargs + + @property + def entity_attributes(self) -> Union[Dict[str, Any], EntityAttributes]: + """Get the entity attributes data. + + Note: Use this property to access the attributes data. The class-level + 'attributes' is reserved for the JSON serialization schema. + """ + return self._entity_attributes + + @entity_attributes.setter + def entity_attributes(self, value: Union[Dict[str, Any], EntityAttributes]): + """Set the entity attributes data.""" + self._entity_attributes = value + + def get_object_attribute(self, key: str): + if key == "attributes": + return self._entity_attributes + else: + return getattr(self, key, None) + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + +class EntityMetadata(JsonObject): + """Work object entity metadata + + https://docs.slack.dev/messaging/work-objects/ + """ + + attributes = { + "entity_type", + "entity_payload", + "external_ref", + "url", + "app_unfurl_url", + } + + def __init__( + self, + entity_type: str, + entity_payload: Union[Dict[str, Any], EntityPayload], + external_ref: Union[Dict[str, Any], ExternalRef], + url: str, + app_unfurl_url: Optional[str] = None, + **kwargs, + ): + self.entity_type = entity_type + self.entity_payload = entity_payload + self.external_ref = external_ref + self.url = url + self.app_unfurl_url = app_unfurl_url + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() + + @EnumValidator("entity_type", EntityType) + def entity_type_valid(self): + return self.entity_type is None or self.entity_type in EntityType + + +class EventAndEntityMetadata(JsonObject): + """Message metadata with entities + + https://docs.slack.dev/messaging/message-metadata/ + https://docs.slack.dev/messaging/work-objects/ + """ + + attributes = {"event_type", "event_payload", "entities"} + + def __init__( + self, + event_type: Optional[str] = None, + event_payload: Optional[Dict[str, Any]] = None, + entities: Optional[List[Union[Dict[str, Any], EntityMetadata]]] = None, + **kwargs, + ): + self.event_type = event_type + self.event_payload = event_payload + self.entities = entities + self.additional_attributes = kwargs + + def __str__(self): + return str(self.get_non_null_attributes()) + + def __repr__(self): + return self.__str__() diff --git a/slack_sdk/models/views/__init__.py b/slack_sdk/models/views/__init__.py index 5bcc5a691..915f6eade 100644 --- a/slack_sdk/models/views/__init__.py +++ b/slack_sdk/models/views/__init__.py @@ -9,7 +9,7 @@ class View(JsonObject): """View object for modals and Home tabs. - https://api.slack.com/reference/surfaces/views + https://docs.slack.dev/reference/views/ """ types = ["modal", "home", "workflow_step"] diff --git a/slack_sdk/oauth/__init__.py b/slack_sdk/oauth/__init__.py index c16cd4972..a27b606b0 100644 --- a/slack_sdk/oauth/__init__.py +++ b/slack_sdk/oauth/__init__.py @@ -1,7 +1,8 @@ """Modules for implementing the Slack OAuth flow -https://slack.dev/python-slack-sdk/oauth/ +https://docs.slack.dev/tools/python-slack-sdk/oauth """ + from .authorize_url_generator import AuthorizeUrlGenerator from .authorize_url_generator import OpenIDConnectAuthorizeUrlGenerator from .installation_store import InstallationStore diff --git a/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py b/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py index 6c2cccdfe..935d24fe4 100644 --- a/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py +++ b/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py @@ -26,7 +26,7 @@ def __init__(self, installation_store: AsyncInstallationStore): def logger(self) -> Logger: return self.underlying.logger - async def async_save(self, installation: Installation): # type: ignore[explicit-override] + async def async_save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -36,14 +36,14 @@ async def async_save(self, installation: Installation): # type: ignore[explicit self.cached_installations.pop(key) return await self.underlying.async_save(installation) - async def async_save_bot(self, bot: Bot): # type: ignore[explicit-override] + async def async_save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return await self.underlying.async_save_bot(bot) - async def async_find_bot( # type: ignore[explicit-override] + async def async_find_bot( self, *, enterprise_id: Optional[str], @@ -64,7 +64,7 @@ async def async_find_bot( # type: ignore[explicit-override] self.cached_bots[key] = bot return bot - async def async_find_installation( # type: ignore[explicit-override] + async def async_find_installation( self, *, enterprise_id: Optional[str], diff --git a/slack_sdk/oauth/installation_store/cacheable_installation_store.py b/slack_sdk/oauth/installation_store/cacheable_installation_store.py index 506aa2d0b..2455779dd 100644 --- a/slack_sdk/oauth/installation_store/cacheable_installation_store.py +++ b/slack_sdk/oauth/installation_store/cacheable_installation_store.py @@ -24,7 +24,7 @@ def __init__(self, installation_store: InstallationStore): def logger(self) -> Logger: return self.underlying.logger - def save(self, installation: Installation): # type: ignore[explicit-override] + def save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -35,14 +35,14 @@ def save(self, installation: Installation): # type: ignore[explicit-override] return self.underlying.save(installation) - def save_bot(self, bot: Bot): # type: ignore[explicit-override] + def save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return self.underlying.save_bot(bot) - def find_bot( # type: ignore[explicit-override] + def find_bot( self, *, enterprise_id: Optional[str], @@ -63,7 +63,7 @@ def find_bot( # type: ignore[explicit-override] self.cached_bots[key] = bot return bot - def find_installation( # type: ignore[explicit-override] + def find_installation( self, *, enterprise_id: Optional[str], diff --git a/slack_sdk/oauth/installation_store/installation_store.py b/slack_sdk/oauth/installation_store/installation_store.py index 8003ba408..8143d2fb7 100644 --- a/slack_sdk/oauth/installation_store/installation_store.py +++ b/slack_sdk/oauth/installation_store/installation_store.py @@ -1,7 +1,8 @@ """Slack installation data store -Refer to https://slack.dev/python-slack-sdk/oauth/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details. """ + from logging import Logger from typing import Optional diff --git a/slack_sdk/oauth/installation_store/internals.py b/slack_sdk/oauth/installation_store/internals.py index 1c3bfccaf..52eeeb98b 100644 --- a/slack_sdk/oauth/installation_store/internals.py +++ b/slack_sdk/oauth/installation_store/internals.py @@ -1,18 +1,11 @@ -import sys -from datetime import datetime, timezone +from datetime import datetime from typing import Type, TypeVar, Union def _from_iso_format_to_datetime(iso_datetime_str: str) -> datetime: - if sys.version_info[:2] == (3, 6): - format = "%Y-%m-%d %H:%M:%S" - if "." in iso_datetime_str: - format += ".%f" - return datetime.strptime(iso_datetime_str, format).replace(tzinfo=timezone.utc) - else: - if "+" not in iso_datetime_str: - iso_datetime_str += "+00:00" - return datetime.fromisoformat(iso_datetime_str) + if "+" not in iso_datetime_str: + iso_datetime_str += "+00:00" + return datetime.fromisoformat(iso_datetime_str) def _from_iso_format_to_unix_timestamp(iso_datetime_str: str) -> float: diff --git a/slack_sdk/oauth/installation_store/models/bot.py b/slack_sdk/oauth/installation_store/models/bot.py index 52c1dac50..3f2f6de81 100644 --- a/slack_sdk/oauth/installation_store/models/bot.py +++ b/slack_sdk/oauth/installation_store/models/bot.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timezone from time import time from typing import Optional, Union, Dict, Any, Sequence @@ -100,10 +100,12 @@ def _to_standard_value_dict(self) -> Dict[str, Any]: "bot_scopes": ",".join(self.bot_scopes) if self.bot_scopes else None, "bot_refresh_token": self.bot_refresh_token, "bot_token_expires_at": ( - datetime.utcfromtimestamp(self.bot_token_expires_at) if self.bot_token_expires_at is not None else None + datetime.fromtimestamp(self.bot_token_expires_at, tz=timezone.utc) + if self.bot_token_expires_at is not None + else None ), "is_enterprise_install": self.is_enterprise_install, - "installed_at": datetime.utcfromtimestamp(self.installed_at), + "installed_at": datetime.fromtimestamp(self.installed_at, tz=timezone.utc), } def to_dict_for_copying(self) -> Dict[str, Any]: diff --git a/slack_sdk/oauth/installation_store/models/installation.py b/slack_sdk/oauth/installation_store/models/installation.py index 91c6510f2..18ca8e0b1 100644 --- a/slack_sdk/oauth/installation_store/models/installation.py +++ b/slack_sdk/oauth/installation_store/models/installation.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timezone from time import time from typing import Optional, Union, Dict, Any, Sequence @@ -173,14 +173,18 @@ def _to_standard_value_dict(self) -> Dict[str, Any]: "bot_scopes": ",".join(self.bot_scopes) if self.bot_scopes else None, "bot_refresh_token": self.bot_refresh_token, "bot_token_expires_at": ( - datetime.utcfromtimestamp(self.bot_token_expires_at) if self.bot_token_expires_at is not None else None + datetime.fromtimestamp(self.bot_token_expires_at, tz=timezone.utc) + if self.bot_token_expires_at is not None + else None ), "user_id": self.user_id, "user_token": self.user_token, "user_scopes": ",".join(self.user_scopes) if self.user_scopes else None, "user_refresh_token": self.user_refresh_token, "user_token_expires_at": ( - datetime.utcfromtimestamp(self.user_token_expires_at) if self.user_token_expires_at is not None else None + datetime.fromtimestamp(self.user_token_expires_at, tz=timezone.utc) + if self.user_token_expires_at is not None + else None ), "incoming_webhook_url": self.incoming_webhook_url, "incoming_webhook_channel": self.incoming_webhook_channel, @@ -188,7 +192,7 @@ def _to_standard_value_dict(self) -> Dict[str, Any]: "incoming_webhook_configuration_url": self.incoming_webhook_configuration_url, "is_enterprise_install": self.is_enterprise_install, "token_type": self.token_type, - "installed_at": datetime.utcfromtimestamp(self.installed_at), + "installed_at": datetime.fromtimestamp(self.installed_at, tz=timezone.utc), } def to_dict_for_copying(self) -> Dict[str, Any]: diff --git a/slack_sdk/oauth/state_store/__init__.py b/slack_sdk/oauth/state_store/__init__.py index 9c96c2ed2..15491fd1d 100644 --- a/slack_sdk/oauth/state_store/__init__.py +++ b/slack_sdk/oauth/state_store/__init__.py @@ -1,7 +1,8 @@ """OAuth state parameter data store -Refer to https://slack.dev/python-slack-sdk/oauth/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/oauth for details. """ + # from .amazon_s3_state_store import AmazonS3OAuthStateStore from .file import FileOAuthStateStore from .state_store import OAuthStateStore diff --git a/slack_sdk/oauth/state_store/sqlalchemy/__init__.py b/slack_sdk/oauth/state_store/sqlalchemy/__init__.py index b26f642cd..8bb3ec1ff 100644 --- a/slack_sdk/oauth/state_store/sqlalchemy/__init__.py +++ b/slack_sdk/oauth/state_store/sqlalchemy/__init__.py @@ -1,6 +1,6 @@ import logging import time -from datetime import datetime +from datetime import datetime, timezone from logging import Logger from uuid import uuid4 @@ -55,7 +55,7 @@ def logger(self) -> Logger: def issue(self, *args, **kwargs) -> str: state: str = str(uuid4()) - now = datetime.utcfromtimestamp(time.time() + self.expiration_seconds) + now = datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc) with self.engine.begin() as conn: conn.execute( self.oauth_states.insert(), @@ -67,7 +67,7 @@ def consume(self, state: str) -> bool: try: with self.engine.begin() as conn: c = self.oauth_states.c - query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.utcnow())) + query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.now(tz=timezone.utc))) result = conn.execute(query) for row in result.mappings(): self.logger.debug(f"consume's query result: {row}") @@ -124,7 +124,7 @@ def logger(self) -> Logger: async def async_issue(self, *args, **kwargs) -> str: state: str = str(uuid4()) - now = datetime.utcfromtimestamp(time.time() + self.expiration_seconds) + now = datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc) async with self.engine.begin() as conn: await conn.execute( self.oauth_states.insert(), @@ -136,7 +136,7 @@ async def async_consume(self, state: str) -> bool: try: async with self.engine.begin() as conn: c = self.oauth_states.c - query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.utcnow())) + query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.now(tz=timezone.utc))) result = await conn.execute(query) for row in result.mappings(): self.logger.debug(f"consume's query result: {row}") diff --git a/slack_sdk/proxy_env_variable_loader.py b/slack_sdk/proxy_env_variable_loader.py index 848436905..7df080b9b 100644 --- a/slack_sdk/proxy_env_variable_loader.py +++ b/slack_sdk/proxy_env_variable_loader.py @@ -1,4 +1,5 @@ """Internal module for loading proxy-related env variables""" + import logging import os from typing import Optional diff --git a/slack_sdk/rtm_v2/__init__.py b/slack_sdk/rtm_v2/__init__.py index 21f96e347..be059303d 100644 --- a/slack_sdk/rtm_v2/__init__.py +++ b/slack_sdk/rtm_v2/__init__.py @@ -1,4 +1,5 @@ """A Python module for interacting with Slack's RTM API.""" + import inspect import json import logging diff --git a/slack_sdk/scim/__init__.py b/slack_sdk/scim/__init__.py index b9db36556..25ad76109 100644 --- a/slack_sdk/scim/__init__.py +++ b/slack_sdk/scim/__init__.py @@ -2,8 +2,9 @@ SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -Refer to https://slack.dev/python-slack-sdk/scim/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details. """ + from .v1.client import SCIMClient from .v1.response import SCIMResponse from .v1.response import SearchUsersResponse, ReadUserResponse diff --git a/slack_sdk/scim/v1/__init__.py b/slack_sdk/scim/v1/__init__.py index e49bcddb0..2e2842568 100644 --- a/slack_sdk/scim/v1/__init__.py +++ b/slack_sdk/scim/v1/__init__.py @@ -2,5 +2,5 @@ SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -Refer to https://slack.dev/python-slack-sdk/scim/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/scim for details. """ diff --git a/slack_sdk/scim/v1/async_client.py b/slack_sdk/scim/v1/async_client.py index 9386c1716..ad92ac49f 100644 --- a/slack_sdk/scim/v1/async_client.py +++ b/slack_sdk/scim/v1/async_client.py @@ -73,7 +73,7 @@ def __init__( retry_handlers: Optional[List[AsyncRetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` @@ -149,9 +149,9 @@ async def patch_user(self, id: str, partial_user: Union[Dict[str, Any], User]) - await self.api_call( http_verb="PATCH", path=f"Users/{quote(id)}", - body_params=partial_user.to_dict() - if isinstance(partial_user, User) - else _to_dict_without_not_given(partial_user), + body_params=( + partial_user.to_dict() if isinstance(partial_user, User) else _to_dict_without_not_given(partial_user) + ), ) ) @@ -214,9 +214,11 @@ async def patch_group(self, id: str, partial_group: Union[Dict[str, Any], Group] await self.api_call( http_verb="PATCH", path=f"Groups/{quote(id)}", - body_params=partial_group.to_dict() - if isinstance(partial_group, Group) - else _to_dict_without_not_given(partial_group), + body_params=( + partial_group.to_dict() + if isinstance(partial_group, Group) + else _to_dict_without_not_given(partial_group) + ), ) ) diff --git a/slack_sdk/scim/v1/client.py b/slack_sdk/scim/v1/client.py index d9a4c062d..82710c6cc 100644 --- a/slack_sdk/scim/v1/client.py +++ b/slack_sdk/scim/v1/client.py @@ -2,7 +2,7 @@ SCIM is used by Single Sign-On (SSO) services and identity providers to manage people across a variety of tools, including Slack. -Refer to https://slack.dev/python-slack-sdk/scim/ for details. +Refer to https://docs.slack.dev/tools/python-slack-sdk/scim/ for details. """ import json @@ -76,7 +76,7 @@ def __init__( retry_handlers: Optional[List[RetryHandler]] = None, ): """API client for SCIM API - See https://api.slack.com/scim for more details + See https://docs.slack.dev/admins/scim-api/ for more details Args: token: An admin user's token, which starts with `xoxp-` diff --git a/slack_sdk/scim/v1/internal_utils.py b/slack_sdk/scim/v1/internal_utils.py index a07a5b383..cbb90dd72 100644 --- a/slack_sdk/scim/v1/internal_utils.py +++ b/slack_sdk/scim/v1/internal_utils.py @@ -1,7 +1,6 @@ import copy import logging import re -import sys from typing import Dict, Callable from typing import Union, Optional, Any from urllib.parse import quote @@ -43,10 +42,7 @@ def _to_dict_without_not_given(obj: Any) -> dict: def _create_copy(original: Any) -> Any: - if sys.version_info.major == 3 and sys.version_info.minor <= 6: - return copy.copy(original) - else: - return copy.deepcopy(original) + return copy.deepcopy(original) def _to_camel_case_key(key: str) -> str: diff --git a/slack_sdk/signature/__init__.py b/slack_sdk/signature/__init__.py index b9e97953f..aa46e5348 100644 --- a/slack_sdk/signature/__init__.py +++ b/slack_sdk/signature/__init__.py @@ -18,7 +18,7 @@ def __init__(self, signing_secret: str, clock: Clock = Clock()): Slack signs its requests using a secret that's unique to your app. With the help of signing secrets, your app can more confidently verify whether requests from us are authentic. - https://api.slack.com/authentication/verifying-requests-from-slack + https://docs.slack.dev/authentication/verifying-requests-from-slack/ """ self.signing_secret = signing_secret self.clock = clock diff --git a/slack_sdk/socket_mode/__init__.py b/slack_sdk/socket_mode/__init__.py index 4859abf41..b8e1883c1 100644 --- a/slack_sdk/socket_mode/__init__.py +++ b/slack_sdk/socket_mode/__init__.py @@ -2,8 +2,9 @@ You can use slack_sdk.socket_mode.SocketModeClient for managing Socket Mode connections and performing interactions with Slack. -https://api.slack.com/apis/connections/socket +https://docs.slack.dev/apis/events-api/using-socket-mode/ """ + from .builtin import SocketModeClient __all__ = [ diff --git a/slack_sdk/socket_mode/aiohttp/__init__.py b/slack_sdk/socket_mode/aiohttp/__init__.py index fb4bcb113..7fde17752 100644 --- a/slack_sdk/socket_mode/aiohttp/__init__.py +++ b/slack_sdk/socket_mode/aiohttp/__init__.py @@ -1,7 +1,7 @@ """aiohttp based Socket Mode client -* https://api.slack.com/apis/connections/socket -* https://slack.dev/python-slack-sdk/socket-mode/ +* https://docs.slack.dev/apis/events-api/using-socket-mode/ +* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/ * https://pypi.org/project/aiohttp/ """ diff --git a/slack_sdk/socket_mode/builtin/client.py b/slack_sdk/socket_mode/builtin/client.py index c462cf171..be80e0526 100644 --- a/slack_sdk/socket_mode/builtin/client.py +++ b/slack_sdk/socket_mode/builtin/client.py @@ -1,7 +1,7 @@ """The built-in Socket Mode client -* https://api.slack.com/apis/connections/socket -* https://slack.dev/python-slack-sdk/socket-mode/ +* https://docs.slack.dev/apis/events-api/using-socket-mode/ +* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/ """ diff --git a/slack_sdk/socket_mode/builtin/internals.py b/slack_sdk/socket_mode/builtin/internals.py index c4c84e500..7b8365615 100644 --- a/slack_sdk/socket_mode/builtin/internals.py +++ b/slack_sdk/socket_mode/builtin/internals.py @@ -88,7 +88,7 @@ def _establish_new_socket_connection( if status != 200: raise Exception(f"Failed to connect to the proxy (proxy: {proxy}, connect status code: {status})") - sock = ssl_context.wrap_socket( # type: ignore[union-attr] + sock = ssl_context.wrap_socket( sock, do_handshake_on_connect=True, suppress_ragged_eofs=True, @@ -103,7 +103,7 @@ def _establish_new_socket_connection( return sock sock = socket.create_connection((server_hostname, server_port), receive_timeout) - sock = ssl_context.wrap_socket( # type: ignore[union-attr] + sock = ssl_context.wrap_socket( sock, do_handshake_on_connect=True, suppress_ragged_eofs=True, diff --git a/slack_sdk/socket_mode/client.py b/slack_sdk/socket_mode/client.py index ab1147baa..0fa0f9a25 100644 --- a/slack_sdk/socket_mode/client.py +++ b/slack_sdk/socket_mode/client.py @@ -131,7 +131,7 @@ def run_message_listeners(self, message: dict, raw_message: str) -> None: for listener in self.message_listeners: try: - listener(self, message, raw_message) # type: ignore[call-arg, arg-type] + listener(self, message, raw_message) # type: ignore[call-arg, arg-type, misc] except Exception as e: self.logger.exception(f"Failed to run a message listener: {e}") diff --git a/slack_sdk/socket_mode/websocket_client/__init__.py b/slack_sdk/socket_mode/websocket_client/__init__.py index f004a94b1..ae7df4420 100644 --- a/slack_sdk/socket_mode/websocket_client/__init__.py +++ b/slack_sdk/socket_mode/websocket_client/__init__.py @@ -1,7 +1,7 @@ """websocket-client bassd Socket Mode client -* https://api.slack.com/apis/connections/socket -* https://slack.dev/python-slack-sdk/socket-mode/ +* https://docs.slack.dev/apis/events-api/using-socket-mode/ +* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/ * https://pypi.org/project/websocket-client/ """ @@ -11,7 +11,7 @@ from logging import Logger from queue import Queue from threading import Lock -from typing import Union, Optional, List, Callable, Tuple +from typing import Callable, List, Optional, Tuple, Union import websocket from websocket import WebSocketApp, WebSocketException @@ -58,7 +58,7 @@ class SocketModeClient(BaseSocketModeClient): auto_reconnect_enabled: bool default_auto_reconnect_enabled: bool - close: bool # type: ignore[assignment] + closed: bool connect_operation_lock: Lock on_open_listeners: List[Callable[[WebSocketApp], None]] @@ -180,10 +180,10 @@ def on_close( self.current_session = websocket.WebSocketApp( self.wss_uri, - on_open=on_open, # type: ignore[arg-type] - on_message=on_message, # type: ignore[arg-type] - on_error=on_error, # type: ignore[arg-type] - on_close=on_close, # type: ignore[arg-type] + on_open=on_open, + on_message=on_message, + on_error=on_error, + on_close=on_close, ) self.auto_reconnect_enabled = self.default_auto_reconnect_enabled @@ -225,7 +225,7 @@ def send_message(self, message: str) -> None: ) raise e - def close(self) -> None: # type: ignore[explicit-override, no-redef] + def close(self) -> None: self.closed = True self.auto_reconnect_enabled = False self.disconnect() diff --git a/slack_sdk/socket_mode/websockets/__init__.py b/slack_sdk/socket_mode/websockets/__init__.py index b589aae01..eaa00cf65 100644 --- a/slack_sdk/socket_mode/websockets/__init__.py +++ b/slack_sdk/socket_mode/websockets/__init__.py @@ -1,7 +1,7 @@ """websockets bassd Socket Mode client -* https://api.slack.com/apis/connections/socket -* https://slack.dev/python-slack-sdk/socket-mode/ +* https://docs.slack.dev/apis/events-api/using-socket-mode/ +* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/ * https://pypi.org/project/websockets/ """ diff --git a/slack_sdk/version.py b/slack_sdk/version.py index 733292976..fb572e0ba 100644 --- a/slack_sdk/version.py +++ b/slack_sdk/version.py @@ -1,3 +1,3 @@ """Check the latest version at https://pypi.org/project/slack-sdk/""" -__version__ = "3.35.0" +__version__ = "3.39.0" diff --git a/slack_sdk/web/__init__.py b/slack_sdk/web/__init__.py index a3d5ef286..41f3b5a77 100644 --- a/slack_sdk/web/__init__.py +++ b/slack_sdk/web/__init__.py @@ -1,5 +1,6 @@ """The Slack Web API allows you to build applications that interact with Slack in more complex ways than the integrations we provide out of the box.""" + from .client import WebClient from .slack_response import SlackResponse diff --git a/slack_sdk/web/async_chat_stream.py b/slack_sdk/web/async_chat_stream.py new file mode 100644 index 000000000..4661f19dd --- /dev/null +++ b/slack_sdk/web/async_chat_stream.py @@ -0,0 +1,212 @@ +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# +# *** DO NOT EDIT THIS FILE *** +# +# 1) Modify slack_sdk/web/client.py +# 2) Run `python scripts/codegen.py` +# 3) Run `black slack_sdk/` +# +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +import json +import logging +from typing import TYPE_CHECKING, Dict, Optional, Sequence, Union + +import slack_sdk.errors as e +from slack_sdk.models.blocks.blocks import Block +from slack_sdk.models.metadata import Metadata +from slack_sdk.web.async_slack_response import AsyncSlackResponse + +if TYPE_CHECKING: + from slack_sdk.web.async_client import AsyncWebClient + + +class AsyncChatStream: + """A helper class for streaming markdown text into a conversation using the chat streaming APIs. + + This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API + methods, with automatic buffering and state management. + """ + + def __init__( + self, + client: "AsyncWebClient", + *, + channel: str, + logger: logging.Logger, + thread_ts: str, + buffer_size: int, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ): + """Initialize a new ChatStream instance. + + The __init__ method creates a unique ChatStream instance that keeps track of one chat stream. + + Args: + client: The WebClient instance to use for API calls. + channel: An encoded ID that represents a channel, private group, or DM. + logger: A logging channel for outputs. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value + decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits. + **kwargs: Additional arguments passed to the underlying API calls. + """ + self._client = client + self._logger = logger + self._token: Optional[str] = kwargs.pop("token", None) + self._stream_args = { + "channel": channel, + "thread_ts": thread_ts, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + **kwargs, + } + self._buffer = "" + self._state = "starting" + self._stream_ts: Optional[str] = None + self._buffer_size = buffer_size + + async def append( + self, + *, + markdown_text: str, + **kwargs, + ) -> Optional[AsyncSlackResponse]: + """Append to the stream. + + The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream + is stopped this method cannot be called. + + Args: + markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is + what will be appended to the message received so far. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + AsyncSlackResponse if the buffer was flushed, None if buffering. + + Raises: + SlackRequestError: If the stream is already completed. + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + if self._state == "completed": + raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}") + if kwargs.get("token"): + self._token = kwargs.pop("token") + self._buffer += markdown_text + if len(self._buffer) >= self._buffer_size: + return await self._flush_buffer(**kwargs) + details = { + "buffer_length": len(self._buffer), + "buffer_size": self._buffer_size, + "channel": self._stream_args.get("channel"), + "recipient_team_id": self._stream_args.get("recipient_team_id"), + "recipient_user_id": self._stream_args.get("recipient_user_id"), + "thread_ts": self._stream_args.get("thread_ts"), + } + self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}") + return None + + async def stop( + self, + *, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Stop the stream and finalize the message. + + Args: + blocks: A list of blocks that will be rendered at the bottom of the finalized message. + markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is + what will be appended to the message received so far. + metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you + post to Slack is accessible to any app or user who is a member of that workspace. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + AsyncSlackResponse from the chat.stopStream API call. + + Raises: + SlackRequestError: If the stream is already completed. + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + if self._state == "completed": + raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}") + if kwargs.get("token"): + self._token = kwargs.pop("token") + if markdown_text: + self._buffer += markdown_text + if not self._stream_ts: + response = await self._client.chat_startStream( + **self._stream_args, + token=self._token, + ) + if not response.get("ts"): + raise e.SlackRequestError("Failed to stop stream: stream not started") + self._stream_ts = str(response["ts"]) + self._state = "in_progress" + response = await self._client.chat_stopStream( + token=self._token, + channel=self._stream_args["channel"], + ts=self._stream_ts, + blocks=blocks, + markdown_text=self._buffer, + metadata=metadata, + **kwargs, + ) + self._state = "completed" + return response + + async def _flush_buffer(self, **kwargs) -> AsyncSlackResponse: + """Flush the internal buffer by making appropriate API calls.""" + if not self._stream_ts: + response = await self._client.chat_startStream( + **self._stream_args, + token=self._token, + **kwargs, + markdown_text=self._buffer, + ) + self._stream_ts = response.get("ts") + self._state = "in_progress" + else: + response = await self._client.chat_appendStream( + token=self._token, + channel=self._stream_args["channel"], + ts=self._stream_ts, + **kwargs, + markdown_text=self._buffer, + ) + self._buffer = "" + return response diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index dadde5a49..ca163da98 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -14,29 +14,31 @@ import os import warnings from io import IOBase -from typing import Union, Sequence, Optional, Dict, Any, List +from typing import Any, Dict, List, Optional, Sequence, Union import slack_sdk.errors as e from slack_sdk.models.views import View +from slack_sdk.web.async_chat_stream import AsyncChatStream + +from ..models.attachments import Attachment +from ..models.blocks import Block, RichTextBlock +from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .async_base_client import AsyncBaseClient, AsyncSlackResponse from .internal_utils import ( _parse_web_class_objects, - _update_call_participants, - _warn_if_text_or_attachment_fallback_is_missing, + _print_files_upload_v2_suggestion, _remove_none_values, _to_v2_file_upload_item, + _update_call_participants, _validate_for_legacy_client, - _print_files_upload_v2_suggestion, + _warn_if_message_text_content_is_missing, ) -from ..models.attachments import Attachment -from ..models.blocks import Block -from ..models.metadata import Metadata class AsyncWebClient(AsyncBaseClient): """A WebClient allows apps to communicate with the Slack Platform's Web API. - https://api.slack.com/methods + https://docs.slack.dev/reference/methods The Slack Web API is an interface for querying information from and enacting change in a Slack workspace. @@ -107,7 +109,7 @@ async def admin_analytics_getFile( **kwargs, ) -> AsyncSlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -129,7 +131,7 @@ async def admin_apps_approve( Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -156,7 +158,7 @@ async def admin_apps_approved_list( **kwargs, ) -> AsyncSlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -177,7 +179,7 @@ async def admin_apps_clearResolution( **kwargs, ) -> AsyncSlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -197,7 +199,7 @@ async def admin_apps_requests_cancel( **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -217,7 +219,7 @@ async def admin_apps_requests_list( **kwargs, ) -> AsyncSlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -241,7 +243,7 @@ async def admin_apps_restrict( Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -268,7 +270,7 @@ async def admin_apps_restricted_list( **kwargs, ) -> AsyncSlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -290,7 +292,7 @@ async def admin_apps_uninstall( ) -> AsyncSlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -321,7 +323,7 @@ async def admin_apps_activities_list( **kwargs, ) -> AsyncSlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -349,7 +351,7 @@ async def admin_apps_config_lookup( **kwargs, ) -> AsyncSlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -366,7 +368,7 @@ async def admin_apps_config_set( **kwargs, ) -> AsyncSlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -388,7 +390,7 @@ async def admin_auth_policy_getEntities( **kwargs, ) -> AsyncSlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -408,7 +410,7 @@ async def admin_auth_policy_assignEntities( **kwargs, ) -> AsyncSlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -427,7 +429,7 @@ async def admin_auth_policy_removeEntities( **kwargs, ) -> AsyncSlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -437,6 +439,60 @@ async def admin_auth_policy_removeEntities( kwargs.update({"entity_type": entity_type}) return await self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + async def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return await self.api_call("admin.conversations.createForObjects", params=kwargs) + + async def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Link a Salesforce record to a channel. + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return await self.api_call("admin.conversations.linkObjects", params=kwargs) + + async def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> AsyncSlackResponse: + """Unlink a Salesforce record from a channel. + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return await self.api_call("admin.conversations.unlinkObjects", params=kwargs) + async def admin_barriers_create( self, *, @@ -446,7 +502,7 @@ async def admin_barriers_create( **kwargs, ) -> AsyncSlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -466,7 +522,7 @@ async def admin_barriers_delete( **kwargs, ) -> AsyncSlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return await self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -481,7 +537,7 @@ async def admin_barriers_update( **kwargs, ) -> AsyncSlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -502,7 +558,7 @@ async def admin_barriers_list( **kwargs, ) -> AsyncSlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -522,7 +578,7 @@ async def admin_conversations_create( **kwargs, ) -> AsyncSlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -542,7 +598,7 @@ async def admin_conversations_delete( **kwargs, ) -> AsyncSlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.delete", params=kwargs) @@ -555,7 +611,7 @@ async def admin_conversations_invite( **kwargs, ) -> AsyncSlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -572,7 +628,7 @@ async def admin_conversations_archive( **kwargs, ) -> AsyncSlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.archive", params=kwargs) @@ -584,7 +640,7 @@ async def admin_conversations_unarchive( **kwargs, ) -> AsyncSlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.unarchive", params=kwargs) @@ -597,7 +653,7 @@ async def admin_conversations_rename( **kwargs, ) -> AsyncSlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return await self.api_call("admin.conversations.rename", params=kwargs) @@ -615,7 +671,7 @@ async def admin_conversations_search( **kwargs, ) -> AsyncSlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -646,7 +702,7 @@ async def admin_conversations_convertToPrivate( **kwargs, ) -> AsyncSlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -658,7 +714,7 @@ async def admin_conversations_convertToPublic( **kwargs, ) -> AsyncSlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -671,7 +727,7 @@ async def admin_conversations_setConversationPrefs( **kwargs, ) -> AsyncSlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -687,7 +743,7 @@ async def admin_conversations_getConversationPrefs( **kwargs, ) -> AsyncSlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -700,7 +756,7 @@ async def admin_conversations_disconnectShared( **kwargs, ) -> AsyncSlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -720,7 +776,7 @@ async def admin_conversations_lookup( **kwargs, ) -> AsyncSlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -748,7 +804,7 @@ async def admin_conversations_ekm_listOriginalConnectedChannelInfo( """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -775,7 +831,7 @@ async def admin_conversations_restrictAccess_addGroup( **kwargs, ) -> AsyncSlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -798,7 +854,7 @@ async def admin_conversations_restrictAccess_listGroups( **kwargs, ) -> AsyncSlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -821,7 +877,7 @@ async def admin_conversations_restrictAccess_removeGroup( **kwargs, ) -> AsyncSlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -846,7 +902,7 @@ async def admin_conversations_setTeams( **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -870,7 +926,7 @@ async def admin_conversations_getTeams( **kwargs, ) -> AsyncSlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -888,7 +944,7 @@ async def admin_conversations_getCustomRetention( **kwargs, ) -> AsyncSlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -900,7 +956,7 @@ async def admin_conversations_removeCustomRetention( **kwargs, ) -> AsyncSlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return await self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -913,7 +969,7 @@ async def admin_conversations_setCustomRetention( **kwargs, ) -> AsyncSlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return await self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -925,7 +981,7 @@ async def admin_conversations_bulkArchive( **kwargs, ) -> AsyncSlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return await self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -950,7 +1006,7 @@ async def admin_conversations_bulkMove( **kwargs, ) -> AsyncSlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -968,7 +1024,7 @@ async def admin_emoji_add( **kwargs, ) -> AsyncSlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return await self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -981,7 +1037,7 @@ async def admin_emoji_addAlias( **kwargs, ) -> AsyncSlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return await self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -994,7 +1050,7 @@ async def admin_emoji_list( **kwargs, ) -> AsyncSlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1006,7 +1062,7 @@ async def admin_emoji_remove( **kwargs, ) -> AsyncSlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return await self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1019,7 +1075,7 @@ async def admin_emoji_rename( **kwargs, ) -> AsyncSlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return await self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1034,7 +1090,7 @@ async def admin_functions_list( **kwargs, ) -> AsyncSlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1057,7 +1113,7 @@ async def admin_functions_permissions_lookup( ) -> AsyncSlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1075,7 +1131,7 @@ async def admin_functions_permissions_set( ) -> AsyncSlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1099,7 +1155,7 @@ async def admin_roles_addAssignments( **kwargs, ) -> AsyncSlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1124,7 +1180,7 @@ async def admin_roles_listAssignments( ) -> AsyncSlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1146,7 +1202,7 @@ async def admin_roles_removeAssignments( **kwargs, ) -> AsyncSlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1168,7 +1224,7 @@ async def admin_users_session_reset( **kwargs, ) -> AsyncSlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1188,7 +1244,7 @@ async def admin_users_session_resetBulk( **kwargs, ) -> AsyncSlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1210,7 +1266,7 @@ async def admin_users_session_invalidate( **kwargs, ) -> AsyncSlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return await self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1225,7 +1281,7 @@ async def admin_users_session_list( **kwargs, ) -> AsyncSlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1245,7 +1301,7 @@ async def admin_teams_settings_setDefaultChannels( **kwargs, ) -> AsyncSlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1262,7 +1318,7 @@ async def admin_users_session_getSettings( ) -> AsyncSlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1280,7 +1336,7 @@ async def admin_users_session_setSettings( ) -> AsyncSlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1302,7 +1358,7 @@ async def admin_users_session_clearSettings( ) -> AsyncSlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1319,7 +1375,7 @@ async def admin_users_unsupportedVersions_export( ) -> AsyncSlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1337,7 +1393,7 @@ async def admin_inviteRequests_approve( **kwargs, ) -> AsyncSlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1351,7 +1407,7 @@ async def admin_inviteRequests_approved_list( **kwargs, ) -> AsyncSlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1371,7 +1427,7 @@ async def admin_inviteRequests_denied_list( **kwargs, ) -> AsyncSlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1390,7 +1446,7 @@ async def admin_inviteRequests_deny( **kwargs, ) -> AsyncSlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return await self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1411,7 +1467,7 @@ async def admin_teams_admins_list( **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1432,7 +1488,7 @@ async def admin_teams_create( **kwargs, ) -> AsyncSlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1452,7 +1508,7 @@ async def admin_teams_list( **kwargs, ) -> AsyncSlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.list", params=kwargs) @@ -1466,7 +1522,7 @@ async def admin_teams_owners_list( **kwargs, ) -> AsyncSlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return await self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1478,7 +1534,7 @@ async def admin_teams_settings_info( **kwargs, ) -> AsyncSlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return await self.api_call("admin.teams.settings.info", params=kwargs) @@ -1491,7 +1547,7 @@ async def admin_teams_settings_setDescription( **kwargs, ) -> AsyncSlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return await self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1504,7 +1560,7 @@ async def admin_teams_settings_setDiscoverability( **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return await self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1517,7 +1573,7 @@ async def admin_teams_settings_setIcon( **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return await self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1530,7 +1586,7 @@ async def admin_teams_settings_setName( **kwargs, ) -> AsyncSlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return await self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1544,7 +1600,7 @@ async def admin_usergroups_addChannels( **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1562,7 +1618,7 @@ async def admin_usergroups_addTeams( **kwargs, ) -> AsyncSlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1580,7 +1636,7 @@ async def admin_usergroups_listChannels( **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1599,7 +1655,7 @@ async def admin_usergroups_removeChannels( **kwargs, ) -> AsyncSlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1619,7 +1675,7 @@ async def admin_users_assign( **kwargs, ) -> AsyncSlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1651,7 +1707,7 @@ async def admin_users_invite( **kwargs, ) -> AsyncSlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1675,7 +1731,7 @@ async def admin_users_invite( async def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1683,7 +1739,7 @@ async def admin_users_list( **kwargs, ) -> AsyncSlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1704,7 +1760,7 @@ async def admin_users_remove( **kwargs, ) -> AsyncSlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.remove", params=kwargs) @@ -1717,7 +1773,7 @@ async def admin_users_setAdmin( **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setAdmin", params=kwargs) @@ -1731,7 +1787,7 @@ async def admin_users_setExpiration( **kwargs, ) -> AsyncSlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setExpiration", params=kwargs) @@ -1744,7 +1800,7 @@ async def admin_users_setOwner( **kwargs, ) -> AsyncSlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setOwner", params=kwargs) @@ -1757,7 +1813,7 @@ async def admin_users_setRegular( **kwargs, ) -> AsyncSlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return await self.api_call("admin.users.setRegular", params=kwargs) @@ -1778,7 +1834,7 @@ async def admin_workflows_search( **kwargs, ) -> AsyncSlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1808,7 +1864,7 @@ async def admin_workflows_permissions_lookup( **kwargs, ) -> AsyncSlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1829,7 +1885,7 @@ async def admin_workflows_collaborators_add( **kwargs, ) -> AsyncSlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1849,7 +1905,7 @@ async def admin_workflows_collaborators_remove( **kwargs, ) -> AsyncSlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1868,7 +1924,7 @@ async def admin_workflows_unpublish( **kwargs, ) -> AsyncSlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1883,7 +1939,7 @@ async def api_test( **kwargs, ) -> AsyncSlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return await self.api_call("api.test", params=kwargs) @@ -1896,7 +1952,7 @@ async def apps_connections_open( ) -> AsyncSlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return await self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1911,7 +1967,7 @@ async def apps_event_authorizations_list( ) -> AsyncSlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return await self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1924,7 +1980,7 @@ async def apps_uninstall( **kwargs, ) -> AsyncSlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return await self.api_call("apps.uninstall", params=kwargs) @@ -1936,7 +1992,7 @@ async def apps_manifest_create( **kwargs, ) -> AsyncSlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1951,7 +2007,7 @@ async def apps_manifest_delete( **kwargs, ) -> AsyncSlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.delete", params=kwargs) @@ -1963,7 +2019,7 @@ async def apps_manifest_export( **kwargs, ) -> AsyncSlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return await self.api_call("apps.manifest.export", params=kwargs) @@ -1976,7 +2032,7 @@ async def apps_manifest_update( **kwargs, ) -> AsyncSlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1993,7 +2049,7 @@ async def apps_manifest_validate( **kwargs, ) -> AsyncSlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2009,7 +2065,7 @@ async def tooling_tokens_rotate( **kwargs, ) -> AsyncSlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return await self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2020,13 +2076,17 @@ async def assistant_threads_setStatus( channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return await self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("assistant.threads.setStatus", json=kwargs) async def assistant_threads_setTitle( self, @@ -2036,8 +2096,8 @@ async def assistant_threads_setTitle( title: str, **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return await self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2051,8 +2111,8 @@ async def assistant_threads_setSuggestedPrompts( prompts: List[Dict[str, str]], **kwargs, ) -> AsyncSlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2066,7 +2126,7 @@ async def auth_revoke( **kwargs, ) -> AsyncSlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return await self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2076,7 +2136,7 @@ async def auth_test( **kwargs, ) -> AsyncSlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return await self.api_call("auth.test", params=kwargs) @@ -2088,7 +2148,7 @@ async def auth_teams_list( **kwargs, ) -> AsyncSlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return await self.api_call("auth.teams.list", params=kwargs) @@ -2106,7 +2166,7 @@ async def bookmarks_add( **kwargs, ) -> AsyncSlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2132,7 +2192,7 @@ async def bookmarks_edit( **kwargs, ) -> AsyncSlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2152,7 +2212,7 @@ async def bookmarks_list( **kwargs, ) -> AsyncSlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return await self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2165,7 +2225,7 @@ async def bookmarks_remove( **kwargs, ) -> AsyncSlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return await self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2178,7 +2238,7 @@ async def bots_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return await self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2197,7 +2257,7 @@ async def calls_add( **kwargs, ) -> AsyncSlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2224,7 +2284,7 @@ async def calls_end( **kwargs, ) -> AsyncSlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return await self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2236,7 +2296,7 @@ async def calls_info( **kwargs, ) -> AsyncSlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return await self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2249,7 +2309,7 @@ async def calls_participants_add( **kwargs, ) -> AsyncSlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2263,7 +2323,7 @@ async def calls_participants_remove( **kwargs, ) -> AsyncSlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2279,7 +2339,7 @@ async def calls_update( **kwargs, ) -> AsyncSlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2299,7 +2359,7 @@ async def canvases_create( **kwargs, ) -> AsyncSlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return await self.api_call("canvases.create", json=kwargs) @@ -2312,7 +2372,7 @@ async def canvases_edit( **kwargs, ) -> AsyncSlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return await self.api_call("canvases.edit", json=kwargs) @@ -2324,7 +2384,7 @@ async def canvases_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return await self.api_call("canvases.delete", params=kwargs) @@ -2339,7 +2399,7 @@ async def canvases_access_set( **kwargs, ) -> AsyncSlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2364,7 +2424,7 @@ async def canvases_access_delete( **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2387,7 +2447,7 @@ async def canvases_sections_lookup( **kwargs, ) -> AsyncSlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return await self.api_call("canvases.sections.lookup", params=kwargs) @@ -2395,7 +2455,7 @@ async def canvases_sections_lookup( # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def channels_archive( @@ -2565,6 +2625,27 @@ async def channels_unarchive( # -------------------------- + async def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> AsyncSlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.appendStream", json=kwargs) + async def chat_delete( self, *, @@ -2574,7 +2655,7 @@ async def chat_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return await self.api_call("chat.delete", params=kwargs) @@ -2588,7 +2669,7 @@ async def chat_deleteScheduledMessage( **kwargs, ) -> AsyncSlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2607,7 +2688,7 @@ async def chat_getPermalink( **kwargs, ) -> AsyncSlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return await self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2620,7 +2701,7 @@ async def chat_meMessage( **kwargs, ) -> AsyncSlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return await self.api_call("chat.meMessage", params=kwargs) @@ -2640,10 +2721,11 @@ async def chat_postEphemeral( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2659,11 +2741,12 @@ async def chat_postEphemeral( "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postEphemeral", json=kwargs) @@ -2686,11 +2769,12 @@ async def chat_postMessage( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2711,11 +2795,12 @@ async def chat_postMessage( "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postMessage", json=kwargs) @@ -2724,7 +2809,7 @@ async def chat_scheduleMessage( *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2735,10 +2820,11 @@ async def chat_scheduleMessage( unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2755,14 +2841,155 @@ async def chat_scheduleMessage( "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs) + async def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return await self.api_call("chat.scheduledMessages.list", params=kwargs) + + async def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.startStream", json=kwargs) + + async def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return await self.api_call("chat.stopStream", json=kwargs) + + async def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> AsyncChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = await client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + await streamer.append(markdown_text="**hello wo") + await streamer.append(markdown_text="rld!**") + await streamer.stop() + ``` + """ + return AsyncChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + async def chat_unfurl( self, *, @@ -2771,6 +2998,7 @@ async def chat_unfurl( source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2778,7 +3006,7 @@ async def chat_unfurl( **kwargs, ) -> AsyncSlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2787,6 +3015,7 @@ async def chat_unfurl( "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -2812,10 +3041,11 @@ async def chat_update( parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2829,6 +3059,7 @@ async def chat_update( "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2837,36 +3068,10 @@ async def chat_update( kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs) - async def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> AsyncSlackResponse: - """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return await self.api_call("chat.scheduledMessages.list", params=kwargs) - async def conversations_acceptSharedInvite( self, *, @@ -2879,7 +3084,7 @@ async def conversations_acceptSharedInvite( **kwargs, ) -> AsyncSlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2903,7 +3108,7 @@ async def conversations_approveSharedInvite( **kwargs, ) -> AsyncSlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2915,7 +3120,7 @@ async def conversations_archive( **kwargs, ) -> AsyncSlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.archive", params=kwargs) @@ -2927,7 +3132,7 @@ async def conversations_close( **kwargs, ) -> AsyncSlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return await self.api_call("conversations.close", params=kwargs) @@ -2941,7 +3146,7 @@ async def conversations_create( **kwargs, ) -> AsyncSlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return await self.api_call("conversations.create", params=kwargs) @@ -2954,7 +3159,7 @@ async def conversations_declineSharedInvite( **kwargs, ) -> AsyncSlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return await self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -2963,7 +3168,7 @@ async def conversations_externalInvitePermissions_set( self, *, action: str, channel: str, target_team: str, **kwargs ) -> AsyncSlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -2987,7 +3192,7 @@ async def conversations_history( **kwargs, ) -> AsyncSlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3011,7 +3216,7 @@ async def conversations_info( **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3031,7 +3236,7 @@ async def conversations_invite( **kwargs, ) -> AsyncSlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3054,7 +3259,7 @@ async def conversations_inviteShared( **kwargs, ) -> AsyncSlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3076,7 +3281,7 @@ async def conversations_join( **kwargs, ) -> AsyncSlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return await self.api_call("conversations.join", params=kwargs) @@ -3089,7 +3294,7 @@ async def conversations_kick( **kwargs, ) -> AsyncSlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return await self.api_call("conversations.kick", params=kwargs) @@ -3101,7 +3306,7 @@ async def conversations_leave( **kwargs, ) -> AsyncSlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return await self.api_call("conversations.leave", params=kwargs) @@ -3117,7 +3322,7 @@ async def conversations_list( **kwargs, ) -> AsyncSlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3143,7 +3348,7 @@ async def conversations_listConnectInvites( ) -> AsyncSlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return await self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3156,7 +3361,7 @@ async def conversations_mark( **kwargs, ) -> AsyncSlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return await self.api_call("conversations.mark", params=kwargs) @@ -3170,7 +3375,7 @@ async def conversations_members( **kwargs, ) -> AsyncSlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return await self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3184,7 +3389,7 @@ async def conversations_open( **kwargs, ) -> AsyncSlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3203,7 +3408,7 @@ async def conversations_rename( **kwargs, ) -> AsyncSlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return await self.api_call("conversations.rename", params=kwargs) @@ -3222,7 +3427,7 @@ async def conversations_replies( **kwargs, ) -> AsyncSlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3248,7 +3453,7 @@ async def conversations_requestSharedInvite_approve( **kwargs, ) -> AsyncSlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3269,7 +3474,7 @@ async def conversations_requestSharedInvite_deny( **kwargs, ) -> AsyncSlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return await self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3287,7 +3492,7 @@ async def conversations_requestSharedInvite_list( **kwargs, ) -> AsyncSlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3314,7 +3519,7 @@ async def conversations_setPurpose( **kwargs, ) -> AsyncSlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return await self.api_call("conversations.setPurpose", params=kwargs) @@ -3327,7 +3532,7 @@ async def conversations_setTopic( **kwargs, ) -> AsyncSlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return await self.api_call("conversations.setTopic", params=kwargs) @@ -3339,7 +3544,7 @@ async def conversations_unarchive( **kwargs, ) -> AsyncSlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return await self.api_call("conversations.unarchive", params=kwargs) @@ -3352,7 +3557,7 @@ async def conversations_canvases_create( **kwargs, ) -> AsyncSlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return await self.api_call("conversations.canvases.create", json=kwargs) @@ -3365,7 +3570,7 @@ async def dialog_open( **kwargs, ) -> AsyncSlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3377,7 +3582,7 @@ async def dnd_endDnd( **kwargs, ) -> AsyncSlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return await self.api_call("dnd.endDnd", params=kwargs) @@ -3386,7 +3591,7 @@ async def dnd_endSnooze( **kwargs, ) -> AsyncSlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return await self.api_call("dnd.endSnooze", params=kwargs) @@ -3398,7 +3603,7 @@ async def dnd_info( **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3410,7 +3615,7 @@ async def dnd_setSnooze( **kwargs, ) -> AsyncSlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return await self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3422,7 +3627,7 @@ async def dnd_teamInfo( **kwargs, ) -> AsyncSlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3437,11 +3642,35 @@ async def emoji_list( **kwargs, ) -> AsyncSlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return await self.api_call("emoji.list", http_verb="GET", params=kwargs) + async def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return await self.api_call("entity.presentDetails", json=kwargs) + async def files_comments_delete( self, *, @@ -3450,7 +3679,7 @@ async def files_comments_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return await self.api_call("files.comments.delete", params=kwargs) @@ -3462,7 +3691,7 @@ async def files_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return await self.api_call("files.delete", params=kwargs) @@ -3478,7 +3707,7 @@ async def files_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3506,7 +3735,7 @@ async def files_list( **kwargs, ) -> AsyncSlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3534,7 +3763,7 @@ async def files_remote_info( **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3550,7 +3779,7 @@ async def files_remote_list( **kwargs, ) -> AsyncSlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3575,7 +3804,7 @@ async def files_remote_add( **kwargs, ) -> AsyncSlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3614,7 +3843,7 @@ async def files_remote_update( **kwargs, ) -> AsyncSlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3649,7 +3878,7 @@ async def files_remote_remove( **kwargs, ) -> AsyncSlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return await self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3663,7 +3892,7 @@ async def files_remote_share( **kwargs, ) -> AsyncSlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3681,7 +3910,7 @@ async def files_revokePublicURL( **kwargs, ) -> AsyncSlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return await self.api_call("files.revokePublicURL", params=kwargs) @@ -3693,7 +3922,7 @@ async def files_sharedPublicURL( **kwargs, ) -> AsyncSlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return await self.api_call("files.sharedPublicURL", params=kwargs) @@ -3712,7 +3941,7 @@ async def files_upload( **kwargs, ) -> AsyncSlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3765,12 +3994,12 @@ async def files_upload_v2( ) -> AsyncSlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3856,7 +4085,7 @@ async def files_getUploadURLExternal( **kwargs, ) -> AsyncSlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3879,7 +4108,7 @@ async def files_completeUploadExternal( **kwargs, ) -> AsyncSlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3902,7 +4131,7 @@ async def functions_completeSuccess( **kwargs, ) -> AsyncSlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return await self.api_call("functions.completeSuccess", params=kwargs) @@ -3915,7 +4144,7 @@ async def functions_completeError( **kwargs, ) -> AsyncSlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return await self.api_call("functions.completeError", params=kwargs) @@ -3923,7 +4152,7 @@ async def functions_completeError( # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def groups_archive( @@ -4104,7 +4333,7 @@ async def groups_unarchive( # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def im_close( @@ -4180,7 +4409,7 @@ async def migration_exchange( **kwargs, ) -> AsyncSlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4192,7 +4421,7 @@ async def migration_exchange( # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- async def mpim_close( @@ -4279,7 +4508,7 @@ async def oauth_v2_access( **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4305,7 +4534,7 @@ async def oauth_access( **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4325,7 +4554,7 @@ async def oauth_v2_exchange( **kwargs, ) -> AsyncSlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return await self.api_call("oauth.v2.exchange", params=kwargs) @@ -4341,7 +4570,7 @@ async def openid_connect_token( **kwargs, ) -> AsyncSlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4362,7 +4591,7 @@ async def openid_connect_userInfo( **kwargs, ) -> AsyncSlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return await self.api_call("openid.connect.userInfo", params=kwargs) @@ -4374,7 +4603,7 @@ async def pins_add( **kwargs, ) -> AsyncSlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.add", params=kwargs) @@ -4386,7 +4615,7 @@ async def pins_list( **kwargs, ) -> AsyncSlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return await self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4399,7 +4628,7 @@ async def pins_remove( **kwargs, ) -> AsyncSlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return await self.api_call("pins.remove", params=kwargs) @@ -4413,7 +4642,7 @@ async def reactions_add( **kwargs, ) -> AsyncSlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return await self.api_call("reactions.add", params=kwargs) @@ -4429,7 +4658,7 @@ async def reactions_get( **kwargs, ) -> AsyncSlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4455,7 +4684,7 @@ async def reactions_list( **kwargs, ) -> AsyncSlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4481,7 +4710,7 @@ async def reactions_remove( **kwargs, ) -> AsyncSlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4505,7 +4734,7 @@ async def reminders_add( **kwargs, ) -> AsyncSlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4526,7 +4755,7 @@ async def reminders_complete( **kwargs, ) -> AsyncSlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.complete", params=kwargs) @@ -4539,7 +4768,7 @@ async def reminders_delete( **kwargs, ) -> AsyncSlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.delete", params=kwargs) @@ -4552,7 +4781,7 @@ async def reminders_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return await self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4564,7 +4793,7 @@ async def reminders_list( **kwargs, ) -> AsyncSlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return await self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4577,7 +4806,7 @@ async def rtm_connect( **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return await self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4595,7 +4824,7 @@ async def rtm_start( **kwargs, ) -> AsyncSlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4623,7 +4852,7 @@ async def search_all( **kwargs, ) -> AsyncSlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4651,7 +4880,7 @@ async def search_files( **kwargs, ) -> AsyncSlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4680,7 +4909,7 @@ async def search_messages( **kwargs, ) -> AsyncSlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4696,6 +4925,249 @@ async def search_messages( ) return await self.api_call("search.messages", http_verb="GET", params=kwargs) + async def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.access.delete", json=kwargs) + + async def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.access.set", json=kwargs) + + async def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.create", json=kwargs) + + async def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.download.get", json=kwargs) + + async def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.download.start", json=kwargs) + + async def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.create", json=kwargs) + + async def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.delete", json=kwargs) + + async def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> AsyncSlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + async def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.info", json=kwargs) + + async def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.list", json=kwargs) + + async def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> AsyncSlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.items.update", json=kwargs) + + async def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> AsyncSlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return await self.api_call("slackLists.update", json=kwargs) + async def stars_add( self, *, @@ -4706,7 +5178,7 @@ async def stars_add( **kwargs, ) -> AsyncSlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4729,7 +5201,7 @@ async def stars_list( **kwargs, ) -> AsyncSlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4752,7 +5224,7 @@ async def stars_remove( **kwargs, ) -> AsyncSlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4776,7 +5248,7 @@ async def team_accessLogs( **kwargs, ) -> AsyncSlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4798,7 +5270,7 @@ async def team_billableInfo( **kwargs, ) -> AsyncSlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return await self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4808,7 +5280,7 @@ async def team_billing_info( **kwargs, ) -> AsyncSlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return await self.api_call("team.billing.info", params=kwargs) @@ -4819,7 +5291,7 @@ async def team_externalTeams_disconnect( **kwargs, ) -> AsyncSlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4841,7 +5313,7 @@ async def team_externalTeams_list( **kwargs, ) -> AsyncSlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4872,7 +5344,7 @@ async def team_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return await self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4890,7 +5362,7 @@ async def team_integrationLogs( **kwargs, ) -> AsyncSlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4912,7 +5384,7 @@ async def team_profile_get( **kwargs, ) -> AsyncSlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return await self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4922,7 +5394,7 @@ async def team_preferences_list( **kwargs, ) -> AsyncSlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return await self.api_call("team.preferences.list", params=kwargs) @@ -4938,7 +5410,7 @@ async def usergroups_create( **kwargs, ) -> AsyncSlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -4964,7 +5436,7 @@ async def usergroups_disable( **kwargs, ) -> AsyncSlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.disable", params=kwargs) @@ -4978,7 +5450,7 @@ async def usergroups_enable( **kwargs, ) -> AsyncSlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return await self.api_call("usergroups.enable", params=kwargs) @@ -4993,7 +5465,7 @@ async def usergroups_list( **kwargs, ) -> AsyncSlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5018,7 +5490,7 @@ async def usergroups_update( **kwargs, ) -> AsyncSlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5045,7 +5517,7 @@ async def usergroups_users_list( **kwargs, ) -> AsyncSlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5066,7 +5538,7 @@ async def usergroups_users_update( **kwargs, ) -> AsyncSlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5093,7 +5565,7 @@ async def users_conversations( **kwargs, ) -> AsyncSlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5115,7 +5587,7 @@ async def users_deletePhoto( **kwargs, ) -> AsyncSlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return await self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5126,7 +5598,7 @@ async def users_getPresence( **kwargs, ) -> AsyncSlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return await self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5136,7 +5608,7 @@ async def users_identity( **kwargs, ) -> AsyncSlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return await self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5148,7 +5620,7 @@ async def users_info( **kwargs, ) -> AsyncSlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return await self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5163,7 +5635,7 @@ async def users_list( **kwargs, ) -> AsyncSlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5182,7 +5654,7 @@ async def users_lookupByEmail( **kwargs, ) -> AsyncSlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return await self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5197,7 +5669,7 @@ async def users_setPhoto( **kwargs, ) -> AsyncSlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return await self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5209,7 +5681,7 @@ async def users_setPresence( **kwargs, ) -> AsyncSlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return await self.api_call("users.setPresence", params=kwargs) @@ -5220,7 +5692,7 @@ async def users_discoverableContacts_lookup( **kwargs, ) -> AsyncSlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return await self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5233,7 +5705,7 @@ async def users_profile_get( **kwargs, ) -> AsyncSlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return await self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5248,7 +5720,7 @@ async def users_profile_set( **kwargs, ) -> AsyncSlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5271,8 +5743,8 @@ async def views_open( **kwargs, ) -> AsyncSlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5295,9 +5767,9 @@ async def views_push( Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5320,9 +5792,9 @@ async def views_update( """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5349,8 +5821,8 @@ async def views_publish( ) -> AsyncSlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5361,6 +5833,72 @@ async def views_publish( # NOTE: Intentionally using json for the "view" parameter return await self.api_call("views.publish", json=kwargs) + async def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.add", params=kwargs) + + async def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return await self.api_call("workflows.featured.list", params=kwargs) + + async def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.remove", params=kwargs) + + async def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.set", params=kwargs) + async def workflows_stepCompleted( self, *, @@ -5369,7 +5907,7 @@ async def workflows_stepCompleted( **kwargs, ) -> AsyncSlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5386,7 +5924,7 @@ async def workflows_stepFailed( **kwargs, ) -> AsyncSlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5407,7 +5945,7 @@ async def workflows_updateStep( **kwargs, ) -> AsyncSlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: diff --git a/slack_sdk/web/base_client.py b/slack_sdk/web/base_client.py index 6c3714a45..1f5ad58c7 100644 --- a/slack_sdk/web/base_client.py +++ b/slack_sdk/web/base_client.py @@ -615,7 +615,7 @@ def validate_slack_signature(*, signing_secret: str, data: str, timestamp: str, header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the diff --git a/slack_sdk/web/chat_stream.py b/slack_sdk/web/chat_stream.py new file mode 100644 index 000000000..1a379c9cb --- /dev/null +++ b/slack_sdk/web/chat_stream.py @@ -0,0 +1,202 @@ +import json +import logging +from typing import TYPE_CHECKING, Dict, Optional, Sequence, Union + +import slack_sdk.errors as e +from slack_sdk.models.blocks.blocks import Block +from slack_sdk.models.metadata import Metadata +from slack_sdk.web.slack_response import SlackResponse + +if TYPE_CHECKING: + from slack_sdk import WebClient + + +class ChatStream: + """A helper class for streaming markdown text into a conversation using the chat streaming APIs. + + This class provides a convenient interface for the chat.startStream, chat.appendStream, and chat.stopStream API + methods, with automatic buffering and state management. + """ + + def __init__( + self, + client: "WebClient", + *, + channel: str, + logger: logging.Logger, + thread_ts: str, + buffer_size: int, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ): + """Initialize a new ChatStream instance. + + The __init__ method creates a unique ChatStream instance that keeps track of one chat stream. + + Args: + client: The WebClient instance to use for API calls. + channel: An encoded ID that represents a channel, private group, or DM. + logger: A logging channel for outputs. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value + decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits. + **kwargs: Additional arguments passed to the underlying API calls. + """ + self._client = client + self._logger = logger + self._token: Optional[str] = kwargs.pop("token", None) + self._stream_args = { + "channel": channel, + "thread_ts": thread_ts, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + **kwargs, + } + self._buffer = "" + self._state = "starting" + self._stream_ts: Optional[str] = None + self._buffer_size = buffer_size + + def append( + self, + *, + markdown_text: str, + **kwargs, + ) -> Optional[SlackResponse]: + """Append to the stream. + + The "append" method appends to the chat stream being used. This method can be called multiple times. After the stream + is stopped this method cannot be called. + + Args: + markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is + what will be appended to the message received so far. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + SlackResponse if the buffer was flushed, None if buffering. + + Raises: + SlackRequestError: If the stream is already completed. + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + if self._state == "completed": + raise e.SlackRequestError(f"Cannot append to stream: stream state is {self._state}") + if kwargs.get("token"): + self._token = kwargs.pop("token") + self._buffer += markdown_text + if len(self._buffer) >= self._buffer_size: + return self._flush_buffer(**kwargs) + details = { + "buffer_length": len(self._buffer), + "buffer_size": self._buffer_size, + "channel": self._stream_args.get("channel"), + "recipient_team_id": self._stream_args.get("recipient_team_id"), + "recipient_user_id": self._stream_args.get("recipient_user_id"), + "thread_ts": self._stream_args.get("thread_ts"), + } + self._logger.debug(f"ChatStream appended to buffer: {json.dumps(details)}") + return None + + def stop( + self, + *, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stop the stream and finalize the message. + + Args: + blocks: A list of blocks that will be rendered at the bottom of the finalized message. + markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is + what will be appended to the message received so far. + metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you + post to Slack is accessible to any app or user who is a member of that workspace. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + SlackResponse from the chat.stopStream API call. + + Raises: + SlackRequestError: If the stream is already completed. + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + if self._state == "completed": + raise e.SlackRequestError(f"Cannot stop stream: stream state is {self._state}") + if kwargs.get("token"): + self._token = kwargs.pop("token") + if markdown_text: + self._buffer += markdown_text + if not self._stream_ts: + response = self._client.chat_startStream( + **self._stream_args, + token=self._token, + ) + if not response.get("ts"): + raise e.SlackRequestError("Failed to stop stream: stream not started") + self._stream_ts = str(response["ts"]) + self._state = "in_progress" + response = self._client.chat_stopStream( + token=self._token, + channel=self._stream_args["channel"], + ts=self._stream_ts, + blocks=blocks, + markdown_text=self._buffer, + metadata=metadata, + **kwargs, + ) + self._state = "completed" + return response + + def _flush_buffer(self, **kwargs) -> SlackResponse: + """Flush the internal buffer by making appropriate API calls.""" + if not self._stream_ts: + response = self._client.chat_startStream( + **self._stream_args, + token=self._token, + **kwargs, + markdown_text=self._buffer, + ) + self._stream_ts = response.get("ts") + self._state = "in_progress" + else: + response = self._client.chat_appendStream( + token=self._token, + channel=self._stream_args["channel"], + ts=self._stream_ts, + **kwargs, + markdown_text=self._buffer, + ) + self._buffer = "" + return response diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 433e447c2..dfa771832 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -4,29 +4,31 @@ import os import warnings from io import IOBase -from typing import Union, Sequence, Optional, Dict, Any, List +from typing import Any, Dict, List, Optional, Sequence, Union import slack_sdk.errors as e from slack_sdk.models.views import View +from slack_sdk.web.chat_stream import ChatStream + +from ..models.attachments import Attachment +from ..models.blocks import Block, RichTextBlock +from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .base_client import BaseClient, SlackResponse from .internal_utils import ( _parse_web_class_objects, - _update_call_participants, - _warn_if_text_or_attachment_fallback_is_missing, + _print_files_upload_v2_suggestion, _remove_none_values, _to_v2_file_upload_item, + _update_call_participants, _validate_for_legacy_client, - _print_files_upload_v2_suggestion, + _warn_if_message_text_content_is_missing, ) -from ..models.attachments import Attachment -from ..models.blocks import Block -from ..models.metadata import Metadata class WebClient(BaseClient): """A WebClient allows apps to communicate with the Slack Platform's Web API. - https://api.slack.com/methods + https://docs.slack.dev/reference/methods The Slack Web API is an interface for querying information from and enacting change in a Slack workspace. @@ -97,7 +99,7 @@ def admin_analytics_getFile( **kwargs, ) -> SlackResponse: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -119,7 +121,7 @@ def admin_apps_approve( Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -146,7 +148,7 @@ def admin_apps_approved_list( **kwargs, ) -> SlackResponse: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -167,7 +169,7 @@ def admin_apps_clearResolution( **kwargs, ) -> SlackResponse: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -187,7 +189,7 @@ def admin_apps_requests_cancel( **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -207,7 +209,7 @@ def admin_apps_requests_list( **kwargs, ) -> SlackResponse: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -231,7 +233,7 @@ def admin_apps_restrict( Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -258,7 +260,7 @@ def admin_apps_restricted_list( **kwargs, ) -> SlackResponse: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -280,7 +282,7 @@ def admin_apps_uninstall( ) -> SlackResponse: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -311,7 +313,7 @@ def admin_apps_activities_list( **kwargs, ) -> SlackResponse: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -339,7 +341,7 @@ def admin_apps_config_lookup( **kwargs, ) -> SlackResponse: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -356,7 +358,7 @@ def admin_apps_config_set( **kwargs, ) -> SlackResponse: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -378,7 +380,7 @@ def admin_auth_policy_getEntities( **kwargs, ) -> SlackResponse: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -398,7 +400,7 @@ def admin_auth_policy_assignEntities( **kwargs, ) -> SlackResponse: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -417,7 +419,7 @@ def admin_auth_policy_removeEntities( **kwargs, ) -> SlackResponse: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -427,6 +429,60 @@ def admin_auth_policy_removeEntities( kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Create a Salesforce channel for the corresponding object provided. + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> SlackResponse: + """Link a Salesforce record to a channel. + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> SlackResponse: + """Unlink a Salesforce record from a channel. + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -436,7 +492,7 @@ def admin_barriers_create( **kwargs, ) -> SlackResponse: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -456,7 +512,7 @@ def admin_barriers_delete( **kwargs, ) -> SlackResponse: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -471,7 +527,7 @@ def admin_barriers_update( **kwargs, ) -> SlackResponse: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -492,7 +548,7 @@ def admin_barriers_list( **kwargs, ) -> SlackResponse: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -512,7 +568,7 @@ def admin_conversations_create( **kwargs, ) -> SlackResponse: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -532,7 +588,7 @@ def admin_conversations_delete( **kwargs, ) -> SlackResponse: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -545,7 +601,7 @@ def admin_conversations_invite( **kwargs, ) -> SlackResponse: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -562,7 +618,7 @@ def admin_conversations_archive( **kwargs, ) -> SlackResponse: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -574,7 +630,7 @@ def admin_conversations_unarchive( **kwargs, ) -> SlackResponse: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -587,7 +643,7 @@ def admin_conversations_rename( **kwargs, ) -> SlackResponse: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -605,7 +661,7 @@ def admin_conversations_search( **kwargs, ) -> SlackResponse: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -636,7 +692,7 @@ def admin_conversations_convertToPrivate( **kwargs, ) -> SlackResponse: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -648,7 +704,7 @@ def admin_conversations_convertToPublic( **kwargs, ) -> SlackResponse: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -661,7 +717,7 @@ def admin_conversations_setConversationPrefs( **kwargs, ) -> SlackResponse: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -677,7 +733,7 @@ def admin_conversations_getConversationPrefs( **kwargs, ) -> SlackResponse: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -690,7 +746,7 @@ def admin_conversations_disconnectShared( **kwargs, ) -> SlackResponse: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -710,7 +766,7 @@ def admin_conversations_lookup( **kwargs, ) -> SlackResponse: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -738,7 +794,7 @@ def admin_conversations_ekm_listOriginalConnectedChannelInfo( """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -765,7 +821,7 @@ def admin_conversations_restrictAccess_addGroup( **kwargs, ) -> SlackResponse: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -788,7 +844,7 @@ def admin_conversations_restrictAccess_listGroups( **kwargs, ) -> SlackResponse: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -811,7 +867,7 @@ def admin_conversations_restrictAccess_removeGroup( **kwargs, ) -> SlackResponse: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -836,7 +892,7 @@ def admin_conversations_setTeams( **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -860,7 +916,7 @@ def admin_conversations_getTeams( **kwargs, ) -> SlackResponse: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -878,7 +934,7 @@ def admin_conversations_getCustomRetention( **kwargs, ) -> SlackResponse: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -890,7 +946,7 @@ def admin_conversations_removeCustomRetention( **kwargs, ) -> SlackResponse: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -903,7 +959,7 @@ def admin_conversations_setCustomRetention( **kwargs, ) -> SlackResponse: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -915,7 +971,7 @@ def admin_conversations_bulkArchive( **kwargs, ) -> SlackResponse: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -940,7 +996,7 @@ def admin_conversations_bulkMove( **kwargs, ) -> SlackResponse: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -958,7 +1014,7 @@ def admin_emoji_add( **kwargs, ) -> SlackResponse: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -971,7 +1027,7 @@ def admin_emoji_addAlias( **kwargs, ) -> SlackResponse: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -984,7 +1040,7 @@ def admin_emoji_list( **kwargs, ) -> SlackResponse: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -996,7 +1052,7 @@ def admin_emoji_remove( **kwargs, ) -> SlackResponse: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1009,7 +1065,7 @@ def admin_emoji_rename( **kwargs, ) -> SlackResponse: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1024,7 +1080,7 @@ def admin_functions_list( **kwargs, ) -> SlackResponse: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1047,7 +1103,7 @@ def admin_functions_permissions_lookup( ) -> SlackResponse: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1065,7 +1121,7 @@ def admin_functions_permissions_set( ) -> SlackResponse: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1089,7 +1145,7 @@ def admin_roles_addAssignments( **kwargs, ) -> SlackResponse: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1114,7 +1170,7 @@ def admin_roles_listAssignments( ) -> SlackResponse: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1136,7 +1192,7 @@ def admin_roles_removeAssignments( **kwargs, ) -> SlackResponse: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1158,7 +1214,7 @@ def admin_users_session_reset( **kwargs, ) -> SlackResponse: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1178,7 +1234,7 @@ def admin_users_session_resetBulk( **kwargs, ) -> SlackResponse: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1200,7 +1256,7 @@ def admin_users_session_invalidate( **kwargs, ) -> SlackResponse: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1215,7 +1271,7 @@ def admin_users_session_list( **kwargs, ) -> SlackResponse: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1235,7 +1291,7 @@ def admin_teams_settings_setDefaultChannels( **kwargs, ) -> SlackResponse: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1252,7 +1308,7 @@ def admin_users_session_getSettings( ) -> SlackResponse: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1270,7 +1326,7 @@ def admin_users_session_setSettings( ) -> SlackResponse: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1292,7 +1348,7 @@ def admin_users_session_clearSettings( ) -> SlackResponse: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1309,7 +1365,7 @@ def admin_users_unsupportedVersions_export( ) -> SlackResponse: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1327,7 +1383,7 @@ def admin_inviteRequests_approve( **kwargs, ) -> SlackResponse: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1341,7 +1397,7 @@ def admin_inviteRequests_approved_list( **kwargs, ) -> SlackResponse: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1361,7 +1417,7 @@ def admin_inviteRequests_denied_list( **kwargs, ) -> SlackResponse: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1380,7 +1436,7 @@ def admin_inviteRequests_deny( **kwargs, ) -> SlackResponse: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1401,7 +1457,7 @@ def admin_teams_admins_list( **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1422,7 +1478,7 @@ def admin_teams_create( **kwargs, ) -> SlackResponse: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1442,7 +1498,7 @@ def admin_teams_list( **kwargs, ) -> SlackResponse: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1456,7 +1512,7 @@ def admin_teams_owners_list( **kwargs, ) -> SlackResponse: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1468,7 +1524,7 @@ def admin_teams_settings_info( **kwargs, ) -> SlackResponse: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1481,7 +1537,7 @@ def admin_teams_settings_setDescription( **kwargs, ) -> SlackResponse: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1494,7 +1550,7 @@ def admin_teams_settings_setDiscoverability( **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1507,7 +1563,7 @@ def admin_teams_settings_setIcon( **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1520,7 +1576,7 @@ def admin_teams_settings_setName( **kwargs, ) -> SlackResponse: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1534,7 +1590,7 @@ def admin_usergroups_addChannels( **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1552,7 +1608,7 @@ def admin_usergroups_addTeams( **kwargs, ) -> SlackResponse: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1570,7 +1626,7 @@ def admin_usergroups_listChannels( **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1589,7 +1645,7 @@ def admin_usergroups_removeChannels( **kwargs, ) -> SlackResponse: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1609,7 +1665,7 @@ def admin_users_assign( **kwargs, ) -> SlackResponse: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1641,7 +1697,7 @@ def admin_users_invite( **kwargs, ) -> SlackResponse: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1665,7 +1721,7 @@ def admin_users_invite( def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1673,7 +1729,7 @@ def admin_users_list( **kwargs, ) -> SlackResponse: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1694,7 +1750,7 @@ def admin_users_remove( **kwargs, ) -> SlackResponse: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1707,7 +1763,7 @@ def admin_users_setAdmin( **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1721,7 +1777,7 @@ def admin_users_setExpiration( **kwargs, ) -> SlackResponse: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1734,7 +1790,7 @@ def admin_users_setOwner( **kwargs, ) -> SlackResponse: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1747,7 +1803,7 @@ def admin_users_setRegular( **kwargs, ) -> SlackResponse: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1768,7 +1824,7 @@ def admin_workflows_search( **kwargs, ) -> SlackResponse: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1798,7 +1854,7 @@ def admin_workflows_permissions_lookup( **kwargs, ) -> SlackResponse: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1819,7 +1875,7 @@ def admin_workflows_collaborators_add( **kwargs, ) -> SlackResponse: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1839,7 +1895,7 @@ def admin_workflows_collaborators_remove( **kwargs, ) -> SlackResponse: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1858,7 +1914,7 @@ def admin_workflows_unpublish( **kwargs, ) -> SlackResponse: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1873,7 +1929,7 @@ def api_test( **kwargs, ) -> SlackResponse: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -1886,7 +1942,7 @@ def apps_connections_open( ) -> SlackResponse: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1901,7 +1957,7 @@ def apps_event_authorizations_list( ) -> SlackResponse: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1914,7 +1970,7 @@ def apps_uninstall( **kwargs, ) -> SlackResponse: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -1926,7 +1982,7 @@ def apps_manifest_create( **kwargs, ) -> SlackResponse: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1941,7 +1997,7 @@ def apps_manifest_delete( **kwargs, ) -> SlackResponse: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -1953,7 +2009,7 @@ def apps_manifest_export( **kwargs, ) -> SlackResponse: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -1966,7 +2022,7 @@ def apps_manifest_update( **kwargs, ) -> SlackResponse: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1983,7 +2039,7 @@ def apps_manifest_validate( **kwargs, ) -> SlackResponse: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1999,7 +2055,7 @@ def tooling_tokens_rotate( **kwargs, ) -> SlackResponse: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2010,13 +2066,17 @@ def assistant_threads_setStatus( channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2026,8 +2086,8 @@ def assistant_threads_setTitle( title: str, **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2041,8 +2101,8 @@ def assistant_threads_setSuggestedPrompts( prompts: List[Dict[str, str]], **kwargs, ) -> SlackResponse: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2056,7 +2116,7 @@ def auth_revoke( **kwargs, ) -> SlackResponse: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2066,7 +2126,7 @@ def auth_test( **kwargs, ) -> SlackResponse: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2078,7 +2138,7 @@ def auth_teams_list( **kwargs, ) -> SlackResponse: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2096,7 +2156,7 @@ def bookmarks_add( **kwargs, ) -> SlackResponse: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2122,7 +2182,7 @@ def bookmarks_edit( **kwargs, ) -> SlackResponse: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2142,7 +2202,7 @@ def bookmarks_list( **kwargs, ) -> SlackResponse: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2155,7 +2215,7 @@ def bookmarks_remove( **kwargs, ) -> SlackResponse: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2168,7 +2228,7 @@ def bots_info( **kwargs, ) -> SlackResponse: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2187,7 +2247,7 @@ def calls_add( **kwargs, ) -> SlackResponse: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2214,7 +2274,7 @@ def calls_end( **kwargs, ) -> SlackResponse: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2226,7 +2286,7 @@ def calls_info( **kwargs, ) -> SlackResponse: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2239,7 +2299,7 @@ def calls_participants_add( **kwargs, ) -> SlackResponse: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2253,7 +2313,7 @@ def calls_participants_remove( **kwargs, ) -> SlackResponse: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2269,7 +2329,7 @@ def calls_update( **kwargs, ) -> SlackResponse: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2289,7 +2349,7 @@ def canvases_create( **kwargs, ) -> SlackResponse: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2302,7 +2362,7 @@ def canvases_edit( **kwargs, ) -> SlackResponse: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2314,7 +2374,7 @@ def canvases_delete( **kwargs, ) -> SlackResponse: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2329,7 +2389,7 @@ def canvases_access_set( **kwargs, ) -> SlackResponse: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2354,7 +2414,7 @@ def canvases_access_delete( **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2377,7 +2437,7 @@ def canvases_sections_lookup( **kwargs, ) -> SlackResponse: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2385,7 +2445,7 @@ def canvases_sections_lookup( # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2555,6 +2615,27 @@ def channels_unarchive( # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> SlackResponse: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2564,7 +2645,7 @@ def chat_delete( **kwargs, ) -> SlackResponse: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2578,7 +2659,7 @@ def chat_deleteScheduledMessage( **kwargs, ) -> SlackResponse: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2597,7 +2678,7 @@ def chat_getPermalink( **kwargs, ) -> SlackResponse: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2610,7 +2691,7 @@ def chat_meMessage( **kwargs, ) -> SlackResponse: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2630,10 +2711,11 @@ def chat_postEphemeral( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2649,11 +2731,12 @@ def chat_postEphemeral( "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2676,11 +2759,12 @@ def chat_postMessage( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2701,11 +2785,12 @@ def chat_postMessage( "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2714,7 +2799,7 @@ def chat_scheduleMessage( *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2725,10 +2810,11 @@ def chat_scheduleMessage( unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2745,14 +2831,155 @@ def chat_scheduleMessage( "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> SlackResponse: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> SlackResponse: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + + def chat_stream( + self, + *, + buffer_size: int = 256, + channel: str, + thread_ts: str, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> ChatStream: + """Stream markdown text into a conversation. + + This method starts a new chat stream in a conversation that can be appended to. After appending an entire message, + the stream can be stopped with concluding arguments such as "blocks" for gathering feedback. + + The following methods are used: + + - chat.startStream: Starts a new streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.startStream). + - chat.appendStream: Appends text to an existing streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.appendStream). + - chat.stopStream: Stops a streaming conversation. + [Reference](https://docs.slack.dev/reference/methods/chat.stopStream). + + Args: + buffer_size: The length of markdown_text to buffer in-memory before calling a stream method. Increasing this + value decreases the number of method calls made for the same amount of text, which is useful to avoid rate + limits. Default: 256. + channel: An encoded ID that represents a channel, private group, or DM. + thread_ts: Provide another message's ts value to reply to. Streamed messages should always be replies to a user + request. + recipient_team_id: The encoded ID of the team the user receiving the streaming text belongs to. Required when + streaming to channels. + recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels. + **kwargs: Additional arguments passed to the underlying API calls. + + Returns: + ChatStream instance for managing the stream + + Example: + ```python + streamer = client.chat_stream( + channel="C0123456789", + thread_ts="1700000001.123456", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="**hello wo") + streamer.append(markdown_text="rld!**") + streamer.stop() + ``` + """ + return ChatStream( + self, + logger=self._logger, + channel=channel, + thread_ts=thread_ts, + recipient_team_id=recipient_team_id, + recipient_user_id=recipient_user_id, + buffer_size=buffer_size, + **kwargs, + ) + def chat_unfurl( self, *, @@ -2761,6 +2988,7 @@ def chat_unfurl( source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2768,7 +2996,7 @@ def chat_unfurl( **kwargs, ) -> SlackResponse: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2777,6 +3005,7 @@ def chat_unfurl( "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -2802,10 +3031,11 @@ def chat_update( parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2819,6 +3049,7 @@ def chat_update( "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2827,36 +3058,10 @@ def chat_update( kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> SlackResponse: - """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -2869,7 +3074,7 @@ def conversations_acceptSharedInvite( **kwargs, ) -> SlackResponse: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2893,7 +3098,7 @@ def conversations_approveSharedInvite( **kwargs, ) -> SlackResponse: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2905,7 +3110,7 @@ def conversations_archive( **kwargs, ) -> SlackResponse: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -2917,7 +3122,7 @@ def conversations_close( **kwargs, ) -> SlackResponse: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -2931,7 +3136,7 @@ def conversations_create( **kwargs, ) -> SlackResponse: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -2944,7 +3149,7 @@ def conversations_declineSharedInvite( **kwargs, ) -> SlackResponse: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -2953,7 +3158,7 @@ def conversations_externalInvitePermissions_set( self, *, action: str, channel: str, target_team: str, **kwargs ) -> SlackResponse: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -2977,7 +3182,7 @@ def conversations_history( **kwargs, ) -> SlackResponse: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3001,7 +3206,7 @@ def conversations_info( **kwargs, ) -> SlackResponse: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3021,7 +3226,7 @@ def conversations_invite( **kwargs, ) -> SlackResponse: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3044,7 +3249,7 @@ def conversations_inviteShared( **kwargs, ) -> SlackResponse: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3066,7 +3271,7 @@ def conversations_join( **kwargs, ) -> SlackResponse: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3079,7 +3284,7 @@ def conversations_kick( **kwargs, ) -> SlackResponse: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3091,7 +3296,7 @@ def conversations_leave( **kwargs, ) -> SlackResponse: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3107,7 +3312,7 @@ def conversations_list( **kwargs, ) -> SlackResponse: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3133,7 +3338,7 @@ def conversations_listConnectInvites( ) -> SlackResponse: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3146,7 +3351,7 @@ def conversations_mark( **kwargs, ) -> SlackResponse: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3160,7 +3365,7 @@ def conversations_members( **kwargs, ) -> SlackResponse: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3174,7 +3379,7 @@ def conversations_open( **kwargs, ) -> SlackResponse: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3193,7 +3398,7 @@ def conversations_rename( **kwargs, ) -> SlackResponse: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3212,7 +3417,7 @@ def conversations_replies( **kwargs, ) -> SlackResponse: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3238,7 +3443,7 @@ def conversations_requestSharedInvite_approve( **kwargs, ) -> SlackResponse: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3259,7 +3464,7 @@ def conversations_requestSharedInvite_deny( **kwargs, ) -> SlackResponse: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3277,7 +3482,7 @@ def conversations_requestSharedInvite_list( **kwargs, ) -> SlackResponse: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3304,7 +3509,7 @@ def conversations_setPurpose( **kwargs, ) -> SlackResponse: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3317,7 +3522,7 @@ def conversations_setTopic( **kwargs, ) -> SlackResponse: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3329,7 +3534,7 @@ def conversations_unarchive( **kwargs, ) -> SlackResponse: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3342,7 +3547,7 @@ def conversations_canvases_create( **kwargs, ) -> SlackResponse: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3355,7 +3560,7 @@ def dialog_open( **kwargs, ) -> SlackResponse: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3367,7 +3572,7 @@ def dnd_endDnd( **kwargs, ) -> SlackResponse: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3376,7 +3581,7 @@ def dnd_endSnooze( **kwargs, ) -> SlackResponse: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3388,7 +3593,7 @@ def dnd_info( **kwargs, ) -> SlackResponse: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3400,7 +3605,7 @@ def dnd_setSnooze( **kwargs, ) -> SlackResponse: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3412,7 +3617,7 @@ def dnd_teamInfo( **kwargs, ) -> SlackResponse: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3427,11 +3632,35 @@ def emoji_list( **kwargs, ) -> SlackResponse: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> SlackResponse: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -3440,7 +3669,7 @@ def files_comments_delete( **kwargs, ) -> SlackResponse: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3452,7 +3681,7 @@ def files_delete( **kwargs, ) -> SlackResponse: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3468,7 +3697,7 @@ def files_info( **kwargs, ) -> SlackResponse: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3496,7 +3725,7 @@ def files_list( **kwargs, ) -> SlackResponse: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3524,7 +3753,7 @@ def files_remote_info( **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3540,7 +3769,7 @@ def files_remote_list( **kwargs, ) -> SlackResponse: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3565,7 +3794,7 @@ def files_remote_add( **kwargs, ) -> SlackResponse: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3604,7 +3833,7 @@ def files_remote_update( **kwargs, ) -> SlackResponse: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3639,7 +3868,7 @@ def files_remote_remove( **kwargs, ) -> SlackResponse: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3653,7 +3882,7 @@ def files_remote_share( **kwargs, ) -> SlackResponse: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3671,7 +3900,7 @@ def files_revokePublicURL( **kwargs, ) -> SlackResponse: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3683,7 +3912,7 @@ def files_sharedPublicURL( **kwargs, ) -> SlackResponse: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3702,7 +3931,7 @@ def files_upload( **kwargs, ) -> SlackResponse: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3755,12 +3984,12 @@ def files_upload_v2( ) -> SlackResponse: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3846,7 +4075,7 @@ def files_getUploadURLExternal( **kwargs, ) -> SlackResponse: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3869,7 +4098,7 @@ def files_completeUploadExternal( **kwargs, ) -> SlackResponse: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3892,7 +4121,7 @@ def functions_completeSuccess( **kwargs, ) -> SlackResponse: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -3905,7 +4134,7 @@ def functions_completeError( **kwargs, ) -> SlackResponse: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -3913,7 +4142,7 @@ def functions_completeError( # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4094,7 +4323,7 @@ def groups_unarchive( # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4170,7 +4399,7 @@ def migration_exchange( **kwargs, ) -> SlackResponse: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4182,7 +4411,7 @@ def migration_exchange( # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4269,7 +4498,7 @@ def oauth_v2_access( **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4295,7 +4524,7 @@ def oauth_access( **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4315,7 +4544,7 @@ def oauth_v2_exchange( **kwargs, ) -> SlackResponse: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4331,7 +4560,7 @@ def openid_connect_token( **kwargs, ) -> SlackResponse: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4352,7 +4581,7 @@ def openid_connect_userInfo( **kwargs, ) -> SlackResponse: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4364,7 +4593,7 @@ def pins_add( **kwargs, ) -> SlackResponse: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4376,7 +4605,7 @@ def pins_list( **kwargs, ) -> SlackResponse: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4389,7 +4618,7 @@ def pins_remove( **kwargs, ) -> SlackResponse: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4403,7 +4632,7 @@ def reactions_add( **kwargs, ) -> SlackResponse: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4419,7 +4648,7 @@ def reactions_get( **kwargs, ) -> SlackResponse: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4445,7 +4674,7 @@ def reactions_list( **kwargs, ) -> SlackResponse: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4471,7 +4700,7 @@ def reactions_remove( **kwargs, ) -> SlackResponse: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4495,7 +4724,7 @@ def reminders_add( **kwargs, ) -> SlackResponse: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4516,7 +4745,7 @@ def reminders_complete( **kwargs, ) -> SlackResponse: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4529,7 +4758,7 @@ def reminders_delete( **kwargs, ) -> SlackResponse: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4542,7 +4771,7 @@ def reminders_info( **kwargs, ) -> SlackResponse: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4554,7 +4783,7 @@ def reminders_list( **kwargs, ) -> SlackResponse: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4567,7 +4796,7 @@ def rtm_connect( **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4585,7 +4814,7 @@ def rtm_start( **kwargs, ) -> SlackResponse: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4613,7 +4842,7 @@ def search_all( **kwargs, ) -> SlackResponse: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4641,7 +4870,7 @@ def search_files( **kwargs, ) -> SlackResponse: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4670,7 +4899,7 @@ def search_messages( **kwargs, ) -> SlackResponse: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4686,6 +4915,249 @@ def search_messages( ) return self.api_call("search.messages", http_verb="GET", params=kwargs) + def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> SlackResponse: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) + + def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> SlackResponse: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) + + def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) + + def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> SlackResponse: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) + + def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> SlackResponse: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> SlackResponse: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> SlackResponse: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> SlackResponse: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + def stars_add( self, *, @@ -4696,7 +5168,7 @@ def stars_add( **kwargs, ) -> SlackResponse: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4719,7 +5191,7 @@ def stars_list( **kwargs, ) -> SlackResponse: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4742,7 +5214,7 @@ def stars_remove( **kwargs, ) -> SlackResponse: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4766,7 +5238,7 @@ def team_accessLogs( **kwargs, ) -> SlackResponse: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4788,7 +5260,7 @@ def team_billableInfo( **kwargs, ) -> SlackResponse: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4798,7 +5270,7 @@ def team_billing_info( **kwargs, ) -> SlackResponse: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -4809,7 +5281,7 @@ def team_externalTeams_disconnect( **kwargs, ) -> SlackResponse: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4831,7 +5303,7 @@ def team_externalTeams_list( **kwargs, ) -> SlackResponse: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4862,7 +5334,7 @@ def team_info( **kwargs, ) -> SlackResponse: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4880,7 +5352,7 @@ def team_integrationLogs( **kwargs, ) -> SlackResponse: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4902,7 +5374,7 @@ def team_profile_get( **kwargs, ) -> SlackResponse: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4912,7 +5384,7 @@ def team_preferences_list( **kwargs, ) -> SlackResponse: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -4928,7 +5400,7 @@ def usergroups_create( **kwargs, ) -> SlackResponse: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -4954,7 +5426,7 @@ def usergroups_disable( **kwargs, ) -> SlackResponse: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -4968,7 +5440,7 @@ def usergroups_enable( **kwargs, ) -> SlackResponse: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -4983,7 +5455,7 @@ def usergroups_list( **kwargs, ) -> SlackResponse: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5008,7 +5480,7 @@ def usergroups_update( **kwargs, ) -> SlackResponse: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5035,7 +5507,7 @@ def usergroups_users_list( **kwargs, ) -> SlackResponse: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5056,7 +5528,7 @@ def usergroups_users_update( **kwargs, ) -> SlackResponse: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5083,7 +5555,7 @@ def users_conversations( **kwargs, ) -> SlackResponse: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5105,7 +5577,7 @@ def users_deletePhoto( **kwargs, ) -> SlackResponse: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5116,7 +5588,7 @@ def users_getPresence( **kwargs, ) -> SlackResponse: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5126,7 +5598,7 @@ def users_identity( **kwargs, ) -> SlackResponse: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5138,7 +5610,7 @@ def users_info( **kwargs, ) -> SlackResponse: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5153,7 +5625,7 @@ def users_list( **kwargs, ) -> SlackResponse: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5172,7 +5644,7 @@ def users_lookupByEmail( **kwargs, ) -> SlackResponse: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5187,7 +5659,7 @@ def users_setPhoto( **kwargs, ) -> SlackResponse: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5199,7 +5671,7 @@ def users_setPresence( **kwargs, ) -> SlackResponse: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5210,7 +5682,7 @@ def users_discoverableContacts_lookup( **kwargs, ) -> SlackResponse: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5223,7 +5695,7 @@ def users_profile_get( **kwargs, ) -> SlackResponse: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5238,7 +5710,7 @@ def users_profile_set( **kwargs, ) -> SlackResponse: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5261,8 +5733,8 @@ def views_open( **kwargs, ) -> SlackResponse: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5285,9 +5757,9 @@ def views_push( Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5310,9 +5782,9 @@ def views_update( """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5339,8 +5811,8 @@ def views_publish( ) -> SlackResponse: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5351,6 +5823,72 @@ def views_publish( # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5359,7 +5897,7 @@ def workflows_stepCompleted( **kwargs, ) -> SlackResponse: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5376,7 +5914,7 @@ def workflows_stepFailed( **kwargs, ) -> SlackResponse: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5397,7 +5935,7 @@ def workflows_updateStep( **kwargs, ) -> SlackResponse: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: diff --git a/slack_sdk/web/deprecation.py b/slack_sdk/web/deprecation.py index 5f7f87480..c81c4b754 100644 --- a/slack_sdk/web/deprecation.py +++ b/slack_sdk/web/deprecation.py @@ -1,7 +1,7 @@ import os import warnings -# https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api +# https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ deprecated_method_prefixes_2020_01 = [ "channels.", "groups.", @@ -30,7 +30,7 @@ def show_deprecation_warning_if_any(method_name: str): message = ( f"{method_name} is deprecated. Please use the Conversations API instead. " "For more info, go to " - "https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api" + "https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/" ) warnings.warn(message) @@ -39,7 +39,7 @@ def show_deprecation_warning_if_any(method_name: str): if len(matched_prefixes) > 0: message = ( f"{method_name} is deprecated. For more info, go to " - "https://api.slack.com/changelog/2023-07-its-later-already-for-stars-and-reminders" + "https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders/" ) warnings.warn(message) @@ -48,6 +48,6 @@ def show_deprecation_warning_if_any(method_name: str): if len(matched_prefixes) > 0: message = ( f"{method_name} is deprecated. For more info, go to " - "https://api.slack.com/changelog/2023-08-workflow-steps-from-apps-step-back" + "https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back/" ) warnings.warn(message) diff --git a/slack_sdk/web/internal_utils.py b/slack_sdk/web/internal_utils.py index ca76e3555..87139559c 100644 --- a/slack_sdk/web/internal_utils.py +++ b/slack_sdk/web/internal_utils.py @@ -17,7 +17,7 @@ from slack_sdk.errors import SlackRequestError from slack_sdk.models.attachments import Attachment from slack_sdk.models.blocks import Block -from slack_sdk.models.metadata import Metadata +from slack_sdk.models.metadata import Metadata, EventAndEntityMetadata, EntityMetadata def convert_bool_to_0_or_1(params: Optional[Dict[str, Any]]) -> Optional[Dict[str, Any]]: @@ -44,7 +44,7 @@ def get_user_agent(prefix: Optional[str] = None, suffix: Optional[str] = None): Returns: The user agent string. - e.g. 'Python/3.6.7 slackclient/2.0.0 Darwin/17.7.0' + e.g. 'Python/3.7.17 slackclient/2.0.0 Darwin/17.7.0' """ # __name__ returns all classes, we only want the client client = "{0}/{1}".format("slackclient", version.__version__) @@ -91,7 +91,7 @@ def _get_headers( e.g. { 'Content-Type': 'application/json;charset=utf-8', 'Authorization': 'Bearer xoxb-1234-1243', - 'User-Agent': 'Python/3.6.8 slack/2.1.0 Darwin/17.7.0' + 'User-Agent': 'Python/3.7.17 slack/2.1.0 Darwin/17.7.0' } """ final_headers = { @@ -187,13 +187,17 @@ def _build_req_args( def _parse_web_class_objects(kwargs) -> None: - def to_dict(obj: Union[Dict, Block, Attachment, Metadata]): + def to_dict(obj: Union[Dict, Block, Attachment, Metadata, EventAndEntityMetadata, EntityMetadata]): if isinstance(obj, Block): return obj.to_dict() if isinstance(obj, Attachment): return obj.to_dict() if isinstance(obj, Metadata): return obj.to_dict() + if isinstance(obj, EventAndEntityMetadata): + return obj.to_dict() + if isinstance(obj, EntityMetadata): + return obj.to_dict() return obj for blocks_name in ["blocks", "user_auth_blocks"]: @@ -208,7 +212,11 @@ def to_dict(obj: Union[Dict, Block, Attachment, Metadata]): kwargs.update({"attachments": dict_attachments}) metadata = kwargs.get("metadata", None) - if metadata is not None and isinstance(metadata, Metadata): + if metadata is not None and ( + isinstance(metadata, Metadata) + or isinstance(metadata, EntityMetadata) + or isinstance(metadata, EventAndEntityMetadata) + ): kwargs.update({"metadata": to_dict(metadata)}) @@ -247,12 +255,17 @@ def _to_0_or_1_if_bool(v: Any) -> Union[Any, str]: return v -def _warn_if_text_or_attachment_fallback_is_missing(endpoint: str, kwargs: Dict[str, Any]) -> None: +def _warn_if_message_text_content_is_missing(endpoint: str, kwargs: Dict[str, Any]) -> None: text = kwargs.get("text") if text and len(text.strip()) > 0: # If a top-level text arg is provided, we are good. This is the recommended accessibility field to always provide. return + markdown_text = kwargs.get("markdown_text") + if markdown_text and len(markdown_text.strip()) > 0: + # If a top-level markdown_text arg is provided, we are good. It should not be used in conjunction with text. + return + # for unit tests etc. skip_deprecation = os.environ.get("SKIP_SLACK_SDK_WARNING") if skip_deprecation: @@ -267,19 +280,19 @@ def _warn_if_text_or_attachment_fallback_is_missing(endpoint: str, kwargs: Dict[ "system push notifications, assistive technology such as screen readers, etc." ) - # https://api.slack.com/reference/messaging/attachments + # https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments # Check if the fallback field exists for all the attachments # Not all attachments have a fallback property; warn about this too! missing_fallback_message = ( f"Additionally, the attachment-level `fallback` argument is missing in the request payload for a {endpoint} call" " - To avoid this warning, it is recommended to always provide a top-level `text` argument when posting a" " message. Alternatively you can provide an attachment-level `fallback` argument, though this is now considered" - " a legacy field (see https://api.slack.com/reference/messaging/attachments#legacy_fields for more details)." + " a legacy field (see https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#legacy_fields for more details)." # noqa: E501 ) # Additionally, specifically for attachments, there is a legacy field available at the attachment level called `fallback` # Even with a missing text, one can provide a `fallback` per attachment. - # More details here: https://api.slack.com/reference/messaging/attachments#legacy_fields + # More details here: https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments#legacy_fields attachments = kwargs.get("attachments") # Note that this method does not verify attachments # if the value is already serialized as a single str value. @@ -340,11 +353,11 @@ def _to_v2_file_upload_item(upload_file: Dict[str, Any]) -> Dict[str, Optional[A if filename is None: # use the local filename if filename is missing if isinstance(file, (str, os.PathLike)): - filename = os.fspath(file).split(os.path.sep)[-1] + filename = os.path.basename(os.fspath(file)) else: filename = "Uploaded file" - title = upload_file.get("title", "Uploaded file") + title = upload_file.get("title") if data is None: raise SlackRequestError(f"File content not found for filename: {filename}, title: {title}") @@ -389,19 +402,19 @@ def _upload_file_via_v2_url( else: resp = urlopen(req, context=ssl, timeout=timeout) - charset = resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] + charset = resp.headers.get_content_charset() or "utf-8" # read the response body here - body: str = resp.read().decode(charset) # type: ignore[union-attr] + body: str = resp.read().decode(charset) if logger.level <= logging.DEBUG: message = ( "Received the following response - " - f"status: {resp.status}, " # type: ignore[union-attr] - f"headers: {dict(resp.headers)}, " # type: ignore[union-attr] + f"status: {resp.status}, " + f"headers: {dict(resp.headers)}, " f"body: {body}" ) logger.debug(message) - return {"status": resp.status, "headers": resp.headers, "body": body} # type: ignore[union-attr] + return {"status": resp.status, "headers": resp.headers, "body": body} def _validate_for_legacy_client( diff --git a/slack_sdk/web/legacy_base_client.py b/slack_sdk/web/legacy_base_client.py index 0d5c2ac2d..4b6b63027 100644 --- a/slack_sdk/web/legacy_base_client.py +++ b/slack_sdk/web/legacy_base_client.py @@ -565,7 +565,7 @@ def validate_slack_signature(*, signing_secret: str, data: str, timestamp: str, On each HTTP request that Slack sends, we add an X-Slack-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we're sending using a standard HMAC-SHA256 keyed hash. - https://api.slack.com/docs/verifying-requests-from-slack#how_to_make_a_request_signature_in_4_easy_steps__an_overview + https://docs.slack.dev/authentication/verifying-requests-from-slack/#how_to_make_a_request_signature_in_4_easy_steps__an_overview Args: signing_secret: Your application's signing secret, available in the Slack API dashboard diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index 2caa6db0a..df2bcc370 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -16,29 +16,30 @@ import os import warnings from io import IOBase -from typing import Union, Sequence, Optional, Dict, Any, List +from typing import Any, Dict, List, Optional, Sequence, Union import slack_sdk.errors as e from slack_sdk.models.views import View + +from ..models.attachments import Attachment +from ..models.blocks import Block, RichTextBlock +from ..models.metadata import Metadata, EntityMetadata, EventAndEntityMetadata from .legacy_base_client import LegacyBaseClient, SlackResponse from .internal_utils import ( _parse_web_class_objects, - _update_call_participants, - _warn_if_text_or_attachment_fallback_is_missing, + _print_files_upload_v2_suggestion, _remove_none_values, _to_v2_file_upload_item, + _update_call_participants, _validate_for_legacy_client, - _print_files_upload_v2_suggestion, + _warn_if_message_text_content_is_missing, ) -from ..models.attachments import Attachment -from ..models.blocks import Block -from ..models.metadata import Metadata class LegacyWebClient(LegacyBaseClient): """A WebClient allows apps to communicate with the Slack Platform's Web API. - https://api.slack.com/methods + https://docs.slack.dev/reference/methods The Slack Web API is an interface for querying information from and enacting change in a Slack workspace. @@ -109,7 +110,7 @@ def admin_analytics_getFile( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve analytics data for a given date, presented as a compressed JSON file - https://api.slack.com/methods/admin.analytics.getFile + https://docs.slack.dev/reference/methods/admin.analytics.getFile """ kwargs.update({"type": type}) if date is not None: @@ -131,7 +132,7 @@ def admin_apps_approve( Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.approve + https://docs.slack.dev/reference/methods/admin.apps.approve """ if app_id: kwargs.update({"app_id": app_id}) @@ -158,7 +159,7 @@ def admin_apps_approved_list( **kwargs, ) -> Union[Future, SlackResponse]: """List approved apps for an org or workspace. - https://api.slack.com/methods/admin.apps.approved.list + https://docs.slack.dev/reference/methods/admin.apps.approved.list """ kwargs.update( { @@ -179,7 +180,7 @@ def admin_apps_clearResolution( **kwargs, ) -> Union[Future, SlackResponse]: """Clear an app resolution - https://api.slack.com/methods/admin.apps.clearResolution + https://docs.slack.dev/reference/methods/admin.apps.clearResolution """ kwargs.update( { @@ -199,7 +200,7 @@ def admin_apps_requests_cancel( **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.cancel + https://docs.slack.dev/reference/methods/admin.apps.requests.cancel """ kwargs.update( { @@ -219,7 +220,7 @@ def admin_apps_requests_list( **kwargs, ) -> Union[Future, SlackResponse]: """List app requests for a team/workspace. - https://api.slack.com/methods/admin.apps.requests.list + https://docs.slack.dev/reference/methods/admin.apps.requests.list """ kwargs.update( { @@ -243,7 +244,7 @@ def admin_apps_restrict( Exactly one of the team_id or enterprise_id arguments is required, not both. Either app_id or request_id is required. These IDs can be obtained either directly via the app_requested event, or by the admin.apps.requests.list method. - https://api.slack.com/methods/admin.apps.restrict + https://docs.slack.dev/reference/methods/admin.apps.restrict """ if app_id: kwargs.update({"app_id": app_id}) @@ -270,7 +271,7 @@ def admin_apps_restricted_list( **kwargs, ) -> Union[Future, SlackResponse]: """List restricted apps for an org or workspace. - https://api.slack.com/methods/admin.apps.restricted.list + https://docs.slack.dev/reference/methods/admin.apps.restricted.list """ kwargs.update( { @@ -292,7 +293,7 @@ def admin_apps_uninstall( ) -> Union[Future, SlackResponse]: """Uninstall an app from one or many workspaces, or an entire enterprise organization. With an org-level token, enterprise_id or team_ids is required. - https://api.slack.com/methods/admin.apps.uninstall + https://docs.slack.dev/reference/methods/admin.apps.uninstall """ kwargs.update({"app_id": app_id}) if enterprise_id is not None: @@ -323,7 +324,7 @@ def admin_apps_activities_list( **kwargs, ) -> Union[Future, SlackResponse]: """Get logs for a specified team/org - https://api.slack.com/methods/admin.apps.activities.list + https://docs.slack.dev/reference/methods/admin.apps.activities.list """ kwargs.update( { @@ -351,7 +352,7 @@ def admin_apps_config_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Look up the app config for connectors by their IDs - https://api.slack.com/methods/admin.apps.config.lookup + https://docs.slack.dev/reference/methods/admin.apps.config.lookup """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -368,7 +369,7 @@ def admin_apps_config_set( **kwargs, ) -> Union[Future, SlackResponse]: """Set the app config for a connector - https://api.slack.com/methods/admin.apps.config.set + https://docs.slack.dev/reference/methods/admin.apps.config.set """ kwargs.update( { @@ -390,7 +391,7 @@ def admin_auth_policy_getEntities( **kwargs, ) -> Union[Future, SlackResponse]: """Fetch all the entities assigned to a particular authentication policy by name. - https://api.slack.com/methods/admin.auth.policy.getEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities """ kwargs.update({"policy_name": policy_name}) if cursor is not None: @@ -410,7 +411,7 @@ def admin_auth_policy_assignEntities( **kwargs, ) -> Union[Future, SlackResponse]: """Assign entities to a particular authentication policy. - https://api.slack.com/methods/admin.auth.policy.assignEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -429,7 +430,7 @@ def admin_auth_policy_removeEntities( **kwargs, ) -> Union[Future, SlackResponse]: """Remove specified entities from a specified authentication policy. - https://api.slack.com/methods/admin.auth.policy.removeEntities + https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities """ if isinstance(entity_ids, (list, tuple)): kwargs.update({"entity_ids": ",".join(entity_ids)}) @@ -439,6 +440,60 @@ def admin_auth_policy_removeEntities( kwargs.update({"entity_type": entity_type}) return self.api_call("admin.auth.policy.removeEntities", http_verb="POST", params=kwargs) + def admin_conversations_createForObjects( + self, + *, + object_id: str, + salesforce_org_id: str, + invite_object_team: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Create a Salesforce channel for the corresponding object provided. + https://docs.slack.dev/reference/methods/admin.conversations.createForObjects + """ + kwargs.update( + {"object_id": object_id, "salesforce_org_id": salesforce_org_id, "invite_object_team": invite_object_team} + ) + return self.api_call("admin.conversations.createForObjects", params=kwargs) + + def admin_conversations_linkObjects( + self, + *, + channel: str, + record_id: str, + salesforce_org_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Link a Salesforce record to a channel. + https://docs.slack.dev/reference/methods/admin.conversations.linkObjects + """ + kwargs.update( + { + "channel": channel, + "record_id": record_id, + "salesforce_org_id": salesforce_org_id, + } + ) + return self.api_call("admin.conversations.linkObjects", params=kwargs) + + def admin_conversations_unlinkObjects( + self, + *, + channel: str, + new_name: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Unlink a Salesforce record from a channel. + https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects + """ + kwargs.update( + { + "channel": channel, + "new_name": new_name, + } + ) + return self.api_call("admin.conversations.unlinkObjects", params=kwargs) + def admin_barriers_create( self, *, @@ -448,7 +503,7 @@ def admin_barriers_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create an Information Barrier - https://api.slack.com/methods/admin.barriers.create + https://docs.slack.dev/reference/methods/admin.barriers.create """ kwargs.update({"primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -468,7 +523,7 @@ def admin_barriers_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Delete an existing Information Barrier - https://api.slack.com/methods/admin.barriers.delete + https://docs.slack.dev/reference/methods/admin.barriers.delete """ kwargs.update({"barrier_id": barrier_id}) return self.api_call("admin.barriers.delete", http_verb="POST", params=kwargs) @@ -483,7 +538,7 @@ def admin_barriers_update( **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing Information Barrier - https://api.slack.com/methods/admin.barriers.update + https://docs.slack.dev/reference/methods/admin.barriers.update """ kwargs.update({"barrier_id": barrier_id, "primary_usergroup_id": primary_usergroup_id}) if isinstance(barriered_from_usergroup_ids, (list, tuple)): @@ -504,7 +559,7 @@ def admin_barriers_list( **kwargs, ) -> Union[Future, SlackResponse]: """Get all Information Barriers for your organization - https://api.slack.com/methods/admin.barriers.list""" + https://docs.slack.dev/reference/methods/admin.barriers.list""" kwargs.update( { "cursor": cursor, @@ -524,7 +579,7 @@ def admin_conversations_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create a public or private channel-based conversation. - https://api.slack.com/methods/admin.conversations.create + https://docs.slack.dev/reference/methods/admin.conversations.create """ kwargs.update( { @@ -544,7 +599,7 @@ def admin_conversations_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Delete a public or private channel. - https://api.slack.com/methods/admin.conversations.delete + https://docs.slack.dev/reference/methods/admin.conversations.delete """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.delete", params=kwargs) @@ -557,7 +612,7 @@ def admin_conversations_invite( **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a public or private channel. - https://api.slack.com/methods/admin.conversations.invite + https://docs.slack.dev/reference/methods/admin.conversations.invite """ kwargs.update({"channel_id": channel_id}) if isinstance(user_ids, (list, tuple)): @@ -574,7 +629,7 @@ def admin_conversations_archive( **kwargs, ) -> Union[Future, SlackResponse]: """Archive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.archive", params=kwargs) @@ -586,7 +641,7 @@ def admin_conversations_unarchive( **kwargs, ) -> Union[Future, SlackResponse]: """Unarchive a public or private channel. - https://api.slack.com/methods/admin.conversations.archive + https://docs.slack.dev/reference/methods/admin.conversations.archive """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.unarchive", params=kwargs) @@ -599,7 +654,7 @@ def admin_conversations_rename( **kwargs, ) -> Union[Future, SlackResponse]: """Rename a public or private channel. - https://api.slack.com/methods/admin.conversations.rename + https://docs.slack.dev/reference/methods/admin.conversations.rename """ kwargs.update({"channel_id": channel_id, "name": name}) return self.api_call("admin.conversations.rename", params=kwargs) @@ -617,7 +672,7 @@ def admin_conversations_search( **kwargs, ) -> Union[Future, SlackResponse]: """Search for public or private channels in an Enterprise organization. - https://api.slack.com/methods/admin.conversations.search + https://docs.slack.dev/reference/methods/admin.conversations.search """ kwargs.update( { @@ -648,7 +703,7 @@ def admin_conversations_convertToPrivate( **kwargs, ) -> Union[Future, SlackResponse]: """Convert a public channel to a private channel. - https://api.slack.com/methods/admin.conversations.convertToPrivate + https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPrivate", params=kwargs) @@ -660,7 +715,7 @@ def admin_conversations_convertToPublic( **kwargs, ) -> Union[Future, SlackResponse]: """Convert a privte channel to a public channel. - https://api.slack.com/methods/admin.conversations.convertToPublic + https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.convertToPublic", params=kwargs) @@ -673,7 +728,7 @@ def admin_conversations_setConversationPrefs( **kwargs, ) -> Union[Future, SlackResponse]: """Set the posting permissions for a public or private channel. - https://api.slack.com/methods/admin.conversations.setConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs """ kwargs.update({"channel_id": channel_id}) if isinstance(prefs, dict): @@ -689,7 +744,7 @@ def admin_conversations_getConversationPrefs( **kwargs, ) -> Union[Future, SlackResponse]: """Get conversation preferences for a public or private channel. - https://api.slack.com/methods/admin.conversations.getConversationPrefs + https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getConversationPrefs", params=kwargs) @@ -702,7 +757,7 @@ def admin_conversations_disconnectShared( **kwargs, ) -> Union[Future, SlackResponse]: """Disconnect a connected channel from one or more workspaces. - https://api.slack.com/methods/admin.conversations.disconnectShared + https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared """ kwargs.update({"channel_id": channel_id}) if isinstance(leaving_team_ids, (list, tuple)): @@ -722,7 +777,7 @@ def admin_conversations_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Returns channels on the given team using the filters. - https://api.slack.com/methods/admin.conversations.lookup + https://docs.slack.dev/reference/methods/admin.conversations.lookup """ kwargs.update( { @@ -750,7 +805,7 @@ def admin_conversations_ekm_listOriginalConnectedChannelInfo( """List all disconnected channelsβ€”i.e., channels that were once connected to other workspaces and then disconnectedβ€”and the corresponding original channel IDs for key revocation with EKM. - https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo + https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo """ kwargs.update( { @@ -777,7 +832,7 @@ def admin_conversations_restrictAccess_addGroup( **kwargs, ) -> Union[Future, SlackResponse]: """Add an allowlist of IDP groups for accessing a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.addGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup """ kwargs.update( { @@ -800,7 +855,7 @@ def admin_conversations_restrictAccess_listGroups( **kwargs, ) -> Union[Future, SlackResponse]: """List all IDP Groups linked to a channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.listGroups + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups """ kwargs.update( { @@ -823,7 +878,7 @@ def admin_conversations_restrictAccess_removeGroup( **kwargs, ) -> Union[Future, SlackResponse]: """Remove a linked IDP group linked from a private channel. - https://api.slack.com/methods/admin.conversations.restrictAccess.removeGroup + https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup """ kwargs.update( { @@ -848,7 +903,7 @@ def admin_conversations_setTeams( **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a public or private channel. - https://api.slack.com/methods/admin.conversations.setTeams + https://docs.slack.dev/reference/methods/admin.conversations.setTeams """ kwargs.update( { @@ -872,7 +927,7 @@ def admin_conversations_getTeams( **kwargs, ) -> Union[Future, SlackResponse]: """Set the workspaces in an Enterprise grid org that connect to a channel. - https://api.slack.com/methods/admin.conversations.getTeams + https://docs.slack.dev/reference/methods/admin.conversations.getTeams """ kwargs.update( { @@ -890,7 +945,7 @@ def admin_conversations_getCustomRetention( **kwargs, ) -> Union[Future, SlackResponse]: """Get a channel's retention policy - https://api.slack.com/methods/admin.conversations.getCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.getCustomRetention", params=kwargs) @@ -902,7 +957,7 @@ def admin_conversations_removeCustomRetention( **kwargs, ) -> Union[Future, SlackResponse]: """Remove a channel's retention policy - https://api.slack.com/methods/admin.conversations.removeCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention """ kwargs.update({"channel_id": channel_id}) return self.api_call("admin.conversations.removeCustomRetention", params=kwargs) @@ -915,7 +970,7 @@ def admin_conversations_setCustomRetention( **kwargs, ) -> Union[Future, SlackResponse]: """Set a channel's retention policy - https://api.slack.com/methods/admin.conversations.setCustomRetention + https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention """ kwargs.update({"channel_id": channel_id, "duration_days": duration_days}) return self.api_call("admin.conversations.setCustomRetention", params=kwargs) @@ -927,7 +982,7 @@ def admin_conversations_bulkArchive( **kwargs, ) -> Union[Future, SlackResponse]: """Archive public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkArchive + https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive """ kwargs.update({"channel_ids": ",".join(channel_ids) if isinstance(channel_ids, (list, tuple)) else channel_ids}) return self.api_call("admin.conversations.bulkArchive", params=kwargs) @@ -952,7 +1007,7 @@ def admin_conversations_bulkMove( **kwargs, ) -> Union[Future, SlackResponse]: """Move public or private channels in bulk. - https://api.slack.com/methods/admin.conversations.bulkMove + https://docs.slack.dev/reference/methods/admin.conversations.bulkMove """ kwargs.update( { @@ -970,7 +1025,7 @@ def admin_emoji_add( **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji. - https://api.slack.com/methods/admin.emoji.add + https://docs.slack.dev/reference/methods/admin.emoji.add """ kwargs.update({"name": name, "url": url}) return self.api_call("admin.emoji.add", http_verb="GET", params=kwargs) @@ -983,7 +1038,7 @@ def admin_emoji_addAlias( **kwargs, ) -> Union[Future, SlackResponse]: """Add an emoji alias. - https://api.slack.com/methods/admin.emoji.addAlias + https://docs.slack.dev/reference/methods/admin.emoji.addAlias """ kwargs.update({"alias_for": alias_for, "name": name}) return self.api_call("admin.emoji.addAlias", http_verb="GET", params=kwargs) @@ -996,7 +1051,7 @@ def admin_emoji_list( **kwargs, ) -> Union[Future, SlackResponse]: """List emoji for an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.list + https://docs.slack.dev/reference/methods/admin.emoji.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.emoji.list", http_verb="GET", params=kwargs) @@ -1008,7 +1063,7 @@ def admin_emoji_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove an emoji across an Enterprise Grid organization. - https://api.slack.com/methods/admin.emoji.remove + https://docs.slack.dev/reference/methods/admin.emoji.remove """ kwargs.update({"name": name}) return self.api_call("admin.emoji.remove", http_verb="GET", params=kwargs) @@ -1021,7 +1076,7 @@ def admin_emoji_rename( **kwargs, ) -> Union[Future, SlackResponse]: """Rename an emoji. - https://api.slack.com/methods/admin.emoji.rename + https://docs.slack.dev/reference/methods/admin.emoji.rename """ kwargs.update({"name": name, "new_name": new_name}) return self.api_call("admin.emoji.rename", http_verb="GET", params=kwargs) @@ -1036,7 +1091,7 @@ def admin_functions_list( **kwargs, ) -> Union[Future, SlackResponse]: """Look up functions by a set of apps - https://api.slack.com/methods/admin.functions.list + https://docs.slack.dev/reference/methods/admin.functions.list """ if isinstance(app_ids, (list, tuple)): kwargs.update({"app_ids": ",".join(app_ids)}) @@ -1059,7 +1114,7 @@ def admin_functions_permissions_lookup( ) -> Union[Future, SlackResponse]: """Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities. - https://api.slack.com/methods/admin.functions.permissions.lookup + https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup """ if isinstance(function_ids, (list, tuple)): kwargs.update({"function_ids": ",".join(function_ids)}) @@ -1077,7 +1132,7 @@ def admin_functions_permissions_set( ) -> Union[Future, SlackResponse]: """Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities - https://api.slack.com/methods/admin.functions.permissions.set + https://docs.slack.dev/reference/methods/admin.functions.permissions.set """ kwargs.update( { @@ -1101,7 +1156,7 @@ def admin_roles_addAssignments( **kwargs, ) -> Union[Future, SlackResponse]: """Adds members to the specified role with the specified scopes - https://api.slack.com/methods/admin.roles.addAssignments + https://docs.slack.dev/reference/methods/admin.roles.addAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1126,7 +1181,7 @@ def admin_roles_listAssignments( ) -> Union[Future, SlackResponse]: """Lists assignments for all roles across entities. Options to scope results by any combination of roles or entities - https://api.slack.com/methods/admin.roles.listAssignments + https://docs.slack.dev/reference/methods/admin.roles.listAssignments """ kwargs.update({"cursor": cursor, "limit": limit, "sort_dir": sort_dir}) if isinstance(entity_ids, (list, tuple)): @@ -1148,7 +1203,7 @@ def admin_roles_removeAssignments( **kwargs, ) -> Union[Future, SlackResponse]: """Removes a set of users from a role for the given scopes and entities - https://api.slack.com/methods/admin.roles.removeAssignments + https://docs.slack.dev/reference/methods/admin.roles.removeAssignments """ kwargs.update({"role_id": role_id}) if isinstance(entity_ids, (list, tuple)): @@ -1170,7 +1225,7 @@ def admin_users_session_reset( **kwargs, ) -> Union[Future, SlackResponse]: """Wipes all valid sessions on all devices for a given user. - https://api.slack.com/methods/admin.users.session.reset + https://docs.slack.dev/reference/methods/admin.users.session.reset """ kwargs.update( { @@ -1190,7 +1245,7 @@ def admin_users_session_resetBulk( **kwargs, ) -> Union[Future, SlackResponse]: """Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users - https://api.slack.com/methods/admin.users.session.resetBulk + https://docs.slack.dev/reference/methods/admin.users.session.resetBulk """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1212,7 +1267,7 @@ def admin_users_session_invalidate( **kwargs, ) -> Union[Future, SlackResponse]: """Invalidate a single session for a user by session_id. - https://api.slack.com/methods/admin.users.session.invalidate + https://docs.slack.dev/reference/methods/admin.users.session.invalidate """ kwargs.update({"session_id": session_id, "team_id": team_id}) return self.api_call("admin.users.session.invalidate", params=kwargs) @@ -1227,7 +1282,7 @@ def admin_users_session_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all active user sessions for an organization - https://api.slack.com/methods/admin.users.session.list + https://docs.slack.dev/reference/methods/admin.users.session.list """ kwargs.update( { @@ -1247,7 +1302,7 @@ def admin_teams_settings_setDefaultChannels( **kwargs, ) -> Union[Future, SlackResponse]: """Set the default channels of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDefaultChannels + https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels """ kwargs.update({"team_id": team_id}) if isinstance(channel_ids, (list, tuple)): @@ -1264,7 +1319,7 @@ def admin_users_session_getSettings( ) -> Union[Future, SlackResponse]: """Get user-specific session settingsβ€”the session duration and what happens when the client closesβ€”given a list of users. - https://api.slack.com/methods/admin.users.session.getSettings + https://docs.slack.dev/reference/methods/admin.users.session.getSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1282,7 +1337,7 @@ def admin_users_session_setSettings( ) -> Union[Future, SlackResponse]: """Configure the user-level session settingsβ€”the session duration and what happens when the client closesβ€”for one or more users. - https://api.slack.com/methods/admin.users.session.setSettings + https://docs.slack.dev/reference/methods/admin.users.session.setSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1304,7 +1359,7 @@ def admin_users_session_clearSettings( ) -> Union[Future, SlackResponse]: """Clear user-specific session settingsβ€”the session duration and what happens when the client closesβ€”for a list of users. - https://api.slack.com/methods/admin.users.session.clearSettings + https://docs.slack.dev/reference/methods/admin.users.session.clearSettings """ if isinstance(user_ids, (list, tuple)): kwargs.update({"user_ids": ",".join(user_ids)}) @@ -1321,7 +1376,7 @@ def admin_users_unsupportedVersions_export( ) -> Union[Future, SlackResponse]: """Ask Slackbot to send you an export listing all workspace members using unsupported software, presented as a zipped CSV file. - https://api.slack.com/methods/admin.users.unsupportedVersions.export + https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export """ kwargs.update( { @@ -1339,7 +1394,7 @@ def admin_inviteRequests_approve( **kwargs, ) -> Union[Future, SlackResponse]: """Approve a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.approve + https://docs.slack.dev/reference/methods/admin.inviteRequests.approve """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.approve", params=kwargs) @@ -1353,7 +1408,7 @@ def admin_inviteRequests_approved_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all approved workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.approved.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list """ kwargs.update( { @@ -1373,7 +1428,7 @@ def admin_inviteRequests_denied_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all denied workspace invite requests. - https://api.slack.com/methods/admin.inviteRequests.denied.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list """ kwargs.update( { @@ -1392,7 +1447,7 @@ def admin_inviteRequests_deny( **kwargs, ) -> Union[Future, SlackResponse]: """Deny a workspace invite request. - https://api.slack.com/methods/admin.inviteRequests.deny + https://docs.slack.dev/reference/methods/admin.inviteRequests.deny """ kwargs.update({"invite_request_id": invite_request_id, "team_id": team_id}) return self.api_call("admin.inviteRequests.deny", params=kwargs) @@ -1413,7 +1468,7 @@ def admin_teams_admins_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.inviteRequests.list + https://docs.slack.dev/reference/methods/admin.inviteRequests.list """ kwargs.update( { @@ -1434,7 +1489,7 @@ def admin_teams_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create an Enterprise team. - https://api.slack.com/methods/admin.teams.create + https://docs.slack.dev/reference/methods/admin.teams.create """ kwargs.update( { @@ -1454,7 +1509,7 @@ def admin_teams_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all teams on an Enterprise organization. - https://api.slack.com/methods/admin.teams.list + https://docs.slack.dev/reference/methods/admin.teams.list """ kwargs.update({"cursor": cursor, "limit": limit}) return self.api_call("admin.teams.list", params=kwargs) @@ -1468,7 +1523,7 @@ def admin_teams_owners_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all of the admins on a given workspace. - https://api.slack.com/methods/admin.teams.owners.list + https://docs.slack.dev/reference/methods/admin.teams.owners.list """ kwargs.update({"team_id": team_id, "cursor": cursor, "limit": limit}) return self.api_call("admin.teams.owners.list", http_verb="GET", params=kwargs) @@ -1480,7 +1535,7 @@ def admin_teams_settings_info( **kwargs, ) -> Union[Future, SlackResponse]: """Fetch information about settings in a workspace - https://api.slack.com/methods/admin.teams.settings.info + https://docs.slack.dev/reference/methods/admin.teams.settings.info """ kwargs.update({"team_id": team_id}) return self.api_call("admin.teams.settings.info", params=kwargs) @@ -1493,7 +1548,7 @@ def admin_teams_settings_setDescription( **kwargs, ) -> Union[Future, SlackResponse]: """Set the description of a given workspace. - https://api.slack.com/methods/admin.teams.settings.setDescription + https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription """ kwargs.update({"team_id": team_id, "description": description}) return self.api_call("admin.teams.settings.setDescription", params=kwargs) @@ -1506,7 +1561,7 @@ def admin_teams_settings_setDiscoverability( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setDiscoverability + https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability """ kwargs.update({"team_id": team_id, "discoverability": discoverability}) return self.api_call("admin.teams.settings.setDiscoverability", params=kwargs) @@ -1519,7 +1574,7 @@ def admin_teams_settings_setIcon( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setIcon + https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon """ kwargs.update({"team_id": team_id, "image_url": image_url}) return self.api_call("admin.teams.settings.setIcon", http_verb="GET", params=kwargs) @@ -1532,7 +1587,7 @@ def admin_teams_settings_setName( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the icon of a workspace. - https://api.slack.com/methods/admin.teams.settings.setName + https://docs.slack.dev/reference/methods/admin.teams.settings.setName """ kwargs.update({"team_id": team_id, "name": name}) return self.api_call("admin.teams.settings.setName", params=kwargs) @@ -1546,7 +1601,7 @@ def admin_usergroups_addChannels( **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.addChannels + https://docs.slack.dev/reference/methods/admin.usergroups.addChannels """ kwargs.update({"team_id": team_id, "usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1564,7 +1619,7 @@ def admin_usergroups_addTeams( **kwargs, ) -> Union[Future, SlackResponse]: """Associate one or more default workspaces with an organization-wide IDP group. - https://api.slack.com/methods/admin.usergroups.addTeams + https://docs.slack.dev/reference/methods/admin.usergroups.addTeams """ kwargs.update({"usergroup_id": usergroup_id, "auto_provision": auto_provision}) if isinstance(team_ids, (list, tuple)): @@ -1582,7 +1637,7 @@ def admin_usergroups_listChannels( **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.listChannels + https://docs.slack.dev/reference/methods/admin.usergroups.listChannels """ kwargs.update( { @@ -1601,7 +1656,7 @@ def admin_usergroups_removeChannels( **kwargs, ) -> Union[Future, SlackResponse]: """Add one or more default channels to an IDP group. - https://api.slack.com/methods/admin.usergroups.removeChannels + https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels """ kwargs.update({"usergroup_id": usergroup_id}) if isinstance(channel_ids, (list, tuple)): @@ -1621,7 +1676,7 @@ def admin_users_assign( **kwargs, ) -> Union[Future, SlackResponse]: """Add an Enterprise user to a workspace. - https://api.slack.com/methods/admin.users.assign + https://docs.slack.dev/reference/methods/admin.users.assign """ kwargs.update( { @@ -1653,7 +1708,7 @@ def admin_users_invite( **kwargs, ) -> Union[Future, SlackResponse]: """Invite a user to a workspace. - https://api.slack.com/methods/admin.users.invite + https://docs.slack.dev/reference/methods/admin.users.invite """ kwargs.update( { @@ -1677,7 +1732,7 @@ def admin_users_invite( def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -1685,7 +1740,7 @@ def admin_users_list( **kwargs, ) -> Union[Future, SlackResponse]: """List users on a workspace - https://api.slack.com/methods/admin.users.list + https://docs.slack.dev/reference/methods/admin.users.list """ kwargs.update( { @@ -1706,7 +1761,7 @@ def admin_users_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove a user from a workspace. - https://api.slack.com/methods/admin.users.remove + https://docs.slack.dev/reference/methods/admin.users.remove """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.remove", params=kwargs) @@ -1719,7 +1774,7 @@ def admin_users_setAdmin( **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or owner to be an admin user. - https://api.slack.com/methods/admin.users.setAdmin + https://docs.slack.dev/reference/methods/admin.users.setAdmin """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setAdmin", params=kwargs) @@ -1733,7 +1788,7 @@ def admin_users_setExpiration( **kwargs, ) -> Union[Future, SlackResponse]: """Set an expiration for a guest user. - https://api.slack.com/methods/admin.users.setExpiration + https://docs.slack.dev/reference/methods/admin.users.setExpiration """ kwargs.update({"expiration_ts": expiration_ts, "team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setExpiration", params=kwargs) @@ -1746,7 +1801,7 @@ def admin_users_setOwner( **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest, regular user, or admin user to be a workspace owner. - https://api.slack.com/methods/admin.users.setOwner + https://docs.slack.dev/reference/methods/admin.users.setOwner """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setOwner", params=kwargs) @@ -1759,7 +1814,7 @@ def admin_users_setRegular( **kwargs, ) -> Union[Future, SlackResponse]: """Set an existing guest user, admin user, or owner to be a regular user. - https://api.slack.com/methods/admin.users.setRegular + https://docs.slack.dev/reference/methods/admin.users.setRegular """ kwargs.update({"team_id": team_id, "user_id": user_id}) return self.api_call("admin.users.setRegular", params=kwargs) @@ -1780,7 +1835,7 @@ def admin_workflows_search( **kwargs, ) -> Union[Future, SlackResponse]: """Search workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.search + https://docs.slack.dev/reference/methods/admin.workflows.search """ if collaborator_ids is not None: if isinstance(collaborator_ids, (list, tuple)): @@ -1810,7 +1865,7 @@ def admin_workflows_permissions_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Look up the permissions for a set of workflows - https://api.slack.com/methods/admin.workflows.permissions.lookup + https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1831,7 +1886,7 @@ def admin_workflows_collaborators_add( **kwargs, ) -> Union[Future, SlackResponse]: """Add collaborators to workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.add + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1851,7 +1906,7 @@ def admin_workflows_collaborators_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove collaborators from workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.collaborators.remove + https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove """ if isinstance(collaborator_ids, (list, tuple)): kwargs.update({"collaborator_ids": ",".join(collaborator_ids)}) @@ -1870,7 +1925,7 @@ def admin_workflows_unpublish( **kwargs, ) -> Union[Future, SlackResponse]: """Unpublish workflows within the team or enterprise - https://api.slack.com/methods/admin.workflows.unpublish + https://docs.slack.dev/reference/methods/admin.workflows.unpublish """ if isinstance(workflow_ids, (list, tuple)): kwargs.update({"workflow_ids": ",".join(workflow_ids)}) @@ -1885,7 +1940,7 @@ def api_test( **kwargs, ) -> Union[Future, SlackResponse]: """Checks API calling code. - https://api.slack.com/methods/api.test + https://docs.slack.dev/reference/methods/api.test """ kwargs.update({"error": error}) return self.api_call("api.test", params=kwargs) @@ -1898,7 +1953,7 @@ def apps_connections_open( ) -> Union[Future, SlackResponse]: """Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads - https://api.slack.com/methods/apps.connections.open + https://docs.slack.dev/reference/methods/apps.connections.open """ kwargs.update({"token": app_token}) return self.api_call("apps.connections.open", http_verb="POST", params=kwargs) @@ -1913,7 +1968,7 @@ def apps_event_authorizations_list( ) -> Union[Future, SlackResponse]: """Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to. - https://api.slack.com/methods/apps.event.authorizations.list + https://docs.slack.dev/reference/methods/apps.event.authorizations.list """ kwargs.update({"event_context": event_context, "cursor": cursor, "limit": limit}) return self.api_call("apps.event.authorizations.list", params=kwargs) @@ -1926,7 +1981,7 @@ def apps_uninstall( **kwargs, ) -> Union[Future, SlackResponse]: """Uninstalls your app from a workspace. - https://api.slack.com/methods/apps.uninstall + https://docs.slack.dev/reference/methods/apps.uninstall """ kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) @@ -1938,7 +1993,7 @@ def apps_manifest_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create an app from an app manifest - https://api.slack.com/methods/apps.manifest.create + https://docs.slack.dev/reference/methods/apps.manifest.create """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1953,7 +2008,7 @@ def apps_manifest_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Permanently deletes an app created through app manifests - https://api.slack.com/methods/apps.manifest.delete + https://docs.slack.dev/reference/methods/apps.manifest.delete """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.delete", params=kwargs) @@ -1965,7 +2020,7 @@ def apps_manifest_export( **kwargs, ) -> Union[Future, SlackResponse]: """Export an app manifest from an existing app - https://api.slack.com/methods/apps.manifest.export + https://docs.slack.dev/reference/methods/apps.manifest.export """ kwargs.update({"app_id": app_id}) return self.api_call("apps.manifest.export", params=kwargs) @@ -1978,7 +2033,7 @@ def apps_manifest_update( **kwargs, ) -> Union[Future, SlackResponse]: """Update an app from an app manifest - https://api.slack.com/methods/apps.manifest.update + https://docs.slack.dev/reference/methods/apps.manifest.update """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -1995,7 +2050,7 @@ def apps_manifest_validate( **kwargs, ) -> Union[Future, SlackResponse]: """Validate an app manifest - https://api.slack.com/methods/apps.manifest.validate + https://docs.slack.dev/reference/methods/apps.manifest.validate """ if isinstance(manifest, str): kwargs.update({"manifest": manifest}) @@ -2011,7 +2066,7 @@ def tooling_tokens_rotate( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a refresh token for a new app configuration token - https://api.slack.com/methods/tooling.tokens.rotate + https://docs.slack.dev/reference/methods/tooling.tokens.rotate """ kwargs.update({"refresh_token": refresh_token}) return self.api_call("tooling.tokens.rotate", params=kwargs) @@ -2022,13 +2077,17 @@ def assistant_threads_setStatus( channel_id: str, thread_ts: str, status: str, + loading_messages: Optional[List[str]] = None, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setStatus + """Set the status for an AI assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setStatus """ - kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "status": status}) - return self.api_call("assistant.threads.setStatus", params=kwargs) + kwargs.update( + {"channel_id": channel_id, "thread_ts": thread_ts, "status": status, "loading_messages": loading_messages} + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("assistant.threads.setStatus", json=kwargs) def assistant_threads_setTitle( self, @@ -2038,8 +2097,8 @@ def assistant_threads_setTitle( title: str, **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setTitle + """Set the title for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setTitle """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "title": title}) return self.api_call("assistant.threads.setTitle", params=kwargs) @@ -2053,8 +2112,8 @@ def assistant_threads_setSuggestedPrompts( prompts: List[Dict[str, str]], **kwargs, ) -> Union[Future, SlackResponse]: - """Revokes a token. - https://api.slack.com/methods/assistant.threads.setSuggestedPrompts + """Set suggested prompts for the given assistant thread. + https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts """ kwargs.update({"channel_id": channel_id, "thread_ts": thread_ts, "prompts": prompts}) if title is not None: @@ -2068,7 +2127,7 @@ def auth_revoke( **kwargs, ) -> Union[Future, SlackResponse]: """Revokes a token. - https://api.slack.com/methods/auth.revoke + https://docs.slack.dev/reference/methods/auth.revoke """ kwargs.update({"test": test}) return self.api_call("auth.revoke", http_verb="GET", params=kwargs) @@ -2078,7 +2137,7 @@ def auth_test( **kwargs, ) -> Union[Future, SlackResponse]: """Checks authentication & identity. - https://api.slack.com/methods/auth.test + https://docs.slack.dev/reference/methods/auth.test """ return self.api_call("auth.test", params=kwargs) @@ -2090,7 +2149,7 @@ def auth_teams_list( **kwargs, ) -> Union[Future, SlackResponse]: """List the workspaces a token can access. - https://api.slack.com/methods/auth.teams.list + https://docs.slack.dev/reference/methods/auth.teams.list """ kwargs.update({"cursor": cursor, "limit": limit, "include_icon": include_icon}) return self.api_call("auth.teams.list", params=kwargs) @@ -2108,7 +2167,7 @@ def bookmarks_add( **kwargs, ) -> Union[Future, SlackResponse]: """Add bookmark to a channel. - https://api.slack.com/methods/bookmarks.add + https://docs.slack.dev/reference/methods/bookmarks.add """ kwargs.update( { @@ -2134,7 +2193,7 @@ def bookmarks_edit( **kwargs, ) -> Union[Future, SlackResponse]: """Edit bookmark. - https://api.slack.com/methods/bookmarks.edit + https://docs.slack.dev/reference/methods/bookmarks.edit """ kwargs.update( { @@ -2154,7 +2213,7 @@ def bookmarks_list( **kwargs, ) -> Union[Future, SlackResponse]: """List bookmark for the channel. - https://api.slack.com/methods/bookmarks.list + https://docs.slack.dev/reference/methods/bookmarks.list """ kwargs.update({"channel_id": channel_id}) return self.api_call("bookmarks.list", http_verb="POST", params=kwargs) @@ -2167,7 +2226,7 @@ def bookmarks_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove bookmark from the channel. - https://api.slack.com/methods/bookmarks.remove + https://docs.slack.dev/reference/methods/bookmarks.remove """ kwargs.update({"bookmark_id": bookmark_id, "channel_id": channel_id}) return self.api_call("bookmarks.remove", http_verb="POST", params=kwargs) @@ -2180,7 +2239,7 @@ def bots_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a bot user. - https://api.slack.com/methods/bots.info + https://docs.slack.dev/reference/methods/bots.info """ kwargs.update({"bot": bot, "team_id": team_id}) return self.api_call("bots.info", http_verb="GET", params=kwargs) @@ -2199,7 +2258,7 @@ def calls_add( **kwargs, ) -> Union[Future, SlackResponse]: """Registers a new Call. - https://api.slack.com/methods/calls.add + https://docs.slack.dev/reference/methods/calls.add """ kwargs.update( { @@ -2226,7 +2285,7 @@ def calls_end( **kwargs, ) -> Union[Future, SlackResponse]: """Ends a Call. - https://api.slack.com/methods/calls.end + https://docs.slack.dev/reference/methods/calls.end """ kwargs.update({"id": id, "duration": duration}) return self.api_call("calls.end", http_verb="POST", params=kwargs) @@ -2238,7 +2297,7 @@ def calls_info( **kwargs, ) -> Union[Future, SlackResponse]: """Returns information about a Call. - https://api.slack.com/methods/calls.info + https://docs.slack.dev/reference/methods/calls.info """ kwargs.update({"id": id}) return self.api_call("calls.info", http_verb="POST", params=kwargs) @@ -2251,7 +2310,7 @@ def calls_participants_add( **kwargs, ) -> Union[Future, SlackResponse]: """Registers new participants added to a Call. - https://api.slack.com/methods/calls.participants.add + https://docs.slack.dev/reference/methods/calls.participants.add """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2265,7 +2324,7 @@ def calls_participants_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Registers participants removed from a Call. - https://api.slack.com/methods/calls.participants.remove + https://docs.slack.dev/reference/methods/calls.participants.remove """ kwargs.update({"id": id}) _update_call_participants(kwargs, users) @@ -2281,7 +2340,7 @@ def calls_update( **kwargs, ) -> Union[Future, SlackResponse]: """Updates information about a Call. - https://api.slack.com/methods/calls.update + https://docs.slack.dev/reference/methods/calls.update """ kwargs.update( { @@ -2301,7 +2360,7 @@ def canvases_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create Canvas for a user - https://api.slack.com/methods/canvases.create + https://docs.slack.dev/reference/methods/canvases.create """ kwargs.update({"title": title, "document_content": document_content}) return self.api_call("canvases.create", json=kwargs) @@ -2314,7 +2373,7 @@ def canvases_edit( **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing canvas - https://api.slack.com/methods/canvases.edit + https://docs.slack.dev/reference/methods/canvases.edit """ kwargs.update({"canvas_id": canvas_id, "changes": changes}) return self.api_call("canvases.edit", json=kwargs) @@ -2326,7 +2385,7 @@ def canvases_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a canvas - https://api.slack.com/methods/canvases.delete + https://docs.slack.dev/reference/methods/canvases.delete """ kwargs.update({"canvas_id": canvas_id}) return self.api_call("canvases.delete", params=kwargs) @@ -2341,7 +2400,7 @@ def canvases_access_set( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the access level to a canvas for specified entities - https://api.slack.com/methods/canvases.access.set + https://docs.slack.dev/reference/methods/canvases.access.set """ kwargs.update({"canvas_id": canvas_id, "access_level": access_level}) if channel_ids is not None: @@ -2366,7 +2425,7 @@ def canvases_access_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/canvases.access.delete + https://docs.slack.dev/reference/methods/canvases.access.delete """ kwargs.update({"canvas_id": canvas_id}) if channel_ids is not None: @@ -2389,7 +2448,7 @@ def canvases_sections_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Find sections matching the provided criteria - https://api.slack.com/methods/canvases.sections.lookup + https://docs.slack.dev/reference/methods/canvases.sections.lookup """ kwargs.update({"canvas_id": canvas_id, "criteria": json.dumps(criteria)}) return self.api_call("canvases.sections.lookup", params=kwargs) @@ -2397,7 +2456,7 @@ def canvases_sections_lookup( # -------------------------- # Deprecated: channels.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def channels_archive( @@ -2567,6 +2626,27 @@ def channels_unarchive( # -------------------------- + def chat_appendStream( + self, + *, + channel: str, + ts: str, + markdown_text: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Appends text to an existing streaming conversation. + https://docs.slack.dev/reference/methods/chat.appendStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.appendStream", json=kwargs) + def chat_delete( self, *, @@ -2576,7 +2656,7 @@ def chat_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a message. - https://api.slack.com/methods/chat.delete + https://docs.slack.dev/reference/methods/chat.delete """ kwargs.update({"channel": channel, "ts": ts, "as_user": as_user}) return self.api_call("chat.delete", params=kwargs) @@ -2590,7 +2670,7 @@ def chat_deleteScheduledMessage( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a scheduled message. - https://api.slack.com/methods/chat.deleteScheduledMessage + https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage """ kwargs.update( { @@ -2609,7 +2689,7 @@ def chat_getPermalink( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a permalink URL for a specific extant message - https://api.slack.com/methods/chat.getPermalink + https://docs.slack.dev/reference/methods/chat.getPermalink """ kwargs.update({"channel": channel, "message_ts": message_ts}) return self.api_call("chat.getPermalink", http_verb="GET", params=kwargs) @@ -2622,7 +2702,7 @@ def chat_meMessage( **kwargs, ) -> Union[Future, SlackResponse]: """Share a me message into a channel. - https://api.slack.com/methods/chat.meMessage + https://docs.slack.dev/reference/methods/chat.meMessage """ kwargs.update({"channel": channel, "text": text}) return self.api_call("chat.meMessage", params=kwargs) @@ -2642,10 +2722,11 @@ def chat_postEphemeral( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. - https://api.slack.com/methods/chat.postEphemeral + https://docs.slack.dev/reference/methods/chat.postEphemeral """ kwargs.update( { @@ -2661,11 +2742,12 @@ def chat_postEphemeral( "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2688,11 +2770,12 @@ def chat_postMessage( link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, # none, full - metadata: Optional[Union[Dict, Metadata]] = None, + metadata: Optional[Union[Dict, Metadata, EventAndEntityMetadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. - https://api.slack.com/methods/chat.postMessage + https://docs.slack.dev/reference/methods/chat.postMessage """ kwargs.update( { @@ -2713,11 +2796,12 @@ def chat_postMessage( "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2726,7 +2810,7 @@ def chat_scheduleMessage( *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2737,10 +2821,11 @@ def chat_scheduleMessage( unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. - https://api.slack.com/methods/chat.scheduleMessage + https://docs.slack.dev/reference/methods/chat.scheduleMessage """ kwargs.update( { @@ -2757,14 +2842,92 @@ def chat_scheduleMessage( "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) + def chat_scheduledMessages_list( + self, + *, + channel: Optional[str] = None, + cursor: Optional[str] = None, + latest: Optional[str] = None, + limit: Optional[int] = None, + oldest: Optional[str] = None, + team_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Lists all scheduled messages. + https://docs.slack.dev/reference/methods/chat.scheduledMessages.list + """ + kwargs.update( + { + "channel": channel, + "cursor": cursor, + "latest": latest, + "limit": limit, + "oldest": oldest, + "team_id": team_id, + } + ) + return self.api_call("chat.scheduledMessages.list", params=kwargs) + + def chat_startStream( + self, + *, + channel: str, + thread_ts: str, + markdown_text: Optional[str] = None, + recipient_team_id: Optional[str] = None, + recipient_user_id: Optional[str] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Starts a new streaming conversation. + https://docs.slack.dev/reference/methods/chat.startStream + """ + kwargs.update( + { + "channel": channel, + "thread_ts": thread_ts, + "markdown_text": markdown_text, + "recipient_team_id": recipient_team_id, + "recipient_user_id": recipient_user_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.startStream", json=kwargs) + + def chat_stopStream( + self, + *, + channel: str, + ts: str, + markdown_text: Optional[str] = None, + blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, + metadata: Optional[Union[Dict, Metadata]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Stops a streaming conversation. + https://docs.slack.dev/reference/methods/chat.stopStream + """ + kwargs.update( + { + "channel": channel, + "ts": ts, + "markdown_text": markdown_text, + "blocks": blocks, + "metadata": metadata, + } + ) + _parse_web_class_objects(kwargs) + kwargs = _remove_none_values(kwargs) + return self.api_call("chat.stopStream", json=kwargs) + def chat_unfurl( self, *, @@ -2773,6 +2936,7 @@ def chat_unfurl( source: Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: Optional[Dict[str, Dict]] = None, # or user_auth_* + metadata: Optional[Union[Dict, EventAndEntityMetadata]] = None, user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, user_auth_message: Optional[str] = None, user_auth_required: Optional[bool] = None, @@ -2780,7 +2944,7 @@ def chat_unfurl( **kwargs, ) -> Union[Future, SlackResponse]: """Provide custom unfurl behavior for user-posted URLs. - https://api.slack.com/methods/chat.unfurl + https://docs.slack.dev/reference/methods/chat.unfurl """ kwargs.update( { @@ -2789,6 +2953,7 @@ def chat_unfurl( "source": source, "unfurl_id": unfurl_id, "unfurls": unfurls, + "metadata": metadata, "user_auth_blocks": user_auth_blocks, "user_auth_message": user_auth_message, "user_auth_required": user_auth_required, @@ -2814,10 +2979,11 @@ def chat_update( parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. - https://api.slack.com/methods/chat.update + https://docs.slack.dev/reference/methods/chat.update """ kwargs.update( { @@ -2831,6 +2997,7 @@ def chat_update( "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2839,36 +3006,10 @@ def chat_update( kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) - def chat_scheduledMessages_list( - self, - *, - channel: Optional[str] = None, - cursor: Optional[str] = None, - latest: Optional[str] = None, - limit: Optional[int] = None, - oldest: Optional[str] = None, - team_id: Optional[str] = None, - **kwargs, - ) -> Union[Future, SlackResponse]: - """Lists all scheduled messages. - https://api.slack.com/methods/chat.scheduledMessages.list - """ - kwargs.update( - { - "channel": channel, - "cursor": cursor, - "latest": latest, - "limit": limit, - "oldest": oldest, - "team_id": team_id, - } - ) - return self.api_call("chat.scheduledMessages.list", params=kwargs) - def conversations_acceptSharedInvite( self, *, @@ -2881,7 +3022,7 @@ def conversations_acceptSharedInvite( **kwargs, ) -> Union[Future, SlackResponse]: """Accepts an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.acceptSharedInvite + https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite """ if channel_id is None and invite_id is None: raise e.SlackRequestError("Either channel_id or invite_id must be provided.") @@ -2905,7 +3046,7 @@ def conversations_approveSharedInvite( **kwargs, ) -> Union[Future, SlackResponse]: """Approves an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.approveSharedInvite + https://docs.slack.dev/reference/methods/conversations.approveSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.approveSharedInvite", http_verb="POST", params=kwargs) @@ -2917,7 +3058,7 @@ def conversations_archive( **kwargs, ) -> Union[Future, SlackResponse]: """Archives a conversation. - https://api.slack.com/methods/conversations.archive + https://docs.slack.dev/reference/methods/conversations.archive """ kwargs.update({"channel": channel}) return self.api_call("conversations.archive", params=kwargs) @@ -2929,7 +3070,7 @@ def conversations_close( **kwargs, ) -> Union[Future, SlackResponse]: """Closes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.close + https://docs.slack.dev/reference/methods/conversations.close """ kwargs.update({"channel": channel}) return self.api_call("conversations.close", params=kwargs) @@ -2943,7 +3084,7 @@ def conversations_create( **kwargs, ) -> Union[Future, SlackResponse]: """Initiates a public or private channel-based conversation - https://api.slack.com/methods/conversations.create + https://docs.slack.dev/reference/methods/conversations.create """ kwargs.update({"name": name, "is_private": is_private, "team_id": team_id}) return self.api_call("conversations.create", params=kwargs) @@ -2956,7 +3097,7 @@ def conversations_declineSharedInvite( **kwargs, ) -> Union[Future, SlackResponse]: """Declines a Slack Connect channel invite. - https://api.slack.com/methods/conversations.declineSharedInvite + https://docs.slack.dev/reference/methods/conversations.declineSharedInvite """ kwargs.update({"invite_id": invite_id, "target_team": target_team}) return self.api_call("conversations.declineSharedInvite", http_verb="GET", params=kwargs) @@ -2965,7 +3106,7 @@ def conversations_externalInvitePermissions_set( self, *, action: str, channel: str, target_team: str, **kwargs ) -> Union[Future, SlackResponse]: """Sets a team in a shared External Limited channel to a shared Slack Connect channel or vice versa. - https://api.slack.com/methods/conversations.externalInvitePermissions.set + https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set """ kwargs.update( { @@ -2989,7 +3130,7 @@ def conversations_history( **kwargs, ) -> Union[Future, SlackResponse]: """Fetches a conversation's history of messages and events. - https://api.slack.com/methods/conversations.history + https://docs.slack.dev/reference/methods/conversations.history """ kwargs.update( { @@ -3013,7 +3154,7 @@ def conversations_info( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a conversation. - https://api.slack.com/methods/conversations.info + https://docs.slack.dev/reference/methods/conversations.info """ kwargs.update( { @@ -3033,7 +3174,7 @@ def conversations_invite( **kwargs, ) -> Union[Future, SlackResponse]: """Invites users to a channel. - https://api.slack.com/methods/conversations.invite + https://docs.slack.dev/reference/methods/conversations.invite """ kwargs.update( { @@ -3056,7 +3197,7 @@ def conversations_inviteShared( **kwargs, ) -> Union[Future, SlackResponse]: """Sends an invitation to a Slack Connect channel. - https://api.slack.com/methods/conversations.inviteShared + https://docs.slack.dev/reference/methods/conversations.inviteShared """ if emails is None and user_ids is None: raise e.SlackRequestError("Either emails or user ids must be provided.") @@ -3078,7 +3219,7 @@ def conversations_join( **kwargs, ) -> Union[Future, SlackResponse]: """Joins an existing conversation. - https://api.slack.com/methods/conversations.join + https://docs.slack.dev/reference/methods/conversations.join """ kwargs.update({"channel": channel}) return self.api_call("conversations.join", params=kwargs) @@ -3091,7 +3232,7 @@ def conversations_kick( **kwargs, ) -> Union[Future, SlackResponse]: """Removes a user from a conversation. - https://api.slack.com/methods/conversations.kick + https://docs.slack.dev/reference/methods/conversations.kick """ kwargs.update({"channel": channel, "user": user}) return self.api_call("conversations.kick", params=kwargs) @@ -3103,7 +3244,7 @@ def conversations_leave( **kwargs, ) -> Union[Future, SlackResponse]: """Leaves a conversation. - https://api.slack.com/methods/conversations.leave + https://docs.slack.dev/reference/methods/conversations.leave """ kwargs.update({"channel": channel}) return self.api_call("conversations.leave", params=kwargs) @@ -3119,7 +3260,7 @@ def conversations_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all channels in a Slack team. - https://api.slack.com/methods/conversations.list + https://docs.slack.dev/reference/methods/conversations.list """ kwargs.update( { @@ -3145,7 +3286,7 @@ def conversations_listConnectInvites( ) -> Union[Future, SlackResponse]: """List shared channel invites that have been generated or received but have not yet been approved by all parties. - https://api.slack.com/methods/conversations.listConnectInvites + https://docs.slack.dev/reference/methods/conversations.listConnectInvites """ kwargs.update({"count": count, "cursor": cursor, "team_id": team_id}) return self.api_call("conversations.listConnectInvites", params=kwargs) @@ -3158,7 +3299,7 @@ def conversations_mark( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the read cursor in a channel. - https://api.slack.com/methods/conversations.mark + https://docs.slack.dev/reference/methods/conversations.mark """ kwargs.update({"channel": channel, "ts": ts}) return self.api_call("conversations.mark", params=kwargs) @@ -3172,7 +3313,7 @@ def conversations_members( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve members of a conversation. - https://api.slack.com/methods/conversations.members + https://docs.slack.dev/reference/methods/conversations.members """ kwargs.update({"channel": channel, "cursor": cursor, "limit": limit}) return self.api_call("conversations.members", http_verb="GET", params=kwargs) @@ -3186,7 +3327,7 @@ def conversations_open( **kwargs, ) -> Union[Future, SlackResponse]: """Opens or resumes a direct message or multi-person direct message. - https://api.slack.com/methods/conversations.open + https://docs.slack.dev/reference/methods/conversations.open """ if channel is None and users is None: raise e.SlackRequestError("Either channel or users must be provided.") @@ -3205,7 +3346,7 @@ def conversations_rename( **kwargs, ) -> Union[Future, SlackResponse]: """Renames a conversation. - https://api.slack.com/methods/conversations.rename + https://docs.slack.dev/reference/methods/conversations.rename """ kwargs.update({"channel": channel, "name": name}) return self.api_call("conversations.rename", params=kwargs) @@ -3224,7 +3365,7 @@ def conversations_replies( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a thread of messages posted to a conversation - https://api.slack.com/methods/conversations.replies + https://docs.slack.dev/reference/methods/conversations.replies """ kwargs.update( { @@ -3250,7 +3391,7 @@ def conversations_requestSharedInvite_approve( **kwargs, ) -> Union[Future, SlackResponse]: """Approve a request to add an external user to a channel. This also sends them a Slack Connect invite. - https://api.slack.com/methods/conversations.requestSharedInvite.approve + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve """ kwargs.update( { @@ -3271,7 +3412,7 @@ def conversations_requestSharedInvite_deny( **kwargs, ) -> Union[Future, SlackResponse]: """Deny a request to invite an external user to a channel. - https://api.slack.com/methods/conversations.requestSharedInvite.deny + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny """ kwargs.update({"invite_id": invite_id, "message": message}) return self.api_call("conversations.requestSharedInvite.deny", params=kwargs) @@ -3289,7 +3430,7 @@ def conversations_requestSharedInvite_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists requests to add external users to channels with ability to filter. - https://api.slack.com/methods/conversations.requestSharedInvite.list + https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list """ kwargs.update( { @@ -3316,7 +3457,7 @@ def conversations_setPurpose( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the purpose for a conversation. - https://api.slack.com/methods/conversations.setPurpose + https://docs.slack.dev/reference/methods/conversations.setPurpose """ kwargs.update({"channel": channel, "purpose": purpose}) return self.api_call("conversations.setPurpose", params=kwargs) @@ -3329,7 +3470,7 @@ def conversations_setTopic( **kwargs, ) -> Union[Future, SlackResponse]: """Sets the topic for a conversation. - https://api.slack.com/methods/conversations.setTopic + https://docs.slack.dev/reference/methods/conversations.setTopic """ kwargs.update({"channel": channel, "topic": topic}) return self.api_call("conversations.setTopic", params=kwargs) @@ -3341,7 +3482,7 @@ def conversations_unarchive( **kwargs, ) -> Union[Future, SlackResponse]: """Reverses conversation archival. - https://api.slack.com/methods/conversations.unarchive + https://docs.slack.dev/reference/methods/conversations.unarchive """ kwargs.update({"channel": channel}) return self.api_call("conversations.unarchive", params=kwargs) @@ -3354,7 +3495,7 @@ def conversations_canvases_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create a Channel Canvas for a channel - https://api.slack.com/methods/conversations.canvases.create + https://docs.slack.dev/reference/methods/conversations.canvases.create """ kwargs.update({"channel_id": channel_id, "document_content": document_content}) return self.api_call("conversations.canvases.create", json=kwargs) @@ -3367,7 +3508,7 @@ def dialog_open( **kwargs, ) -> Union[Future, SlackResponse]: """Open a dialog with a user. - https://api.slack.com/methods/dialog.open + https://docs.slack.dev/reference/methods/dialog.open """ kwargs.update({"dialog": dialog, "trigger_id": trigger_id}) kwargs = _remove_none_values(kwargs) @@ -3379,7 +3520,7 @@ def dnd_endDnd( **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's Do Not Disturb session immediately. - https://api.slack.com/methods/dnd.endDnd + https://docs.slack.dev/reference/methods/dnd.endDnd """ return self.api_call("dnd.endDnd", params=kwargs) @@ -3388,7 +3529,7 @@ def dnd_endSnooze( **kwargs, ) -> Union[Future, SlackResponse]: """Ends the current user's snooze mode immediately. - https://api.slack.com/methods/dnd.endSnooze + https://docs.slack.dev/reference/methods/dnd.endSnooze """ return self.api_call("dnd.endSnooze", params=kwargs) @@ -3400,7 +3541,7 @@ def dnd_info( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's current Do Not Disturb status. - https://api.slack.com/methods/dnd.info + https://docs.slack.dev/reference/methods/dnd.info """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("dnd.info", http_verb="GET", params=kwargs) @@ -3412,7 +3553,7 @@ def dnd_setSnooze( **kwargs, ) -> Union[Future, SlackResponse]: """Turns on Do Not Disturb mode for the current user, or changes its duration. - https://api.slack.com/methods/dnd.setSnooze + https://docs.slack.dev/reference/methods/dnd.setSnooze """ kwargs.update({"num_minutes": num_minutes}) return self.api_call("dnd.setSnooze", http_verb="GET", params=kwargs) @@ -3424,7 +3565,7 @@ def dnd_teamInfo( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves the Do Not Disturb status for users on a team. - https://api.slack.com/methods/dnd.teamInfo + https://docs.slack.dev/reference/methods/dnd.teamInfo """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -3439,11 +3580,35 @@ def emoji_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists custom emoji for a team. - https://api.slack.com/methods/emoji.list + https://docs.slack.dev/reference/methods/emoji.list """ kwargs.update({"include_categories": include_categories}) return self.api_call("emoji.list", http_verb="GET", params=kwargs) + def entity_presentDetails( + self, + trigger_id: str, + metadata: Optional[Union[Dict, EntityMetadata]] = None, + user_auth_required: Optional[bool] = None, + user_auth_url: Optional[str] = None, + error: Optional[Dict[str, Any]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Provides entity details for the flexpane. + https://docs.slack.dev/reference/methods/entity.presentDetails/ + """ + kwargs.update({"trigger_id": trigger_id}) + if metadata is not None: + kwargs.update({"metadata": metadata}) + if user_auth_required is not None: + kwargs.update({"user_auth_required": user_auth_required}) + if user_auth_url is not None: + kwargs.update({"user_auth_url": user_auth_url}) + if error is not None: + kwargs.update({"error": error}) + _parse_web_class_objects(kwargs) + return self.api_call("entity.presentDetails", json=kwargs) + def files_comments_delete( self, *, @@ -3452,7 +3617,7 @@ def files_comments_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes an existing comment on a file. - https://api.slack.com/methods/files.comments.delete + https://docs.slack.dev/reference/methods/files.comments.delete """ kwargs.update({"file": file, "id": id}) return self.api_call("files.comments.delete", params=kwargs) @@ -3464,7 +3629,7 @@ def files_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a file. - https://api.slack.com/methods/files.delete + https://docs.slack.dev/reference/methods/files.delete """ kwargs.update({"file": file}) return self.api_call("files.delete", params=kwargs) @@ -3480,7 +3645,7 @@ def files_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a team file. - https://api.slack.com/methods/files.info + https://docs.slack.dev/reference/methods/files.info """ kwargs.update( { @@ -3508,7 +3673,7 @@ def files_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists & filters team files. - https://api.slack.com/methods/files.list + https://docs.slack.dev/reference/methods/files.list """ kwargs.update( { @@ -3536,7 +3701,7 @@ def files_remote_info( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.info + https://docs.slack.dev/reference/methods/files.remote.info """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.info", http_verb="GET", params=kwargs) @@ -3552,7 +3717,7 @@ def files_remote_list( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve information about a remote file added to Slack. - https://api.slack.com/methods/files.remote.list + https://docs.slack.dev/reference/methods/files.remote.list """ kwargs.update( { @@ -3577,7 +3742,7 @@ def files_remote_add( **kwargs, ) -> Union[Future, SlackResponse]: """Adds a file from a remote service. - https://api.slack.com/methods/files.remote.add + https://docs.slack.dev/reference/methods/files.remote.add """ kwargs.update( { @@ -3616,7 +3781,7 @@ def files_remote_update( **kwargs, ) -> Union[Future, SlackResponse]: """Updates an existing remote file. - https://api.slack.com/methods/files.remote.update + https://docs.slack.dev/reference/methods/files.remote.update """ kwargs.update( { @@ -3651,7 +3816,7 @@ def files_remote_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Remove a remote file. - https://api.slack.com/methods/files.remote.remove + https://docs.slack.dev/reference/methods/files.remote.remove """ kwargs.update({"external_id": external_id, "file": file}) return self.api_call("files.remote.remove", http_verb="POST", params=kwargs) @@ -3665,7 +3830,7 @@ def files_remote_share( **kwargs, ) -> Union[Future, SlackResponse]: """Share a remote file into a channel. - https://api.slack.com/methods/files.remote.share + https://docs.slack.dev/reference/methods/files.remote.share """ if external_id is None and file is None: raise e.SlackRequestError("Either external_id or file must be provided.") @@ -3683,7 +3848,7 @@ def files_revokePublicURL( **kwargs, ) -> Union[Future, SlackResponse]: """Revokes public/external sharing access for a file - https://api.slack.com/methods/files.revokePublicURL + https://docs.slack.dev/reference/methods/files.revokePublicURL """ kwargs.update({"file": file}) return self.api_call("files.revokePublicURL", params=kwargs) @@ -3695,7 +3860,7 @@ def files_sharedPublicURL( **kwargs, ) -> Union[Future, SlackResponse]: """Enables a file for public/external sharing. - https://api.slack.com/methods/files.sharedPublicURL + https://docs.slack.dev/reference/methods/files.sharedPublicURL """ kwargs.update({"file": file}) return self.api_call("files.sharedPublicURL", params=kwargs) @@ -3714,7 +3879,7 @@ def files_upload( **kwargs, ) -> Union[Future, SlackResponse]: """Uploads or creates a file. - https://api.slack.com/methods/files.upload + https://docs.slack.dev/reference/methods/files.upload """ _print_files_upload_v2_suggestion() @@ -3767,12 +3932,12 @@ def files_upload_v2( ) -> Union[Future, SlackResponse]: """This wrapper method provides an easy way to upload files using the following endpoints: - - step1: https://api.slack.com/methods/files.getUploadURLExternal + - step1: https://docs.slack.dev/reference/methods/files.getUploadURLExternal - step2: "https://files.slack.com/upload/v1/..." URLs returned from files.getUploadURLExternal API - - step3: https://api.slack.com/methods/files.completeUploadExternal - and https://api.slack.com/methods/files.info + - step3: https://docs.slack.dev/reference/methods/files.completeUploadExternal + and https://docs.slack.dev/reference/methods/files.info """ if file is None and content is None and file_uploads is None: @@ -3858,7 +4023,7 @@ def files_getUploadURLExternal( **kwargs, ) -> Union[Future, SlackResponse]: """Gets a URL for an edge external upload. - https://api.slack.com/methods/files.getUploadURLExternal + https://docs.slack.dev/reference/methods/files.getUploadURLExternal """ kwargs.update( { @@ -3881,7 +4046,7 @@ def files_completeUploadExternal( **kwargs, ) -> Union[Future, SlackResponse]: """Finishes an upload started with files.getUploadURLExternal. - https://api.slack.com/methods/files.completeUploadExternal + https://docs.slack.dev/reference/methods/files.completeUploadExternal """ _files = [{k: v for k, v in f.items() if v is not None} for f in files] kwargs.update( @@ -3904,7 +4069,7 @@ def functions_completeSuccess( **kwargs, ) -> Union[Future, SlackResponse]: """Signal the successful completion of a function - https://api.slack.com/methods/functions.completeSuccess + https://docs.slack.dev/reference/methods/functions.completeSuccess """ kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) return self.api_call("functions.completeSuccess", params=kwargs) @@ -3917,7 +4082,7 @@ def functions_completeError( **kwargs, ) -> Union[Future, SlackResponse]: """Signal the failure to execute a function - https://api.slack.com/methods/functions.completeError + https://docs.slack.dev/reference/methods/functions.completeError """ kwargs.update({"function_execution_id": function_execution_id, "error": error}) return self.api_call("functions.completeError", params=kwargs) @@ -3925,7 +4090,7 @@ def functions_completeError( # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def groups_archive( @@ -4106,7 +4271,7 @@ def groups_unarchive( # -------------------------- # Deprecated: im.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def im_close( @@ -4182,7 +4347,7 @@ def migration_exchange( **kwargs, ) -> Union[Future, SlackResponse]: """For Enterprise Grid workspaces, map local user IDs to global user IDs - https://api.slack.com/methods/migration.exchange + https://docs.slack.dev/reference/methods/migration.exchange """ if isinstance(users, (list, tuple)): kwargs.update({"users": ",".join(users)}) @@ -4194,7 +4359,7 @@ def migration_exchange( # -------------------------- # Deprecated: mpim.* # You can use conversations.* APIs instead. - # https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api + # https://docs.slack.dev/changelog/2020-01-deprecating-antecedents-to-the-conversations-api/ # -------------------------- def mpim_close( @@ -4281,7 +4446,7 @@ def oauth_v2_access( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.v2.access + https://docs.slack.dev/reference/methods/oauth.v2.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4307,7 +4472,7 @@ def oauth_access( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token. - https://api.slack.com/methods/oauth.access + https://docs.slack.dev/reference/methods/oauth.access """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4327,7 +4492,7 @@ def oauth_v2_exchange( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a legacy access token for a new expiring access token and refresh token - https://api.slack.com/methods/oauth.v2.exchange + https://docs.slack.dev/reference/methods/oauth.v2.exchange """ kwargs.update({"client_id": client_id, "client_secret": client_secret, "token": token}) return self.api_call("oauth.v2.exchange", params=kwargs) @@ -4343,7 +4508,7 @@ def openid_connect_token( **kwargs, ) -> Union[Future, SlackResponse]: """Exchanges a temporary OAuth verifier code for an access token for Sign in with Slack. - https://api.slack.com/methods/openid.connect.token + https://docs.slack.dev/reference/methods/openid.connect.token """ if redirect_uri is not None: kwargs.update({"redirect_uri": redirect_uri}) @@ -4364,7 +4529,7 @@ def openid_connect_userInfo( **kwargs, ) -> Union[Future, SlackResponse]: """Get the identity of a user who has authorized Sign in with Slack. - https://api.slack.com/methods/openid.connect.userInfo + https://docs.slack.dev/reference/methods/openid.connect.userInfo """ return self.api_call("openid.connect.userInfo", params=kwargs) @@ -4376,7 +4541,7 @@ def pins_add( **kwargs, ) -> Union[Future, SlackResponse]: """Pins an item to a channel. - https://api.slack.com/methods/pins.add + https://docs.slack.dev/reference/methods/pins.add """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.add", params=kwargs) @@ -4388,7 +4553,7 @@ def pins_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists items pinned to a channel. - https://api.slack.com/methods/pins.list + https://docs.slack.dev/reference/methods/pins.list """ kwargs.update({"channel": channel}) return self.api_call("pins.list", http_verb="GET", params=kwargs) @@ -4401,7 +4566,7 @@ def pins_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Un-pins an item from a channel. - https://api.slack.com/methods/pins.remove + https://docs.slack.dev/reference/methods/pins.remove """ kwargs.update({"channel": channel, "timestamp": timestamp}) return self.api_call("pins.remove", params=kwargs) @@ -4415,7 +4580,7 @@ def reactions_add( **kwargs, ) -> Union[Future, SlackResponse]: """Adds a reaction to an item. - https://api.slack.com/methods/reactions.add + https://docs.slack.dev/reference/methods/reactions.add """ kwargs.update({"channel": channel, "name": name, "timestamp": timestamp}) return self.api_call("reactions.add", params=kwargs) @@ -4431,7 +4596,7 @@ def reactions_get( **kwargs, ) -> Union[Future, SlackResponse]: """Gets reactions for an item. - https://api.slack.com/methods/reactions.get + https://docs.slack.dev/reference/methods/reactions.get """ kwargs.update( { @@ -4457,7 +4622,7 @@ def reactions_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists reactions made by a user. - https://api.slack.com/methods/reactions.list + https://docs.slack.dev/reference/methods/reactions.list """ kwargs.update( { @@ -4483,7 +4648,7 @@ def reactions_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Removes a reaction from an item. - https://api.slack.com/methods/reactions.remove + https://docs.slack.dev/reference/methods/reactions.remove """ kwargs.update( { @@ -4507,7 +4672,7 @@ def reminders_add( **kwargs, ) -> Union[Future, SlackResponse]: """Creates a reminder. - https://api.slack.com/methods/reminders.add + https://docs.slack.dev/reference/methods/reminders.add """ kwargs.update( { @@ -4528,7 +4693,7 @@ def reminders_complete( **kwargs, ) -> Union[Future, SlackResponse]: """Marks a reminder as complete. - https://api.slack.com/methods/reminders.complete + https://docs.slack.dev/reference/methods/reminders.complete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.complete", params=kwargs) @@ -4541,7 +4706,7 @@ def reminders_delete( **kwargs, ) -> Union[Future, SlackResponse]: """Deletes a reminder. - https://api.slack.com/methods/reminders.delete + https://docs.slack.dev/reference/methods/reminders.delete """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.delete", params=kwargs) @@ -4554,7 +4719,7 @@ def reminders_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a reminder. - https://api.slack.com/methods/reminders.info + https://docs.slack.dev/reference/methods/reminders.info """ kwargs.update({"reminder": reminder, "team_id": team_id}) return self.api_call("reminders.info", http_verb="GET", params=kwargs) @@ -4566,7 +4731,7 @@ def reminders_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all reminders created by or for a given user. - https://api.slack.com/methods/reminders.list + https://docs.slack.dev/reference/methods/reminders.list """ kwargs.update({"team_id": team_id}) return self.api_call("reminders.list", http_verb="GET", params=kwargs) @@ -4579,7 +4744,7 @@ def rtm_connect( **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.connect + https://docs.slack.dev/reference/methods/rtm.connect """ kwargs.update({"batch_presence_aware": batch_presence_aware, "presence_sub": presence_sub}) return self.api_call("rtm.connect", http_verb="GET", params=kwargs) @@ -4597,7 +4762,7 @@ def rtm_start( **kwargs, ) -> Union[Future, SlackResponse]: """Starts a Real Time Messaging session. - https://api.slack.com/methods/rtm.start + https://docs.slack.dev/reference/methods/rtm.start """ kwargs.update( { @@ -4625,7 +4790,7 @@ def search_all( **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages and files matching a query. - https://api.slack.com/methods/search.all + https://docs.slack.dev/reference/methods/search.all """ kwargs.update( { @@ -4653,7 +4818,7 @@ def search_files( **kwargs, ) -> Union[Future, SlackResponse]: """Searches for files matching a query. - https://api.slack.com/methods/search.files + https://docs.slack.dev/reference/methods/search.files """ kwargs.update( { @@ -4682,7 +4847,7 @@ def search_messages( **kwargs, ) -> Union[Future, SlackResponse]: """Searches for messages matching a query. - https://api.slack.com/methods/search.messages + https://docs.slack.dev/reference/methods/search.messages """ kwargs.update( { @@ -4698,6 +4863,249 @@ def search_messages( ) return self.api_call("search.messages", http_verb="GET", params=kwargs) + def slackLists_access_delete( + self, + *, + list_id: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Revoke access to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.delete + """ + kwargs.update({"list_id": list_id, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.delete", json=kwargs) + + def slackLists_access_set( + self, + *, + list_id: str, + access_level: str, + channel_ids: Optional[List[str]] = None, + user_ids: Optional[List[str]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set the access level to a List for specified entities. + https://docs.slack.dev/reference/methods/slackLists.access.set + """ + kwargs.update({"list_id": list_id, "access_level": access_level, "channel_ids": channel_ids, "user_ids": user_ids}) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.access.set", json=kwargs) + + def slackLists_create( + self, + *, + name: str, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + schema: Optional[List[Dict[str, Any]]] = None, + copy_from_list_id: Optional[str] = None, + include_copied_list_records: Optional[bool] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Creates a List. + https://docs.slack.dev/reference/methods/slackLists.create + """ + kwargs.update( + { + "name": name, + "description_blocks": description_blocks, + "schema": schema, + "copy_from_list_id": copy_from_list_id, + "include_copied_list_records": include_copied_list_records, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.create", json=kwargs) + + def slackLists_download_get( + self, + *, + list_id: str, + job_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Retrieve List download URL from an export job to download List contents. + https://docs.slack.dev/reference/methods/slackLists.download.get + """ + kwargs.update( + { + "list_id": list_id, + "job_id": job_id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.get", json=kwargs) + + def slackLists_download_start( + self, + *, + list_id: str, + include_archived: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Initiate a job to export List contents. + https://docs.slack.dev/reference/methods/slackLists.download.start + """ + kwargs.update( + { + "list_id": list_id, + "include_archived": include_archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.download.start", json=kwargs) + + def slackLists_items_create( + self, + *, + list_id: str, + duplicated_item_id: Optional[str] = None, + parent_item_id: Optional[str] = None, + initial_fields: Optional[List[Dict[str, Any]]] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Add a new item to an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.create + """ + kwargs.update( + { + "list_id": list_id, + "duplicated_item_id": duplicated_item_id, + "parent_item_id": parent_item_id, + "initial_fields": initial_fields, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.create", json=kwargs) + + def slackLists_items_delete( + self, + *, + list_id: str, + id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Deletes an item from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.delete + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.delete", json=kwargs) + + def slackLists_items_deleteMultiple( + self, + *, + list_id: str, + ids: List[str], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Deletes multiple items from an existing List. + https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + """ + kwargs.update( + { + "list_id": list_id, + "ids": ids, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.deleteMultiple", json=kwargs) + + def slackLists_items_info( + self, + *, + list_id: str, + id: str, + include_is_subscribed: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Get a row from a List. + https://docs.slack.dev/reference/methods/slackLists.items.info + """ + kwargs.update( + { + "list_id": list_id, + "id": id, + "include_is_subscribed": include_is_subscribed, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.info", json=kwargs) + + def slackLists_items_list( + self, + *, + list_id: str, + limit: Optional[int] = None, + cursor: Optional[str] = None, + archived: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Get records from a List. + https://docs.slack.dev/reference/methods/slackLists.items.list + """ + kwargs.update( + { + "list_id": list_id, + "limit": limit, + "cursor": cursor, + "archived": archived, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.list", json=kwargs) + + def slackLists_items_update( + self, + *, + list_id: str, + cells: List[Dict[str, Any]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Updates cells in a List. + https://docs.slack.dev/reference/methods/slackLists.items.update + """ + kwargs.update( + { + "list_id": list_id, + "cells": cells, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.items.update", json=kwargs) + + def slackLists_update( + self, + *, + id: str, + name: Optional[str] = None, + description_blocks: Optional[Union[str, Sequence[Union[Dict, RichTextBlock]]]] = None, + todo_mode: Optional[bool] = None, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Update a List. + https://docs.slack.dev/reference/methods/slackLists.update + """ + kwargs.update( + { + "id": id, + "name": name, + "description_blocks": description_blocks, + "todo_mode": todo_mode, + } + ) + kwargs = _remove_none_values(kwargs) + return self.api_call("slackLists.update", json=kwargs) + def stars_add( self, *, @@ -4708,7 +5116,7 @@ def stars_add( **kwargs, ) -> Union[Future, SlackResponse]: """Adds a star to an item. - https://api.slack.com/methods/stars.add + https://docs.slack.dev/reference/methods/stars.add """ kwargs.update( { @@ -4731,7 +5139,7 @@ def stars_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists stars for a user. - https://api.slack.com/methods/stars.list + https://docs.slack.dev/reference/methods/stars.list """ kwargs.update( { @@ -4754,7 +5162,7 @@ def stars_remove( **kwargs, ) -> Union[Future, SlackResponse]: """Removes a star from an item. - https://api.slack.com/methods/stars.remove + https://docs.slack.dev/reference/methods/stars.remove """ kwargs.update( { @@ -4778,7 +5186,7 @@ def team_accessLogs( **kwargs, ) -> Union[Future, SlackResponse]: """Gets the access logs for the current team. - https://api.slack.com/methods/team.accessLogs + https://docs.slack.dev/reference/methods/team.accessLogs """ kwargs.update( { @@ -4800,7 +5208,7 @@ def team_billableInfo( **kwargs, ) -> Union[Future, SlackResponse]: """Gets billable users information for the current team. - https://api.slack.com/methods/team.billableInfo + https://docs.slack.dev/reference/methods/team.billableInfo """ kwargs.update({"team_id": team_id, "user": user}) return self.api_call("team.billableInfo", http_verb="GET", params=kwargs) @@ -4810,7 +5218,7 @@ def team_billing_info( **kwargs, ) -> Union[Future, SlackResponse]: """Reads a workspace's billing plan information. - https://api.slack.com/methods/team.billing.info + https://docs.slack.dev/reference/methods/team.billing.info """ return self.api_call("team.billing.info", params=kwargs) @@ -4821,7 +5229,7 @@ def team_externalTeams_disconnect( **kwargs, ) -> Union[Future, SlackResponse]: """Disconnects an external organization. - https://api.slack.com/methods/team.externalTeams.disconnect + https://docs.slack.dev/reference/methods/team.externalTeams.disconnect """ kwargs.update( { @@ -4843,7 +5251,7 @@ def team_externalTeams_list( **kwargs, ) -> Union[Future, SlackResponse]: """Returns a list of all the external teams connected and details about the connection. - https://api.slack.com/methods/team.externalTeams.list + https://docs.slack.dev/reference/methods/team.externalTeams.list """ kwargs.update( { @@ -4874,7 +5282,7 @@ def team_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about the current team. - https://api.slack.com/methods/team.info + https://docs.slack.dev/reference/methods/team.info """ kwargs.update({"team": team, "domain": domain}) return self.api_call("team.info", http_verb="GET", params=kwargs) @@ -4892,7 +5300,7 @@ def team_integrationLogs( **kwargs, ) -> Union[Future, SlackResponse]: """Gets the integration logs for the current team. - https://api.slack.com/methods/team.integrationLogs + https://docs.slack.dev/reference/methods/team.integrationLogs """ kwargs.update( { @@ -4914,7 +5322,7 @@ def team_profile_get( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a team's profile. - https://api.slack.com/methods/team.profile.get + https://docs.slack.dev/reference/methods/team.profile.get """ kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) @@ -4924,7 +5332,7 @@ def team_preferences_list( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieve a list of a workspace's team preferences. - https://api.slack.com/methods/team.preferences.list + https://docs.slack.dev/reference/methods/team.preferences.list """ return self.api_call("team.preferences.list", params=kwargs) @@ -4940,7 +5348,7 @@ def usergroups_create( **kwargs, ) -> Union[Future, SlackResponse]: """Create a User Group - https://api.slack.com/methods/usergroups.create + https://docs.slack.dev/reference/methods/usergroups.create """ kwargs.update( { @@ -4966,7 +5374,7 @@ def usergroups_disable( **kwargs, ) -> Union[Future, SlackResponse]: """Disable an existing User Group - https://api.slack.com/methods/usergroups.disable + https://docs.slack.dev/reference/methods/usergroups.disable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.disable", params=kwargs) @@ -4980,7 +5388,7 @@ def usergroups_enable( **kwargs, ) -> Union[Future, SlackResponse]: """Enable a User Group - https://api.slack.com/methods/usergroups.enable + https://docs.slack.dev/reference/methods/usergroups.enable """ kwargs.update({"usergroup": usergroup, "include_count": include_count, "team_id": team_id}) return self.api_call("usergroups.enable", params=kwargs) @@ -4995,7 +5403,7 @@ def usergroups_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all User Groups for a team - https://api.slack.com/methods/usergroups.list + https://docs.slack.dev/reference/methods/usergroups.list """ kwargs.update( { @@ -5020,7 +5428,7 @@ def usergroups_update( **kwargs, ) -> Union[Future, SlackResponse]: """Update an existing User Group - https://api.slack.com/methods/usergroups.update + https://docs.slack.dev/reference/methods/usergroups.update """ kwargs.update( { @@ -5047,7 +5455,7 @@ def usergroups_users_list( **kwargs, ) -> Union[Future, SlackResponse]: """List all users in a User Group - https://api.slack.com/methods/usergroups.users.list + https://docs.slack.dev/reference/methods/usergroups.users.list """ kwargs.update( { @@ -5068,7 +5476,7 @@ def usergroups_users_update( **kwargs, ) -> Union[Future, SlackResponse]: """Update the list of users for a User Group - https://api.slack.com/methods/usergroups.users.update + https://docs.slack.dev/reference/methods/usergroups.users.update """ kwargs.update( { @@ -5095,7 +5503,7 @@ def users_conversations( **kwargs, ) -> Union[Future, SlackResponse]: """List conversations the calling user may access. - https://api.slack.com/methods/users.conversations + https://docs.slack.dev/reference/methods/users.conversations """ kwargs.update( { @@ -5117,7 +5525,7 @@ def users_deletePhoto( **kwargs, ) -> Union[Future, SlackResponse]: """Delete the user profile photo - https://api.slack.com/methods/users.deletePhoto + https://docs.slack.dev/reference/methods/users.deletePhoto """ return self.api_call("users.deletePhoto", http_verb="GET", params=kwargs) @@ -5128,7 +5536,7 @@ def users_getPresence( **kwargs, ) -> Union[Future, SlackResponse]: """Gets user presence information. - https://api.slack.com/methods/users.getPresence + https://docs.slack.dev/reference/methods/users.getPresence """ kwargs.update({"user": user}) return self.api_call("users.getPresence", http_verb="GET", params=kwargs) @@ -5138,7 +5546,7 @@ def users_identity( **kwargs, ) -> Union[Future, SlackResponse]: """Get a user's identity. - https://api.slack.com/methods/users.identity + https://docs.slack.dev/reference/methods/users.identity """ return self.api_call("users.identity", http_verb="GET", params=kwargs) @@ -5150,7 +5558,7 @@ def users_info( **kwargs, ) -> Union[Future, SlackResponse]: """Gets information about a user. - https://api.slack.com/methods/users.info + https://docs.slack.dev/reference/methods/users.info """ kwargs.update({"user": user, "include_locale": include_locale}) return self.api_call("users.info", http_verb="GET", params=kwargs) @@ -5165,7 +5573,7 @@ def users_list( **kwargs, ) -> Union[Future, SlackResponse]: """Lists all users in a Slack team. - https://api.slack.com/methods/users.list + https://docs.slack.dev/reference/methods/users.list """ kwargs.update( { @@ -5184,7 +5592,7 @@ def users_lookupByEmail( **kwargs, ) -> Union[Future, SlackResponse]: """Find a user with an email address. - https://api.slack.com/methods/users.lookupByEmail + https://docs.slack.dev/reference/methods/users.lookupByEmail """ kwargs.update({"email": email}) return self.api_call("users.lookupByEmail", http_verb="GET", params=kwargs) @@ -5199,7 +5607,7 @@ def users_setPhoto( **kwargs, ) -> Union[Future, SlackResponse]: """Set the user profile photo - https://api.slack.com/methods/users.setPhoto + https://docs.slack.dev/reference/methods/users.setPhoto """ kwargs.update({"crop_w": crop_w, "crop_x": crop_x, "crop_y": crop_y}) return self.api_call("users.setPhoto", files={"image": image}, data=kwargs) @@ -5211,7 +5619,7 @@ def users_setPresence( **kwargs, ) -> Union[Future, SlackResponse]: """Manually sets user presence. - https://api.slack.com/methods/users.setPresence + https://docs.slack.dev/reference/methods/users.setPresence """ kwargs.update({"presence": presence}) return self.api_call("users.setPresence", params=kwargs) @@ -5222,7 +5630,7 @@ def users_discoverableContacts_lookup( **kwargs, ) -> Union[Future, SlackResponse]: """Lookup an email address to see if someone is on Slack - https://api.slack.com/methods/users.discoverableContacts.lookup + https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup """ kwargs.update({"email": email}) return self.api_call("users.discoverableContacts.lookup", params=kwargs) @@ -5235,7 +5643,7 @@ def users_profile_get( **kwargs, ) -> Union[Future, SlackResponse]: """Retrieves a user's profile information. - https://api.slack.com/methods/users.profile.get + https://docs.slack.dev/reference/methods/users.profile.get """ kwargs.update({"user": user, "include_labels": include_labels}) return self.api_call("users.profile.get", http_verb="GET", params=kwargs) @@ -5250,7 +5658,7 @@ def users_profile_set( **kwargs, ) -> Union[Future, SlackResponse]: """Set the profile information for a user. - https://api.slack.com/methods/users.profile.set + https://docs.slack.dev/reference/methods/users.profile.set """ kwargs.update( { @@ -5273,8 +5681,8 @@ def views_open( **kwargs, ) -> Union[Future, SlackResponse]: """Open a view for a user. - https://api.slack.com/methods/views.open - See https://api.slack.com/surfaces/modals for details. + https://docs.slack.dev/reference/methods/views.open + See https://docs.slack.dev/surfaces/modals/ for details. """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5297,9 +5705,9 @@ def views_push( Push a new view onto the existing view stack by passing a view payload and a valid trigger_id generated from an interaction within the existing modal. - Read the modals documentation (https://api.slack.com/surfaces/modals) + Read the modals documentation (https://docs.slack.dev/surfaces/modals/) to learn more about the lifecycle and intricacies of views. - https://api.slack.com/methods/views.push + https://docs.slack.dev/reference/methods/views.push """ kwargs.update({"trigger_id": trigger_id, "interactivity_pointer": interactivity_pointer}) if isinstance(view, View): @@ -5322,9 +5730,9 @@ def views_update( """Update an existing view. Update a view by passing a new view definition along with the view_id returned in views.open or the external_id. - See the modals documentation (https://api.slack.com/surfaces/modals#updating_views) + See the modals documentation (https://docs.slack.dev/surfaces/modals/#updating_views) to learn more about updating views and avoiding race conditions with the hash argument. - https://api.slack.com/methods/views.update + https://docs.slack.dev/reference/methods/views.update """ if isinstance(view, View): kwargs.update({"view": view.to_dict()}) @@ -5351,8 +5759,8 @@ def views_publish( ) -> Union[Future, SlackResponse]: """Publish a static view for a User. Create or update the view that comprises an - app's Home tab (https://api.slack.com/surfaces/tabs) - https://api.slack.com/methods/views.publish + app's Home tab (https://docs.slack.dev/surfaces/app-home/) + https://docs.slack.dev/reference/methods/views.publish """ kwargs.update({"user_id": user_id, "hash": hash}) if isinstance(view, View): @@ -5363,6 +5771,72 @@ def views_publish( # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Add featured workflows to a channel. + https://docs.slack.dev/reference/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """List the featured workflows for specified channels. + https://docs.slack.dev/reference/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Remove featured workflows from a channel. + https://docs.slack.dev/reference/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set featured workflows for a channel. + https://docs.slack.dev/reference/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -5371,7 +5845,7 @@ def workflows_stepCompleted( **kwargs, ) -> Union[Future, SlackResponse]: """Indicate a successful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepCompleted + https://docs.slack.dev/reference/methods/workflows.stepCompleted """ kwargs.update({"workflow_step_execute_id": workflow_step_execute_id}) if outputs is not None: @@ -5388,7 +5862,7 @@ def workflows_stepFailed( **kwargs, ) -> Union[Future, SlackResponse]: """Indicate an unsuccessful outcome of a workflow step's execution. - https://api.slack.com/methods/workflows.stepFailed + https://docs.slack.dev/reference/methods/workflows.stepFailed """ kwargs.update( { @@ -5409,7 +5883,7 @@ def workflows_updateStep( **kwargs, ) -> Union[Future, SlackResponse]: """Update the configuration for a workflow extension step. - https://api.slack.com/methods/workflows.updateStep + https://docs.slack.dev/reference/methods/workflows.updateStep """ kwargs.update({"workflow_step_edit_id": workflow_step_edit_id}) if inputs is not None: diff --git a/slack_sdk/webhook/__init__.py b/slack_sdk/webhook/__init__.py index ea52f6bf1..09e2292ab 100644 --- a/slack_sdk/webhook/__init__.py +++ b/slack_sdk/webhook/__init__.py @@ -1,6 +1,7 @@ """You can use slack_sdk.webhook.WebhookClient for Incoming Webhooks and message responses using response_url in payloads. """ + # from .async_client import AsyncWebhookClient from .client import WebhookClient from .webhook_response import WebhookResponse diff --git a/slack_sdk/webhook/async_client.py b/slack_sdk/webhook/async_client.py index a737b4e31..dded0491f 100644 --- a/slack_sdk/webhook/async_client.py +++ b/slack_sdk/webhook/async_client.py @@ -53,7 +53,7 @@ def __init__( ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) diff --git a/slack_sdk/webhook/client.py b/slack_sdk/webhook/client.py index 7a1d64856..d7f9f603d 100644 --- a/slack_sdk/webhook/client.py +++ b/slack_sdk/webhook/client.py @@ -48,7 +48,7 @@ def __init__( ): """API client for Incoming Webhooks and `response_url` - https://api.slack.com/messaging/webhooks + https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/ Args: url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`) @@ -267,13 +267,13 @@ def _perform_http_request_internal(self, url: str, req: Request): http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp diff --git a/tests/signature/test_signature_verifier.py b/tests/signature/test_signature_verifier.py index f2dc79a01..ef7ac0512 100644 --- a/tests/signature/test_signature_verifier.py +++ b/tests/signature/test_signature_verifier.py @@ -15,7 +15,7 @@ def setUp(self): def tearDown(self): pass - # https://api.slack.com/authentication/verifying-requests-from-slack + # https://docs.slack.dev/authentication/verifying-requests-from-slack/ signing_secret = "8f742231b10e8888abcd99yyyzzz85a5" body = "token=xyzz0WbapA4vBCDEFasx0q6G&team_id=T1DC2JH3J&team_domain=testteamnow&channel_id=G8PSS9T3V&channel_name=foobar&user_id=U2CERLKJA&user_name=roadrunner&command=%2Fwebhook-collect&text=&response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2FT1DC2JH3J%2F397700885554%2F96rGlfmibIGlgcZRskXaIFfN&trigger_id=398738663015.47445629121.803a0bc887a14d10d2c447fce8b6703c" diff --git a/tests/slack_sdk/models/test_blocks.py b/tests/slack_sdk/models/test_blocks.py index ade4bfe8f..6f3b9f141 100644 --- a/tests/slack_sdk/models/test_blocks.py +++ b/tests/slack_sdk/models/test_blocks.py @@ -4,36 +4,41 @@ from slack_sdk.errors import SlackObjectFormationError from slack_sdk.models.blocks import ( ActionsBlock, + Block, + ButtonElement, + CallBlock, + ContextActionsBlock, ContextBlock, DividerBlock, - ImageBlock, - SectionBlock, - InputBlock, FileBlock, - Block, - CallBlock, - ButtonElement, - StaticSelectElement, - OverflowMenuElement, + HeaderBlock, + ImageBlock, ImageElement, + InputBlock, LinkButtonElement, - PlainTextObject, + MarkdownBlock, MarkdownTextObject, - HeaderBlock, - VideoBlock, Option, + OverflowMenuElement, + PlainTextObject, + RawTextObject, RichTextBlock, - RichTextSectionElement, + RichTextElementParts, RichTextListElement, - RichTextQuoteElement, RichTextPreformattedElement, - RichTextElementParts, + RichTextQuoteElement, + RichTextSectionElement, + SectionBlock, + StaticSelectElement, + TableBlock, + VideoBlock, ) -from slack_sdk.models.blocks.basic_components import SlackFile -from . import STRING_3001_CHARS +from slack_sdk.models.blocks.basic_components import FeedbackButtonObject, SlackFile +from slack_sdk.models.blocks.block_elements import FeedbackButtonsElement, IconButtonElement +from . import STRING_3001_CHARS -# https://api.slack.com/reference/block-kit/blocks +# https://docs.slack.dev/reference/block-kit/blocks class BlockTests(unittest.TestCase): @@ -525,6 +530,54 @@ def test_element_parsing(self): self.assertDictEqual(original.to_dict(), parsed.to_dict()) +# ---------------------------------------------- +# ContextActionsBlock +# ---------------------------------------------- + + +class ContextActionsBlockTests(unittest.TestCase): + def test_document(self): + input = { + "type": "context_actions", + "block_id": "context-actions-1", + "elements": [ + { + "type": "feedback_buttons", + "action_id": "feedback-action", + "positive_button": {"text": {"type": "plain_text", "text": "+1"}, "value": "positive"}, + "negative_button": {"text": {"type": "plain_text", "text": "-1"}, "value": "negative"}, + }, + { + "type": "icon_button", + "action_id": "delete-action", + "icon": "trash", + "text": {"type": "plain_text", "text": "Delete"}, + "value": "delete", + }, + ], + } + self.assertDictEqual(input, ContextActionsBlock(**input).to_dict()) + self.assertDictEqual(input, Block.parse(input).to_dict()) + + def test_with_feedback_buttons(self): + feedback_buttons = FeedbackButtonsElement( + action_id="feedback-action", + positive_button=FeedbackButtonObject(text="Good", value="positive"), + negative_button=FeedbackButtonObject(text="Bad", value="negative"), + ) + block = ContextActionsBlock(elements=[feedback_buttons]) + self.assertEqual(len(block.elements), 1) + self.assertEqual(block.elements[0].type, "feedback_buttons") + + def test_with_icon_button(self): + icon_button = IconButtonElement( + action_id="icon-action", icon="star", text=PlainTextObject(text="Favorite"), value="favorite" + ) + block = ContextActionsBlock(elements=[icon_button]) + self.assertEqual(len(block.elements), 1) + self.assertEqual(block.elements[0].type, "icon_button") + + # ---------------------------------------------- # Context # ---------------------------------------------- @@ -804,6 +857,39 @@ def test_text_length_151(self): HeaderBlock(**input).validate_json() +# ---------------------------------------------- +# MarkdownBlock +# ---------------------------------------------- + + +class MarkdownBlockTests(unittest.TestCase): + def test_document(self): + input = { + "type": "markdown", + "block_id": "introduction", + "text": "**Welcome!**", + } + self.assertDictEqual(input, MarkdownBlock(**input).to_dict()) + self.assertDictEqual(input, Block.parse(input).to_dict()) + + def test_text_length_12000(self): + input = { + "type": "markdown", + "block_id": "numbers", + "text": "1234567890" * 1200, + } + MarkdownBlock(**input).validate_json() + + def test_text_length_12001(self): + input = { + "type": "markdown", + "block_id": "numbers", + "text": "1234567890" * 1200 + "1", + } + with self.assertRaises(SlackObjectFormationError): + MarkdownBlock(**input).validate_json() + + # ---------------------------------------------- # Video # ---------------------------------------------- @@ -953,6 +1039,8 @@ def test_complex(self): {"type": "text", "text": "block", "style": {"code": True}}, {"type": "text", "text": " "}, {"type": "text", "text": "test", "style": {"italic": True}}, + {"type": "text", "text": " "}, + {"type": "text", "text": "links", "style": {"underline": True}}, {"type": "link", "url": "https://slack.com", "text": "Slack website!"}, ], }, @@ -1054,6 +1142,8 @@ def test_complex(self): _.Text(text="block", style=_.TextStyle(code=True)), _.Text(text=" "), _.Text(text="test", style=_.TextStyle(italic=True)), + _.Text(text=" "), + _.Text(text="links", style=_.TextStyle(underline=True)), _.Link(text="Slack website!", url="https://slack.com"), ] ), @@ -1179,3 +1269,203 @@ def test_parsing_empty_block_elements(self): self.assertIsNotNone(block_dict["elements"][1].get("elements")) self.assertIsNotNone(block_dict["elements"][2].get("elements")) self.assertIsNotNone(block_dict["elements"][3].get("elements")) + + +# ---------------------------------------------- +# RawTextObject +# ---------------------------------------------- + + +class RawTextObjectTests(unittest.TestCase): + def test_basic_creation(self): + """Test basic RawTextObject creation""" + obj = RawTextObject(text="Hello") + expected = {"type": "raw_text", "text": "Hello"} + self.assertDictEqual(expected, obj.to_dict()) + + def test_from_str(self): + """Test RawTextObject.from_str() helper""" + obj = RawTextObject.from_str("Test text") + expected = {"type": "raw_text", "text": "Test text"} + self.assertDictEqual(expected, obj.to_dict()) + + def test_direct_from_string(self): + """Test RawTextObject.direct_from_string() helper""" + result = RawTextObject.direct_from_string("Direct text") + expected = {"type": "raw_text", "text": "Direct text"} + self.assertDictEqual(expected, result) + + def test_text_length_validation_min(self): + """Test that empty text fails validation""" + with self.assertRaises(SlackObjectFormationError): + RawTextObject(text="").to_dict() + + def test_text_length_validation_at_min(self): + """Test that text with 1 character passes validation""" + obj = RawTextObject(text="a") + obj.to_dict() # Should not raise + + def test_attributes(self): + """Test that RawTextObject only has text and type attributes""" + obj = RawTextObject(text="Test") + self.assertEqual(obj.attributes, {"text", "type"}) + # Should not have emoji attribute like PlainTextObject + self.assertNotIn("emoji", obj.to_dict()) + + +# ---------------------------------------------- +# Table +# ---------------------------------------------- + + +class TableBlockTests(unittest.TestCase): + def test_document(self): + """Test basic table block from Slack documentation example""" + input = { + "type": "table", + "column_settings": [{"is_wrapped": True}, {"align": "right"}], + "rows": [ + [{"type": "raw_text", "text": "Header A"}, {"type": "raw_text", "text": "Header B"}], + [{"type": "raw_text", "text": "Data 1A"}, {"type": "raw_text", "text": "Data 1B"}], + [{"type": "raw_text", "text": "Data 2A"}, {"type": "raw_text", "text": "Data 2B"}], + ], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + self.assertDictEqual(input, Block.parse(input).to_dict()) + + def test_with_rich_text(self): + """Test table block with rich_text cells""" + input = { + "type": "table", + "column_settings": [{"is_wrapped": True}, {"align": "right"}], + "rows": [ + [{"type": "raw_text", "text": "Header A"}, {"type": "raw_text", "text": "Header B"}], + [ + {"type": "raw_text", "text": "Data 1A"}, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [{"text": "Data 1B", "type": "link", "url": "https://slack.com"}], + } + ], + }, + ], + ], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + self.assertDictEqual(input, Block.parse(input).to_dict()) + + def test_minimal_table(self): + """Test table with only required fields""" + input = { + "type": "table", + "rows": [[{"type": "raw_text", "text": "Cell"}]], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + + def test_with_block_id(self): + """Test table block with block_id""" + input = { + "type": "table", + "block_id": "table-123", + "rows": [ + [{"type": "raw_text", "text": "A"}, {"type": "raw_text", "text": "B"}], + [{"type": "raw_text", "text": "1"}, {"type": "raw_text", "text": "2"}], + ], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + + def test_column_settings_variations(self): + """Test various column_settings configurations""" + # Left align + input1 = { + "type": "table", + "column_settings": [{"align": "left"}], + "rows": [[{"type": "raw_text", "text": "Left"}]], + } + self.assertDictEqual(input1, TableBlock(**input1).to_dict()) + + # Center align + input2 = { + "type": "table", + "column_settings": [{"align": "center"}], + "rows": [[{"type": "raw_text", "text": "Center"}]], + } + self.assertDictEqual(input2, TableBlock(**input2).to_dict()) + + # With wrapping + input3 = { + "type": "table", + "column_settings": [{"is_wrapped": False}], + "rows": [[{"type": "raw_text", "text": "No wrap"}]], + } + self.assertDictEqual(input3, TableBlock(**input3).to_dict()) + + # Combined settings + input4 = { + "type": "table", + "column_settings": [{"align": "center", "is_wrapped": True}], + "rows": [[{"type": "raw_text", "text": "Both"}]], + } + self.assertDictEqual(input4, TableBlock(**input4).to_dict()) + + def test_column_settings_with_none(self): + """Test column_settings with None to skip columns""" + input = { + "type": "table", + "column_settings": [{"align": "left"}, None, {"align": "right"}], + "rows": [ + [ + {"type": "raw_text", "text": "Left"}, + {"type": "raw_text", "text": "Default"}, + {"type": "raw_text", "text": "Right"}, + ] + ], + } + self.assertDictEqual(input, TableBlock(**input).to_dict()) + + def test_rows_validation(self): + """Test that rows validation works correctly""" + # Empty rows should fail validation + with self.assertRaises(SlackObjectFormationError): + TableBlock(rows=[]).to_dict() + + def test_multi_row_table(self): + """Test table with multiple rows""" + input = { + "type": "table", + "rows": [ + [{"type": "raw_text", "text": "Name"}, {"type": "raw_text", "text": "Age"}], + [{"type": "raw_text", "text": "Alice"}, {"type": "raw_text", "text": "30"}], + [{"type": "raw_text", "text": "Bob"}, {"type": "raw_text", "text": "25"}], + [{"type": "raw_text", "text": "Charlie"}, {"type": "raw_text", "text": "35"}], + ], + } + block = TableBlock(**input) + self.assertEqual(len(block.rows), 4) + self.assertDictEqual(input, block.to_dict()) + + def test_with_raw_text_object_helper(self): + """Test table using RawTextObject helper class""" + # Create table using RawTextObject helper + block = TableBlock( + rows=[ + [RawTextObject(text="Product").to_dict(), RawTextObject(text="Price").to_dict()], + [RawTextObject(text="Widget").to_dict(), RawTextObject(text="$10").to_dict()], + [RawTextObject(text="Gadget").to_dict(), RawTextObject(text="$20").to_dict()], + ], + column_settings=[{"is_wrapped": True}, {"align": "right"}], + ) + + expected = { + "type": "table", + "column_settings": [{"is_wrapped": True}, {"align": "right"}], + "rows": [ + [{"type": "raw_text", "text": "Product"}, {"type": "raw_text", "text": "Price"}], + [{"type": "raw_text", "text": "Widget"}, {"type": "raw_text", "text": "$10"}], + [{"type": "raw_text", "text": "Gadget"}, {"type": "raw_text", "text": "$20"}], + ], + } + self.assertDictEqual(expected, block.to_dict()) diff --git a/tests/slack_sdk/models/test_elements.py b/tests/slack_sdk/models/test_elements.py index 6a9545b5e..2985228a2 100644 --- a/tests/slack_sdk/models/test_elements.py +++ b/tests/slack_sdk/models/test_elements.py @@ -4,44 +4,47 @@ from slack_sdk.models.blocks import ( BlockElement, ButtonElement, + ChannelMultiSelectElement, + ChannelSelectElement, + CheckboxesElement, + ConfirmObject, + ConversationMultiSelectElement, + ConversationSelectElement, DatePickerElement, - TimePickerElement, + ExternalDataMultiSelectElement, ExternalDataSelectElement, + FeedbackButtonsElement, + IconButtonElement, ImageElement, + InputInteractiveElement, + InteractiveElement, LinkButtonElement, - UserSelectElement, - StaticSelectElement, - CheckboxesElement, - StaticMultiSelectElement, - ExternalDataMultiSelectElement, - UserMultiSelectElement, - ConversationMultiSelectElement, - ChannelMultiSelectElement, + Option, OverflowMenuElement, PlainTextInputElement, - RadioButtonsElement, - ConversationSelectElement, - ChannelSelectElement, - ConfirmObject, - Option, - InputInteractiveElement, - InteractiveElement, PlainTextObject, + RadioButtonsElement, RichTextBlock, + StaticMultiSelectElement, + StaticSelectElement, + TimePickerElement, + UserMultiSelectElement, + UserSelectElement, ) from slack_sdk.models.blocks.basic_components import SlackFile from slack_sdk.models.blocks.block_elements import ( DateTimePickerElement, EmailInputElement, + FileInputElement, NumberInputElement, - UrlInputElement, - WorkflowButtonElement, + RichTextElementParts, RichTextInputElement, - FileInputElement, RichTextSectionElement, - RichTextElementParts, + UrlInputElement, + WorkflowButtonElement, ) -from . import STRING_3001_CHARS, STRING_301_CHARS + +from . import STRING_301_CHARS, STRING_3001_CHARS class BlockElementTests(unittest.TestCase): @@ -112,7 +115,7 @@ def test_document_3(self): input = { "type": "button", "text": {"type": "plain_text", "text": "Link Button"}, - "url": "https://api.slack.com/block-kit", + "url": "https://docs.slack.dev/block-kit/", } self.assertDictEqual(input, ButtonElement(**input).to_dict()) self.assertDictEqual(input, LinkButtonElement(**input).to_dict()) @@ -443,6 +446,67 @@ def test_focus_on_load(self): self.assertDictEqual(input, DateTimePickerElement(**input).to_dict()) +# ---------------------------------------------- +# FeedbackButtons +# ---------------------------------------------- + + +class FeedbackButtonsTests(unittest.TestCase): + def test_document(self): + input = { + "type": "feedback_buttons", + "action_id": "feedback-123", + "positive_button": { + "text": {"type": "plain_text", "text": "+1"}, + "accessibility_label": "Positive feedback", + "value": "positive", + }, + "negative_button": { + "text": {"type": "plain_text", "text": "-1"}, + "accessibility_label": "Negative feedback", + "value": "negative", + }, + } + self.assertDictEqual(input, FeedbackButtonsElement(**input).to_dict()) + + +# ---------------------------------------------- +# IconButton +# ---------------------------------------------- + + +class IconButtonTests(unittest.TestCase): + def test_document(self): + input = { + "type": "icon_button", + "action_id": "icon-123", + "icon": "trash", + "text": {"type": "plain_text", "text": "Delete"}, + "accessibility_label": "Delete item", + "value": "delete_item", + "visible_to_user_ids": ["U123456", "U789012"], + } + self.assertDictEqual(input, IconButtonElement(**input).to_dict()) + + def test_with_confirm(self): + input = { + "type": "icon_button", + "action_id": "icon-456", + "icon": "trash", + "text": {"type": "plain_text", "text": "Delete"}, + "value": "trash", + "confirm": { + "title": {"type": "plain_text", "text": "Are you sure?"}, + "text": {"type": "plain_text", "text": "This will send a warning."}, + "confirm": {"type": "plain_text", "text": "Yes"}, + "deny": {"type": "plain_text", "text": "No"}, + }, + } + icon_button = IconButtonElement(**input) + self.assertIsNotNone(icon_button.confirm) + self.assertDictEqual(input, icon_button.to_dict()) + + # ------------------------------------------------- # Image # ------------------------------------------------- @@ -1039,7 +1103,7 @@ def test_document(self): }, { "text": {"type": "plain_text", "text": "*this is plain_text text*"}, - # https://api.slack.com/reference/block-kit/composition-objects#option + # https://docs.slack.dev/reference/block-kit/composition-objects/option-object "url": "https://www.example.com", }, ], diff --git a/tests/slack_sdk/models/test_metadata.py b/tests/slack_sdk/models/test_metadata.py new file mode 100644 index 000000000..14635c661 --- /dev/null +++ b/tests/slack_sdk/models/test_metadata.py @@ -0,0 +1,307 @@ +import unittest + +from slack_sdk.models.metadata import ( + EventAndEntityMetadata, + EntityMetadata, + ExternalRef, + FileEntitySlackFile, + EntityIconField, + EntityEditTextConfig, + EntityEditSupport, + EntityFullSizePreviewError, + EntityFullSizePreview, + EntityUserIDField, + EntityUserField, + EntityTypedField, + EntityStringField, + EntityTimestampField, + EntityImageField, + EntityCustomField, + FileEntityFields, + TaskEntityFields, + EntityActionButton, + EntityTitle, + EntityAttributes, + EntityActions, + EntityPayload, +) + + +class EntityMetadataTests(unittest.TestCase): + maxDiff = None + + # ============================================================================ + # Entity JSON + # ============================================================================ + + task_entity_json = { + "app_unfurl_url": "https://myappdomain.com/123?myquery=param", + "entity_type": "slack#/entities/task", + "url": "https://myappdomain.com/123", + "external_ref": {"id": "123"}, + "entity_payload": { + "attributes": { + "title": {"text": "My Title"}, + "display_type": "Incident", + "display_id": "123", + "product_name": "My Product", + }, + "fields": { + "date_created": {"value": 1741164235}, + "status": {"value": "In Progress"}, + "description": { + "value": "My Description", + "long": True, + "edit": {"enabled": True, "text": {"min_length": 5, "max_length": 100}}, + }, + "due_date": {"value": "2026-06-06", "type": "slack#/types/date"}, + "created_by": {"type": "slack#/types/user", "user": {"user_id": "USLACKBOT"}}, + }, + "custom_fields": [ + { + "label": "My Users", + "key": "my-users", + "type": "array", + "item_type": "slack#/types/user", + "value": [ + {"type": "slack#/types/user", "user": {"user_id": "USLACKBOT"}}, + { + "type": "slack#/types/user", + "user": { + "text": "John Smith", + "email": "j@example.com", + "icon": {"alt_text": "Avatar", "url": "https://my-hosted-icon.com"}, + }, + }, + ], + } + ], + }, + } + + file_entity_json = { + "app_unfurl_url": "https://myappdomain.com/file/456?view=preview", + "entity_type": "slack#/entities/file", + "url": "https://myappdomain.com/file/456", + "external_ref": {"id": "456", "type": "DOC"}, + "entity_payload": { + "attributes": { + "title": {"text": "Q4 Product Roadmap"}, + "display_type": "PDF Document", + "display_id": "DOC-456", + "product_icon": {"alt_text": "Product Logo", "url": "https://myappdomain.com/icons/logo.png"}, + "product_name": "FileVault Pro", + "locale": "en-US", + "full_size_preview": { + "is_supported": True, + "preview_url": "https://myappdomain.com/previews/456/full.png", + "mime_type": "image/png", + }, + }, + "fields": { + "preview": { + "alt_text": "Document preview thumbnail", + "label": "Preview", + "image_url": "https://myappdomain.com/previews/456/thumb.png", + "type": "slack#/types/image", + }, + "date_created": {"value": 1709554321, "type": "slack#/types/timestamp"}, + "mime_type": {"value": "application/pdf"}, + }, + "slack_file": {"id": "F123ABC456", "type": "pdf"}, + "display_order": ["date_created", "mime_type", "preview"], + "actions": { + "primary_actions": [ + { + "text": "Open", + "action_id": "open_file", + "value": "456", + "style": "primary", + "url": "https://myappdomain.com/file/456/view", + } + ], + "overflow_actions": [{"text": "Delete", "action_id": "delete_file", "value": "456", "style": "danger"}], + }, + }, + } + + # ============================================================================ + # Methods returning re-usable metadata components + # ============================================================================ + + def attributes(self): + return EntityAttributes( + title=EntityTitle(text="My Title"), + product_name="My Product", + display_type="Incident", + display_id="123", + ) + + def sample_file_attributes(self): + return EntityAttributes( + title=EntityTitle(text="Q4 Product Roadmap"), + display_type="PDF Document", + display_id="DOC-456", + product_icon=EntityIconField(alt_text="Product Logo", url="https://myappdomain.com/icons/logo.png"), + product_name="FileVault Pro", + locale="en-US", + full_size_preview=EntityFullSizePreview( + is_supported=True, preview_url="https://myappdomain.com/previews/456/full.png", mime_type="image/png" + ), + ) + + def user_array_custom_field(self): + return EntityCustomField( + label="My Users", + key="my-users", + type="array", + item_type="slack#/types/user", + value=[ + EntityTypedField(type="slack#/types/user", user=EntityUserIDField(user_id="USLACKBOT")), + EntityTypedField( + type="slack#/types/user", + user=EntityUserField( + text="John Smith", + email="j@example.com", + icon=EntityIconField(alt_text="Avatar", url="https://my-hosted-icon.com"), + ), + ), + ], + ) + + def task_fields(self): + return TaskEntityFields( + date_created=EntityTimestampField(value=1741164235), + status=EntityStringField(value="In Progress"), + description=EntityStringField( + value="My Description", + long=True, + edit=EntityEditSupport(enabled=True, text=EntityEditTextConfig(min_length=5, max_length=100)), + ), + due_date=EntityTypedField(value="2026-06-06", type="slack#/types/date"), + created_by=EntityTypedField( + type="slack#/types/user", + user=EntityUserIDField(user_id="USLACKBOT"), + ), + ) + + def file_fields(self): + return FileEntityFields( + preview=EntityImageField( + type="slack#/types/image", + alt_text="Document preview thumbnail", + label="Preview", + image_url="https://myappdomain.com/previews/456/thumb.png", + ), + date_created=EntityTimestampField(value=1709554321, type="slack#/types/timestamp"), + mime_type=EntityStringField(value="application/pdf"), + ) + + def supported_full_size_preview(self): + return EntityFullSizePreview( + is_supported=True, preview_url="https://example.com/preview.jpg", mime_type="image/jpeg" + ) + + def sample_file_actions(self): + return EntityActions( + primary_actions=[ + EntityActionButton( + text="Open", + action_id="open_file", + value="456", + style="primary", + url="https://myappdomain.com/file/456/view", + ) + ], + overflow_actions=[EntityActionButton(text="Delete", action_id="delete_file", value="456", style="danger")], + ) + + # ============================================================================ + # Tests + # ============================================================================ + + def test_entity_full_size_preview_error(self): + error = EntityFullSizePreviewError(code="not_found", message="File not found") + self.assertDictEqual(error.to_dict(), {"code": "not_found", "message": "File not found"}) + + def test_entity_full_size_preview_with_error(self): + preview = EntityFullSizePreview( + is_supported=False, error=EntityFullSizePreviewError(code="invalid_format", message="File not found") + ) + result = preview.to_dict() + self.assertFalse(result["is_supported"]) + self.assertIn("error", result) + + def test_attributes(self): + self.assertDictEqual( + self.attributes().to_dict(), + self.task_entity_json["entity_payload"]["attributes"], + ) + + def test_sample_file_attributes(self): + self.assertDictEqual( + self.sample_file_attributes().to_dict(), + self.file_entity_json["entity_payload"]["attributes"], + ) + + def test_array_custom_field(self): + self.assertDictEqual( + self.user_array_custom_field().to_dict(), + self.task_entity_json["entity_payload"]["custom_fields"][0], + ) + + def test_task_fields(self): + self.assertDictEqual( + self.task_fields().to_dict(), + self.task_entity_json["entity_payload"]["fields"], + ) + + def test_file_fields(self): + self.assertDictEqual( + self.file_fields().to_dict(), + self.file_entity_json["entity_payload"]["fields"], + ) + + def test_sample_file_actions(self): + self.assertDictEqual( + self.sample_file_actions().to_dict(), + self.file_entity_json["entity_payload"]["actions"], + ) + + def test_complete_task_entity_metadata(self): + entity_metadata = EventAndEntityMetadata( + entities=[ + EntityMetadata( + entity_type="slack#/entities/task", + external_ref=ExternalRef(id="123"), + url="https://myappdomain.com/123", + app_unfurl_url="https://myappdomain.com/123?myquery=param", + entity_payload=EntityPayload( + attributes=self.attributes(), + fields=self.task_fields(), + custom_fields=[self.user_array_custom_field()], + ), + ) + ] + ) + self.assertDictEqual(entity_metadata.to_dict(), {"entities": [self.task_entity_json]}) + + def test_complete_file_entity_metadata(self): + entity_metadata = EventAndEntityMetadata( + entities=[ + EntityMetadata( + entity_type="slack#/entities/file", + external_ref=ExternalRef(id="456", type="DOC"), + url="https://myappdomain.com/file/456", + app_unfurl_url="https://myappdomain.com/file/456?view=preview", + entity_payload=EntityPayload( + attributes=self.sample_file_attributes(), + fields=self.file_fields(), + slack_file=FileEntitySlackFile(id="F123ABC456", type="pdf"), + display_order=["date_created", "mime_type", "preview"], + actions=self.sample_file_actions(), + ), + ) + ] + ) + self.assertDictEqual(entity_metadata.to_dict(), {"entities": [self.file_entity_json]}) diff --git a/tests/slack_sdk/models/test_objects.py b/tests/slack_sdk/models/test_objects.py index 383abee7c..30bcb7002 100644 --- a/tests/slack_sdk/models/test_objects.py +++ b/tests/slack_sdk/models/test_objects.py @@ -1,26 +1,14 @@ import copy import unittest -from typing import Optional, List, Union +from typing import List, Optional, Union from slack_sdk.errors import SlackObjectFormationError from slack_sdk.models import JsonObject, JsonValidator -from slack_sdk.models.blocks import ( - ConfirmObject, - MarkdownTextObject, - Option, - OptionGroup, - PlainTextObject, -) -from slack_sdk.models.blocks.basic_components import Workflow, WorkflowTrigger -from slack_sdk.models.messages import ( - ChannelLink, - DateLink, - EveryoneLink, - HereLink, - Link, - ObjectLink, -) -from . import STRING_301_CHARS, STRING_51_CHARS +from slack_sdk.models.blocks import ConfirmObject, MarkdownTextObject, Option, OptionGroup, PlainTextObject +from slack_sdk.models.blocks.basic_components import FeedbackButtonObject, Workflow, WorkflowTrigger +from slack_sdk.models.messages import ChannelLink, DateLink, EveryoneLink, HereLink, Link, ObjectLink + +from . import STRING_51_CHARS, STRING_301_CHARS class SimpleJsonObject(JsonObject): @@ -374,6 +362,58 @@ def test_deny_length(self): ConfirmObject(title="title", text="Are you sure?", deny=STRING_51_CHARS).to_dict() +class FeedbackButtonObjectTests(unittest.TestCase): + def test_basic_json(self): + feedback_button = FeedbackButtonObject(text="+1", value="positive") + expected = {"text": {"emoji": True, "text": "+1", "type": "plain_text"}, "value": "positive"} + self.assertDictEqual(expected, feedback_button.to_dict()) + + def test_with_accessibility_label(self): + feedback_button = FeedbackButtonObject(text="+1", value="positive", accessibility_label="Positive feedback button") + expected = { + "text": {"emoji": True, "text": "+1", "type": "plain_text"}, + "value": "positive", + "accessibility_label": "Positive feedback button", + } + self.assertDictEqual(expected, feedback_button.to_dict()) + + def test_with_plain_text_object(self): + text_obj = PlainTextObject(text="-1", emoji=False) + feedback_button = FeedbackButtonObject(text=text_obj, value="negative") + expected = { + "text": {"emoji": False, "text": "-1", "type": "plain_text"}, + "value": "negative", + } + self.assertDictEqual(expected, feedback_button.to_dict()) + + def test_text_length_validation(self): + with self.assertRaises(SlackObjectFormationError): + FeedbackButtonObject(text="a" * 76, value="test").to_dict() + + def test_value_length_validation(self): + with self.assertRaises(SlackObjectFormationError): + FeedbackButtonObject(text="+1", value="a" * 2001).to_dict() + + def test_parse_from_dict(self): + data = {"text": "+1", "value": "positive", "accessibility_label": "Positive feedback"} + parsed = FeedbackButtonObject.parse(data) + self.assertIsInstance(parsed, FeedbackButtonObject) + expected = { + "text": {"emoji": True, "text": "+1", "type": "plain_text"}, + "value": "positive", + "accessibility_label": "Positive feedback", + } + self.assertDictEqual(expected, parsed.to_dict()) + + def test_parse_from_existing_object(self): + original = FeedbackButtonObject(text="-1", value="negative") + parsed = FeedbackButtonObject.parse(original) + self.assertIs(original, parsed) + + def test_parse_none(self): + self.assertIsNone(FeedbackButtonObject.parse(None)) + + class OptionTests(unittest.TestCase): def setUp(self) -> None: self.common = Option(label="an option", value="option_1") diff --git a/tests/slack_sdk/oauth/installation_store/test_internals.py b/tests/slack_sdk/oauth/installation_store/test_internals.py index 8c73b4c65..74cb935fc 100644 --- a/tests/slack_sdk/oauth/installation_store/test_internals.py +++ b/tests/slack_sdk/oauth/installation_store/test_internals.py @@ -39,7 +39,7 @@ def test_timestamp_to_type(ts, target_type, expected_result): def test_timestamp_to_type_invalid_str(): - match = "Invalid isoformat string" if sys.version_info[:2] > (3, 6) else "time data .* does not match format" + match = "Invalid isoformat string" with pytest.raises(ValueError, match=match): _timestamp_to_type("not-a-timestamp", int) diff --git a/tests/slack_sdk/oauth/installation_store/test_models.py b/tests/slack_sdk/oauth/installation_store/test_models.py index d63964be6..43b1ec7b2 100644 --- a/tests/slack_sdk/oauth/installation_store/test_models.py +++ b/tests/slack_sdk/oauth/installation_store/test_models.py @@ -1,4 +1,5 @@ import time +from datetime import datetime, timezone import unittest from slack_sdk.oauth.installation_store import Installation, FileInstallationStore, Bot @@ -36,6 +37,22 @@ def test_bot_custom_fields(self): self.assertEqual(bot.to_dict().get("service_user_id"), "XYZ123") self.assertEqual(bot.to_dict_for_copying().get("custom_values").get("service_user_id"), "XYZ123") + def test_bot_datetime_manipulation(self): + expected_timestamp = datetime.now(tz=timezone.utc) + bot = Bot( + bot_token="xoxb-", + bot_id="B111", + bot_user_id="U111", + bot_token_expires_at=expected_timestamp, + installed_at=expected_timestamp, + ) + bot_dict = bot.to_dict() + self.assertIsNotNone(bot_dict) + self.assertEqual( + bot_dict.get("bot_token_expires_at").isoformat(), expected_timestamp.strftime("%Y-%m-%dT%H:%M:%S+00:00") + ) + self.assertEqual(bot_dict.get("installed_at"), expected_timestamp) + def test_installation(self): installation = Installation( app_id="A111", @@ -84,3 +101,29 @@ def test_installation_custom_fields(self): self.assertEqual(bot.to_dict().get("app_id"), "A111") self.assertEqual(bot.to_dict().get("service_user_id"), "XYZ123") self.assertEqual(bot.to_dict_for_copying().get("custom_values").get("app_id"), "A222") + + def test_installation_datetime_manipulation(self): + expected_timestamp = datetime.now(tz=timezone.utc) + installation = Installation( + app_id="A111", + enterprise_id="E111", + team_id="T111", + user_id="U111", + bot_id="B111", + bot_token="xoxb-111", + bot_scopes=["chat:write"], + bot_user_id="U222", + bot_token_expires_at=expected_timestamp, + user_token_expires_at=expected_timestamp, + installed_at=expected_timestamp, + ) + installation_dict = installation.to_dict() + self.assertIsNotNone(installation_dict) + self.assertEqual( + installation_dict.get("bot_token_expires_at").isoformat(), expected_timestamp.strftime("%Y-%m-%dT%H:%M:%S+00:00") + ) + self.assertEqual( + installation_dict.get("user_token_expires_at").isoformat(), + expected_timestamp.strftime("%Y-%m-%dT%H:%M:%S+00:00"), + ) + self.assertEqual(installation_dict.get("installed_at"), expected_timestamp) diff --git a/tests/slack_sdk/signature/test_signature_verifier.py b/tests/slack_sdk/signature/test_signature_verifier.py index be3a0b72b..1635c1f62 100644 --- a/tests/slack_sdk/signature/test_signature_verifier.py +++ b/tests/slack_sdk/signature/test_signature_verifier.py @@ -15,7 +15,7 @@ def setUp(self): def tearDown(self): pass - # https://api.slack.com/authentication/verifying-requests-from-slack + # https://docs.slack.dev/authentication/verifying-requests-from-slack/ signing_secret = "8f742231b10e8888abcd99yyyzzz85a5" body = "token=xyzz0WbapA4vBCDEFasx0q6G&team_id=T1DC2JH3J&team_domain=testteamnow&channel_id=G8PSS9T3V&channel_name=foobar&user_id=U2CERLKJA&user_name=roadrunner&command=%2Fwebhook-collect&text=&response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2FT1DC2JH3J%2F397700885554%2F96rGlfmibIGlgcZRskXaIFfN&trigger_id=398738663015.47445629121.803a0bc887a14d10d2c447fce8b6703c" diff --git a/tests/slack_sdk/web/test_chat_stream.py b/tests/slack_sdk/web/test_chat_stream.py new file mode 100644 index 000000000..75c13c8c2 --- /dev/null +++ b/tests/slack_sdk/web/test_chat_stream.py @@ -0,0 +1,188 @@ +import json +import unittest +from urllib.parse import parse_qs, urlparse + +from slack_sdk import WebClient +from slack_sdk.errors import SlackRequestError +from slack_sdk.models.blocks.basic_components import FeedbackButtonObject +from slack_sdk.models.blocks.block_elements import FeedbackButtonsElement, IconButtonElement +from slack_sdk.models.blocks.blocks import ContextActionsBlock +from tests.mock_web_api_server import cleanup_mock_web_api_server, setup_mock_web_api_server +from tests.slack_sdk.web.mock_web_api_handler import MockHandler + + +class ChatStreamMockHandler(MockHandler): + """Extended mock handler that captures request bodies for chat stream methods""" + + def _handle(self): + try: + # put_nowait is common between Queue & asyncio.Queue, it does not need to be awaited + self.server.queue.put_nowait(self.path) + + # Standard auth and validation from parent + if self.is_valid_token() and self.is_valid_user_agent(): + token = self.headers["authorization"].split(" ")[1] + parsed_path = urlparse(self.path) + len_header = self.headers.get("Content-Length") or 0 + content_len = int(len_header) + post_body = self.rfile.read(content_len) + request_body = None + if post_body: + try: + post_body = post_body.decode("utf-8") + if post_body.startswith("{"): + request_body = json.loads(post_body) + else: + request_body = {k: v[0] for k, v in parse_qs(post_body).items()} + except UnicodeDecodeError: + pass + else: + if parsed_path and parsed_path.query: + request_body = {k: v[0] for k, v in parse_qs(parsed_path.query).items()} + + # Store request body for chat stream endpoints + if self.path in ["/chat.startStream", "/chat.appendStream", "/chat.stopStream"] and request_body: + if not hasattr(self.server, "chat_stream_requests"): + self.server.chat_stream_requests = {} + self.server.chat_stream_requests[self.path] = { + "token": token, + **request_body, + } + + # Load response file + pattern = str(token).split("xoxb-", 1)[1] + with open(f"tests/slack_sdk_fixture/web_response_{pattern}.json") as file: + body = json.load(file) + + else: + body = self.invalid_auth + + if not body: + body = self.not_found + + self.send_response(200) + self.set_common_headers() + self.wfile.write(json.dumps(body).encode("utf-8")) + self.wfile.close() + + except Exception as e: + self.logger.error(str(e), exc_info=True) + raise + + +class TestChatStream(unittest.TestCase): + def setUp(self): + setup_mock_web_api_server(self, ChatStreamMockHandler) + self.client = WebClient( + token="xoxb-chat_stream_test", + base_url="http://localhost:8888", + ) + + def tearDown(self): + cleanup_mock_web_api_server(self) + + def test_streams_a_short_message(self): + streamer = self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + streamer.append(markdown_text="nice!") + streamer.stop() + + self.assertEqual(self.received_requests.get("/chat.startStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.appendStream", 0), 0) + self.assertEqual(self.received_requests.get("/chat.stopStream", 0), 1) + + if hasattr(self.thread.server, "chat_stream_requests"): + start_request = self.thread.server.chat_stream_requests.get("/chat.startStream", {}) + self.assertEqual(start_request.get("channel"), "C0123456789") + self.assertEqual(start_request.get("thread_ts"), "123.000") + self.assertEqual(start_request.get("recipient_team_id"), "T0123456789") + self.assertEqual(start_request.get("recipient_user_id"), "U0123456789") + + stop_request = self.thread.server.chat_stream_requests.get("/chat.stopStream", {}) + self.assertEqual(stop_request.get("channel"), "C0123456789") + self.assertEqual(stop_request.get("ts"), "123.123") + self.assertEqual(stop_request.get("markdown_text"), "nice!") + + def test_streams_a_long_message(self): + streamer = self.client.chat_stream( + buffer_size=5, + channel="C0123456789", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + thread_ts="123.000", + ) + streamer.append(markdown_text="**this messag") + streamer.append(markdown_text="e is", token="xoxb-chat_stream_test_token1") + streamer.append(markdown_text=" bold!") + streamer.append(markdown_text="*") + streamer.stop( + blocks=[ + ContextActionsBlock( + elements=[ + FeedbackButtonsElement( + positive_button=FeedbackButtonObject(text="good", value="+1"), + negative_button=FeedbackButtonObject(text="bad", value="-1"), + ), + IconButtonElement( + icon="trash", + text="delete", + ), + ], + ) + ], + markdown_text="*", + token="xoxb-chat_stream_test_token2", + ) + + self.assertEqual(self.received_requests.get("/chat.startStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.appendStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.stopStream", 0), 1) + + if hasattr(self.thread.server, "chat_stream_requests"): + start_request = self.thread.server.chat_stream_requests.get("/chat.startStream", {}) + self.assertEqual(start_request.get("channel"), "C0123456789") + self.assertEqual(start_request.get("thread_ts"), "123.000") + self.assertEqual(start_request.get("markdown_text"), "**this messag") + self.assertEqual(start_request.get("recipient_team_id"), "T0123456789") + self.assertEqual(start_request.get("recipient_user_id"), "U0123456789") + + append_request = self.thread.server.chat_stream_requests.get("/chat.appendStream", {}) + self.assertEqual(append_request.get("channel"), "C0123456789") + self.assertEqual(append_request.get("markdown_text"), "e is bold!") + self.assertEqual(append_request.get("token"), "xoxb-chat_stream_test_token1") + self.assertEqual(append_request.get("ts"), "123.123") + + stop_request = self.thread.server.chat_stream_requests.get("/chat.stopStream", {}) + self.assertEqual( + json.dumps(stop_request.get("blocks")), + '[{"elements": [{"negative_button": {"text": {"emoji": true, "text": "bad", "type": "plain_text"}, "value": "-1"}, "positive_button": {"text": {"emoji": true, "text": "good", "type": "plain_text"}, "value": "+1"}, "type": "feedback_buttons"}, {"icon": "trash", "text": {"emoji": true, "text": "delete", "type": "plain_text"}, "type": "icon_button"}], "type": "context_actions"}]', + ) + self.assertEqual(stop_request.get("channel"), "C0123456789") + self.assertEqual(stop_request.get("markdown_text"), "**") + self.assertEqual(stop_request.get("token"), "xoxb-chat_stream_test_token2") + self.assertEqual(stop_request.get("ts"), "123.123") + + def test_streams_errors_when_appending_to_an_unstarted_stream(self): + streamer = self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + token="xoxb-chat_stream_test_missing_ts", + ) + with self.assertRaisesRegex(SlackRequestError, r"^Failed to stop stream: stream not started$"): + streamer.stop() + + def test_streams_errors_when_appending_to_a_completed_stream(self): + streamer = self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + ) + streamer.append(markdown_text="nice!") + streamer.stop() + with self.assertRaisesRegex(SlackRequestError, r"^Cannot append to stream: stream state is completed$"): + streamer.append(markdown_text="more...") + with self.assertRaisesRegex(SlackRequestError, r"^Cannot stop stream: stream state is completed$"): + streamer.stop() diff --git a/tests/slack_sdk/web/test_web_client_issue_891.py b/tests/slack_sdk/web/test_web_client_msg_text_content_warnings.py similarity index 63% rename from tests/slack_sdk/web/test_web_client_issue_891.py rename to tests/slack_sdk/web/test_web_client_msg_text_content_warnings.py index ed47b0e4d..e94adba07 100644 --- a/tests/slack_sdk/web/test_web_client_issue_891.py +++ b/tests/slack_sdk/web/test_web_client_msg_text_content_warnings.py @@ -1,11 +1,12 @@ import unittest +import warnings from slack_sdk import WebClient from tests.web.mock_web_api_handler import MockHandler from tests.mock_web_api_server import setup_mock_web_api_server, cleanup_mock_web_api_server -class TestWebClient_Issue_891(unittest.TestCase): +class TestWebClientMessageTextContentWarnings(unittest.TestCase): def setUp(self): setup_mock_web_api_server(self, MockHandler) @@ -65,3 +66,39 @@ def test_missing_fallback_warning_chat_update(self): with self.assertWarnsRegex(UserWarning, "`fallback` argument is missing"): resp = client.chat_update(channel="C111", ts="111.222", blocks=[], attachments=[{"text": "hi"}]) self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_postMessage(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_postMessage(channel="C111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_postEphemeral(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_postEphemeral(channel="C111", user="U111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_scheduleMessage(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_scheduleMessage(channel="C111", post_at="299876400", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_update(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_update(channel="C111", ts="111.222", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) diff --git a/tests/slack_sdk_async/socket_mode/test_aiohttp.py b/tests/slack_sdk_async/socket_mode/test_aiohttp.py index 44bb2d9db..eda1fecdd 100644 --- a/tests/slack_sdk_async/socket_mode/test_aiohttp.py +++ b/tests/slack_sdk_async/socket_mode/test_aiohttp.py @@ -37,7 +37,7 @@ async def test_init_with_loop(self): app_token="xapp-A111-222-xyz", web_client=self.web_client, auto_reconnect_enabled=False, - loop=asyncio.new_event_loop(), + loop=asyncio.get_event_loop(), ) try: self.assertIsNotNone(client) diff --git a/tests/slack_sdk_async/web/test_async_chat_stream.py b/tests/slack_sdk_async/web/test_async_chat_stream.py new file mode 100644 index 000000000..212fee1e2 --- /dev/null +++ b/tests/slack_sdk_async/web/test_async_chat_stream.py @@ -0,0 +1,193 @@ +import json +import unittest +from urllib.parse import parse_qs, urlparse + +from slack_sdk.errors import SlackRequestError +from slack_sdk.models.blocks.basic_components import FeedbackButtonObject +from slack_sdk.models.blocks.block_elements import FeedbackButtonsElement, IconButtonElement +from slack_sdk.models.blocks.blocks import ContextActionsBlock +from slack_sdk.web.async_client import AsyncWebClient +from tests.mock_web_api_server import cleanup_mock_web_api_server, setup_mock_web_api_server +from tests.slack_sdk.web.mock_web_api_handler import MockHandler +from tests.slack_sdk_async.helpers import async_test + + +class ChatStreamMockHandler(MockHandler): + """Extended mock handler that captures request bodies for chat stream methods""" + + def _handle(self): + try: + # put_nowait is common between Queue & asyncio.Queue, it does not need to be awaited + self.server.queue.put_nowait(self.path) + + # Standard auth and validation from parent + if self.is_valid_token() and self.is_valid_user_agent(): + token = self.headers["authorization"].split(" ")[1] + parsed_path = urlparse(self.path) + len_header = self.headers.get("Content-Length") or 0 + content_len = int(len_header) + post_body = self.rfile.read(content_len) + request_body = None + if post_body: + try: + post_body = post_body.decode("utf-8") + if post_body.startswith("{"): + request_body = json.loads(post_body) + else: + request_body = {k: v[0] for k, v in parse_qs(post_body).items()} + except UnicodeDecodeError: + pass + else: + if parsed_path and parsed_path.query: + request_body = {k: v[0] for k, v in parse_qs(parsed_path.query).items()} + + # Store request body for chat stream endpoints + if self.path in ["/chat.startStream", "/chat.appendStream", "/chat.stopStream"] and request_body: + if not hasattr(self.server, "chat_stream_requests"): + self.server.chat_stream_requests = {} + self.server.chat_stream_requests[self.path] = { + "token": token, + **request_body, + } + + # Load response file + pattern = str(token).split("xoxb-", 1)[1] + with open(f"tests/slack_sdk_fixture/web_response_{pattern}.json") as file: + body = json.load(file) + + else: + body = self.invalid_auth + + if not body: + body = self.not_found + + self.send_response(200) + self.set_common_headers() + self.wfile.write(json.dumps(body).encode("utf-8")) + self.wfile.close() + + except Exception as e: + self.logger.error(str(e), exc_info=True) + raise + + +class TestAsyncChatStream(unittest.TestCase): + def setUp(self): + setup_mock_web_api_server(self, ChatStreamMockHandler) + self.client = AsyncWebClient( + token="xoxb-chat_stream_test", + base_url="http://localhost:8888", + ) + + def tearDown(self): + cleanup_mock_web_api_server(self) + + @async_test + async def test_streams_a_short_message(self): + streamer = await self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + ) + await streamer.append(markdown_text="nice!") + await streamer.stop() + + self.assertEqual(self.received_requests.get("/chat.startStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.appendStream", 0), 0) + self.assertEqual(self.received_requests.get("/chat.stopStream", 0), 1) + + if hasattr(self.thread.server, "chat_stream_requests"): + start_request = self.thread.server.chat_stream_requests.get("/chat.startStream", {}) + self.assertEqual(start_request.get("channel"), "C0123456789") + self.assertEqual(start_request.get("thread_ts"), "123.000") + self.assertEqual(start_request.get("recipient_team_id"), "T0123456789") + self.assertEqual(start_request.get("recipient_user_id"), "U0123456789") + + stop_request = self.thread.server.chat_stream_requests.get("/chat.stopStream", {}) + self.assertEqual(stop_request.get("channel"), "C0123456789") + self.assertEqual(stop_request.get("ts"), "123.123") + self.assertEqual(stop_request.get("markdown_text"), "nice!") + + @async_test + async def test_streams_a_long_message(self): + streamer = await self.client.chat_stream( + buffer_size=5, + channel="C0123456789", + recipient_team_id="T0123456789", + recipient_user_id="U0123456789", + thread_ts="123.000", + ) + await streamer.append(markdown_text="**this messag") + await streamer.append(markdown_text="e is", token="xoxb-chat_stream_test_token1") + await streamer.append(markdown_text=" bold!") + await streamer.append(markdown_text="*") + await streamer.stop( + blocks=[ + ContextActionsBlock( + elements=[ + FeedbackButtonsElement( + positive_button=FeedbackButtonObject(text="good", value="+1"), + negative_button=FeedbackButtonObject(text="bad", value="-1"), + ), + IconButtonElement( + icon="trash", + text="delete", + ), + ], + ) + ], + markdown_text="*", + token="xoxb-chat_stream_test_token2", + ) + + self.assertEqual(self.received_requests.get("/chat.startStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.appendStream", 0), 1) + self.assertEqual(self.received_requests.get("/chat.stopStream", 0), 1) + + if hasattr(self.thread.server, "chat_stream_requests"): + start_request = self.thread.server.chat_stream_requests.get("/chat.startStream", {}) + self.assertEqual(start_request.get("channel"), "C0123456789") + self.assertEqual(start_request.get("thread_ts"), "123.000") + self.assertEqual(start_request.get("markdown_text"), "**this messag") + self.assertEqual(start_request.get("recipient_team_id"), "T0123456789") + self.assertEqual(start_request.get("recipient_user_id"), "U0123456789") + + append_request = self.thread.server.chat_stream_requests.get("/chat.appendStream", {}) + self.assertEqual(append_request.get("channel"), "C0123456789") + self.assertEqual(append_request.get("markdown_text"), "e is bold!") + self.assertEqual(append_request.get("token"), "xoxb-chat_stream_test_token1") + self.assertEqual(append_request.get("ts"), "123.123") + + stop_request = self.thread.server.chat_stream_requests.get("/chat.stopStream", {}) + self.assertEqual( + json.dumps(stop_request.get("blocks")), + '[{"elements": [{"negative_button": {"text": {"emoji": true, "text": "bad", "type": "plain_text"}, "value": "-1"}, "positive_button": {"text": {"emoji": true, "text": "good", "type": "plain_text"}, "value": "+1"}, "type": "feedback_buttons"}, {"icon": "trash", "text": {"emoji": true, "text": "delete", "type": "plain_text"}, "type": "icon_button"}], "type": "context_actions"}]', + ) + self.assertEqual(stop_request.get("channel"), "C0123456789") + self.assertEqual(stop_request.get("markdown_text"), "**") + self.assertEqual(stop_request.get("token"), "xoxb-chat_stream_test_token2") + self.assertEqual(stop_request.get("ts"), "123.123") + + @async_test + async def test_streams_errors_when_appending_to_an_unstarted_stream(self): + streamer = await self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + token="xoxb-chat_stream_test_missing_ts", + ) + with self.assertRaisesRegex(SlackRequestError, r"^Failed to stop stream: stream not started$"): + await streamer.stop() + + @async_test + async def test_streams_errors_when_appending_to_a_completed_stream(self): + streamer = await self.client.chat_stream( + channel="C0123456789", + thread_ts="123.000", + ) + await streamer.append(markdown_text="nice!") + await streamer.stop() + with self.assertRaisesRegex(SlackRequestError, r"^Cannot append to stream: stream state is completed$"): + await streamer.append(markdown_text="more...") + with self.assertRaisesRegex(SlackRequestError, r"^Cannot stop stream: stream state is completed$"): + await streamer.stop() diff --git a/tests/slack_sdk_async/web/test_web_client_coverage.py b/tests/slack_sdk_async/web/test_web_client_coverage.py index e09a0c0ec..0a3c1687b 100644 --- a/tests/slack_sdk_async/web/test_web_client_coverage.py +++ b/tests/slack_sdk_async/web/test_web_client_coverage.py @@ -7,16 +7,15 @@ from slack_sdk.web import WebClient from slack_sdk.web.async_client import AsyncWebClient from slack_sdk.web.legacy_client import LegacyWebClient +from tests.mock_web_api_server import cleanup_mock_web_api_server_async, setup_mock_web_api_server_async from tests.slack_sdk.web.mock_web_api_handler import MockHandler -from tests.mock_web_api_server import setup_mock_web_api_server_async, cleanup_mock_web_api_server_async - from tests.slack_sdk_async.helpers import async_test class TestWebClientCoverage(unittest.TestCase): - # 289 endpoints as of Sept 4, 2024 + # 295 endpoints as of September 17, 2025 # Can be fetched by running `var methodNames = [].slice.call(document.getElementsByClassName('apiReferenceFilterableList__listItemLink')).map(e => e.href.replace("https://api.slack.com/methods/", ""));console.log(methodNames.toString());console.log(methodNames.length);` on https://api.slack.com/methods - all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,channels.create,channels.info,channels.invite,channels.mark,groups.create,groups.info,groups.invite,groups.mark,groups.open,im.list,im.mark,im.open,mpim.list,mpim.mark,mpim.open,assistant.threads.setStatus,assistant.threads.setTitle,assistant.threads.setSuggestedPrompts".split( + all_api_methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.uninstall,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.appendStream,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.scheduledMessages.list,chat.startStream,chat.stopStream,chat.unfurl,chat.update,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.comments.delete,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,slackLists.access.delete,slackLists.access.set,slackLists.create,slackLists.download.get,slackLists.download.start,slackLists.items.create,slackLists.items.delete,slackLists.items.delete,slackLists.items.deleteMultiple,slackLists.items.info,slackLists.items.list,slackLists.items.update,slackLists.update,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.featured.add,workflows.featured.list,workflows.featured.remove,workflows.featured.set,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark".split( "," ) @@ -68,6 +67,8 @@ def setUp(self): # TODO: admin.audit.anomaly.allow.* / The endpoints requires a "session" token "admin.audit.anomaly.allow.getItem", "admin.audit.anomaly.allow.updateItem", + "assistant.search.context", # TODO: add this method in follow up PR + "conversations.requestSharedInvite.list", # TODO: add this method in follow up PR ]: continue self.api_methods_to_call.append(api_method) @@ -143,6 +144,33 @@ async def run_method(self, method_name, method, async_method): )["method"] ) await async_method(entity_ids=["1", "2"], entity_type="type", policy_name="policyname") + elif method_name == "admin_conversations_createForObjects": + self.api_methods_to_call.remove( + method( + object_id="0019000000DmehKAAR", + salesforce_org_id="00DGC00000024hsuWY", + )["method"] + ) + await async_method(object_id="0019000000DmehKAAR", salesforce_org_id="00DGC00000024hsuWY") + elif method_name == "admin_conversations_linkObjects": + self.api_methods_to_call.remove( + method( + channel="C1234567890", + record_id="0019000000DmehKAAR", + salesforce_org_id="00DGC00000024hsuWY", + )["method"] + ) + await async_method( + channel="C1234567890", record_id="0019000000DmehKAAR", salesforce_org_id="00DGC00000024hsuWY" + ) + elif method_name == "admin_conversations_unlinkObjects": + self.api_methods_to_call.remove( + method( + channel="C1234567890", + new_name="new-channel-name", + )["method"] + ) + await async_method(channel="C1234567890", new_name="new-channel-name") elif method_name == "admin_barriers_create": self.api_methods_to_call.remove( method( @@ -397,7 +425,19 @@ async def run_method(self, method_name, method, async_method): self.api_methods_to_call.remove( method(channel_id="D111", thread_ts="111.222", status="is typing...")["method"] ) + method( + channel_id="D111", + thread_ts="111.222", + status="is typing...", + loading_states=["Thinking...", "Writing..."], + ) await async_method(channel_id="D111", thread_ts="111.222", status="is typing...") + await async_method( + channel_id="D111", + thread_ts="111.222", + status="is typing...", + loading_states=["Thinking...", "Writing..."], + ) elif method_name == "assistant_threads_setTitle": self.api_methods_to_call.remove(method(channel_id="D111", thread_ts="111.222", title="New chat")["method"]) await async_method(channel_id="D111", thread_ts="111.222", title="New chat") @@ -512,6 +552,9 @@ async def run_method(self, method_name, method, async_method): elif method_name == "canvases_sections_lookup": self.api_methods_to_call.remove(method(canvas_id="F123", criteria={})["method"]) await async_method(canvas_id="F123", criteria={}) + elif method_name == "chat_appendStream": + self.api_methods_to_call.remove(method(channel="C123", ts="123.123", markdown_text="**bold**")["method"]) + await async_method(channel="C123", ts="123.123", markdown_text="**bold**") elif method_name == "chat_delete": self.api_methods_to_call.remove(method(channel="C123", ts="123.123")["method"]) await async_method(channel="C123", ts="123.123") @@ -533,6 +576,19 @@ async def run_method(self, method_name, method, async_method): elif method_name == "chat_scheduleMessage": self.api_methods_to_call.remove(method(channel="C123", post_at=123, text="Hi")["method"]) await async_method(channel="C123", post_at=123, text="Hi") + elif method_name == "chat_scheduledMessages_list": + self.api_methods_to_call.remove(method()["method"]) + await async_method() + elif method_name == "chat_startStream": + self.api_methods_to_call.remove(method(channel="C123", thread_ts="123.123")["method"]) + await async_method(channel="C123", thread_ts="123.123") + method(channel="C123", thread_ts="123.123", recipient_team_id="T123", recipient_user_id="U123") + await async_method(channel="C123", thread_ts="123.123", recipient_team_id="T123", recipient_user_id="U123") + elif method_name == "chat_stopStream": + self.api_methods_to_call.remove( + method(channel="C123", ts="123.123", blocks=[{"type": "markdown", "text": "**twelve**"}])["method"] + ) + await async_method(channel="C123", ts="123.123", blocks=[{"type": "markdown", "text": "**twelve**"}]) elif method_name == "chat_unfurl": self.api_methods_to_call.remove( method( @@ -746,6 +802,44 @@ async def run_method(self, method_name, method, async_method): elif method_name == "search_messages": self.api_methods_to_call.remove(method(query="Slack")["method"]) await async_method(query="Slack") + elif method_name == "slackLists_access_delete": + self.api_methods_to_call.remove(method(list_id="123")["method"]) + await async_method(list_id="123") + elif method_name == "slackLists_access_set": + self.api_methods_to_call.remove(method(list_id="123", access_level="private")["method"]) + await async_method(list_id="123", access_level="private") + elif method_name == "slackLists_create": + self.api_methods_to_call.remove(method(name="Backlog")["method"]) + await async_method(name="Backlog") + elif method_name == "slackLists_download_get": + self.api_methods_to_call.remove(method(list_id="123", job_id="123")["method"]) + await async_method(list_id="123", job_id="123") + elif method_name == "slackLists_download_start": + self.api_methods_to_call.remove(method(list_id="123")["method"]) + await async_method(list_id="123") + elif method_name == "slackLists_items_create": + self.api_methods_to_call.remove(method(list_id="123")["method"]) + await async_method(list_id="123") + elif method_name == "slackLists_items_delete": + self.api_methods_to_call.remove(method(list_id="123", id="123")["method"]) + await async_method(list_id="123", id="123") + elif method_name == "slackLists_items_deleteMultiple": + self.api_methods_to_call.remove(method(list_id="123", ids=["123", "456"])["method"]) + await async_method(list_id="123", ids=["123", "456"]) + elif method_name == "slackLists_items_info": + self.api_methods_to_call.remove(method(list_id="123", id="123")["method"]) + await async_method(list_id="123", id="123") + elif method_name == "slackLists_items_list": + self.api_methods_to_call.remove(method(list_id="123")["method"]) + await async_method(list_id="123") + elif method_name == "slackLists_items_update": + self.api_methods_to_call.remove( + method(list_id="123", cells=[{"column_id": "col123"}, {"row_id": "row123"}])["method"] + ) + await async_method(list_id="123", cells=[{"column_id": "col123"}, {"row_id": "row123"}]) + elif method_name == "slackLists_update": + self.api_methods_to_call.remove(method(id="123")["method"]) + await async_method(id="123") elif method_name == "team_externalTeams_disconnect": self.api_methods_to_call.remove(method(target_team="T111")["method"]) await async_method(target_team="T111") @@ -805,6 +899,26 @@ async def run_method(self, method_name, method, async_method): elif method_name == "views_update": self.api_methods_to_call.remove(method(view_id="V123", view={})["method"]) await async_method(view_id="V123", view={}) + elif method_name == "workflows_featured_add": + self.api_methods_to_call.remove(method(channel_id="C123", trigger_ids=["Ft123", "Ft234"])["method"]) + method(channel_id="C123", trigger_ids="Ft123,Ft234") + await async_method(channel_id="C123", trigger_ids=["Ft123", "Ft234"]) + await async_method(channel_id="C123", trigger_ids="Ft123,Ft234") + elif method_name == "workflows_featured_list": + self.api_methods_to_call.remove(method(channel_ids=["C123", "C234"])["method"]) + method(channel_ids="C123,C234") + await async_method(channel_ids=["C123", "C234"]) + await async_method(channel_ids="C123,C234") + elif method_name == "workflows_featured_remove": + self.api_methods_to_call.remove(method(channel_id="C123", trigger_ids=["Ft123", "Ft234"])["method"]) + method(channel_id="C123", trigger_ids="Ft123,Ft234") + await async_method(channel_id="C123", trigger_ids=["Ft123", "Ft234"]) + await async_method(channel_id="C123", trigger_ids="Ft123,Ft234") + elif method_name == "workflows_featured_set": + self.api_methods_to_call.remove(method(channel_id="C123", trigger_ids=["Ft123", "Ft234"])["method"]) + method(channel_id="C123", trigger_ids="Ft123,Ft234") + await async_method(channel_id="C123", trigger_ids=["Ft123", "Ft234"]) + await async_method(channel_id="C123", trigger_ids="Ft123,Ft234") elif method_name == "workflows_stepCompleted": self.api_methods_to_call.remove(method(workflow_step_execute_id="S123", outputs={})["method"]) await async_method(workflow_step_execute_id="S123", outputs={}) diff --git a/tests/slack_sdk_async/web/test_web_client_issue_891.py b/tests/slack_sdk_async/web/test_web_client_msg_text_content_warnings.py similarity index 64% rename from tests/slack_sdk_async/web/test_web_client_issue_891.py rename to tests/slack_sdk_async/web/test_web_client_msg_text_content_warnings.py index 1e81f775d..085b103d9 100644 --- a/tests/slack_sdk_async/web/test_web_client_issue_891.py +++ b/tests/slack_sdk_async/web/test_web_client_msg_text_content_warnings.py @@ -1,4 +1,5 @@ import unittest +import warnings from slack_sdk.web.async_client import AsyncWebClient from tests.helpers import async_test @@ -6,7 +7,7 @@ from tests.mock_web_api_server import setup_mock_web_api_server_async, cleanup_mock_web_api_server_async -class TestWebClient_Issue_829(unittest.TestCase): +class TestWebClientMessageTextContentWarnings(unittest.TestCase): def setUp(self): setup_mock_web_api_server_async(self, MockHandler) @@ -74,3 +75,43 @@ async def test_missing_fallback_warning_chat_update(self): with self.assertWarnsRegex(UserWarning, "`text` argument is missing"): resp = await client.chat_update(channel="C111", ts="111.222", blocks=[], attachments=[{"text": "hi"}]) self.assertIsNone(resp["error"]) + + @async_test + async def test_no_warning_when_markdown_text_is_provided_chat_postMessage(self): + client = AsyncWebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = await client.chat_postMessage(channel="C111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + @async_test + async def test_no_warning_when_markdown_text_is_provided_chat_postEphemeral(self): + client = AsyncWebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = await client.chat_postEphemeral(channel="C111", user="U111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + @async_test + async def test_no_warning_when_markdown_text_is_provided_chat_scheduleMessage(self): + client = AsyncWebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = await client.chat_scheduleMessage(channel="C111", post_at="299876400", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + @async_test + async def test_no_warning_when_markdown_text_is_provided_chat_update(self): + client = AsyncWebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = await client.chat_update(channel="C111", ts="111.222", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) diff --git a/tests/slack_sdk_fixture/web_response_chat_stream_test.json b/tests/slack_sdk_fixture/web_response_chat_stream_test.json new file mode 100644 index 000000000..2b5f29d01 --- /dev/null +++ b/tests/slack_sdk_fixture/web_response_chat_stream_test.json @@ -0,0 +1,4 @@ +{ + "ok": true, + "ts": "123.123" +} diff --git a/tests/slack_sdk_fixture/web_response_chat_stream_test_missing_ts.json b/tests/slack_sdk_fixture/web_response_chat_stream_test_missing_ts.json new file mode 100644 index 000000000..0287aedde --- /dev/null +++ b/tests/slack_sdk_fixture/web_response_chat_stream_test_missing_ts.json @@ -0,0 +1,3 @@ +{ + "ok": true +} diff --git a/tests/slack_sdk_fixture/web_response_chat_stream_test_token1.json b/tests/slack_sdk_fixture/web_response_chat_stream_test_token1.json new file mode 100644 index 000000000..0287aedde --- /dev/null +++ b/tests/slack_sdk_fixture/web_response_chat_stream_test_token1.json @@ -0,0 +1,3 @@ +{ + "ok": true +} diff --git a/tests/slack_sdk_fixture/web_response_chat_stream_test_token2.json b/tests/slack_sdk_fixture/web_response_chat_stream_test_token2.json new file mode 100644 index 000000000..0287aedde --- /dev/null +++ b/tests/slack_sdk_fixture/web_response_chat_stream_test_token2.json @@ -0,0 +1,3 @@ +{ + "ok": true +} diff --git a/tests/web/classes/test_blocks.py b/tests/web/classes/test_blocks.py index 4874b8514..4e9ce2fb2 100644 --- a/tests/web/classes/test_blocks.py +++ b/tests/web/classes/test_blocks.py @@ -19,7 +19,7 @@ from . import STRING_3001_CHARS -# https://api.slack.com/reference/block-kit/blocks +# https://docs.slack.dev/reference/block-kit/blocks class BlockTests(unittest.TestCase): diff --git a/tests/web/classes/test_elements.py b/tests/web/classes/test_elements.py index 27f49ebab..215ec8aac 100644 --- a/tests/web/classes/test_elements.py +++ b/tests/web/classes/test_elements.py @@ -60,7 +60,7 @@ def test_document_3(self): input = { "type": "button", "text": {"type": "plain_text", "text": "Link Button"}, - "url": "https://api.slack.com/block-kit", + "url": "https://docs.slack.dev/block-kit/", } self.assertDictEqual(input, ButtonElement(**input).to_dict()) self.assertDictEqual(input, LinkButtonElement(**input).to_dict()) @@ -635,7 +635,7 @@ def test_document(self): }, { "text": {"type": "plain_text", "text": "*this is plain_text text*"}, - # https://api.slack.com/reference/block-kit/composition-objects#option + # https://docs.slack.dev/reference/block-kit/composition-objects/option-object "url": "https://www.example.com", }, ], diff --git a/tests/web/test_web_client_issue_891.py b/tests/web/test_web_client_msg_text_content_warnings.py similarity index 63% rename from tests/web/test_web_client_issue_891.py rename to tests/web/test_web_client_msg_text_content_warnings.py index f2d341f49..11ca100ac 100644 --- a/tests/web/test_web_client_issue_891.py +++ b/tests/web/test_web_client_msg_text_content_warnings.py @@ -1,16 +1,18 @@ import unittest +import warnings from slack import WebClient from tests.web.mock_web_api_handler import MockHandler from tests.mock_web_api_server import setup_mock_web_api_server, cleanup_mock_web_api_server -class TestWebClient_Issue_891(unittest.TestCase): +class TestWebClientMessageTextContentWarnings(unittest.TestCase): def setUp(self): setup_mock_web_api_server(self, MockHandler) def tearDown(self): cleanup_mock_web_api_server(self) + warnings.resetwarnings() def test_missing_text_warning_chat_postMessage(self): client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") @@ -65,3 +67,39 @@ def test_missing_fallback_warning_chat_update(self): with self.assertWarnsRegex(UserWarning, "`fallback` argument is missing"): resp = client.chat_update(channel="C111", ts="111.222", blocks=[], attachments=[{"text": "hi"}]) self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_postMessage(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_postMessage(channel="C111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_postEphemeral(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_postEphemeral(channel="C111", user="U111", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_scheduleMessage(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_scheduleMessage(channel="C111", post_at="299876400", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) + + def test_no_warning_when_markdown_text_is_provided_chat_update(self): + client = WebClient(base_url="http://localhost:8888", token="xoxb-api_test") + with warnings.catch_warnings(record=True) as warning_list: + warnings.simplefilter("always") + resp = client.chat_update(channel="C111", ts="111.222", markdown_text="# hello") + + self.assertEqual(warning_list, []) + self.assertIsNone(resp["error"]) diff --git a/tutorial/01-creating-the-slack-app.md b/tutorial/01-creating-the-slack-app.md index f617bb348..81e3de76b 100644 --- a/tutorial/01-creating-the-slack-app.md +++ b/tutorial/01-creating-the-slack-app.md @@ -9,7 +9,7 @@ ### Give your app permissions -[Scopes](https://api.slack.com/scopes) give your app permission to do things (for example, post messages) in your development workspace. +[Scopes](https://docs.slack.dev/reference/scopes) give your app permission to do things (for example, post messages) in your development workspace. - Navigate to **OAuth & Permissions** on the sidebar to add scopes to your app @@ -19,8 +19,8 @@ For now, we'll only use one scope. -- Add the [`chat:write` scope](https://api.slack.com/scopes/chat:write) to grant your app the permission to post messages in channels it's a member of. -- Add the [`im:write` scope](https://api.slack.com/scopes/im:write) to grant your app the permission to post messages in DMs. +- Add the [`chat:write` scope](https://docs.slack.dev/reference/scopes/chat.write/) to grant your app the permission to post messages in channels it's a member of. +- Add the [`im:write` scope](https://docs.slack.dev/reference/scopes/im.write/) to grant your app the permission to post messages in DMs. πŸŽ‰ You should briefly see a success banner. diff --git a/tutorial/02-building-a-message.md b/tutorial/02-building-a-message.md index fa4416d0a..9f2481a84 100644 --- a/tutorial/02-building-a-message.md +++ b/tutorial/02-building-a-message.md @@ -2,7 +2,7 @@ The code for this step is available [here](PythOnBoardingBot/onboarding_tutorial.py). -> πŸ’‘ **[Block Kit](https://api.slack.com/block-kit)** is a UI framework for Slack apps that offers a balance of control and flexibility when building experiences in messages and other surfaces. Customize the order and appearance of information and guide users through your app's capabilities by composing, updating, sequencing, and stacking blocks β€” reusable components that work almost everywhere in Slack. You can experiment and prototype with Block Kit using the [Block Kit Builder](https://api.slack.com/tools/block-kit-builder). +> πŸ’‘ **[Block Kit](https://docs.slack.dev/block-kit/)** is a UI framework for Slack apps that offers a balance of control and flexibility when building experiences in messages and other surfaces. Customize the order and appearance of information and guide users through your app's capabilities by composing, updating, sequencing, and stacking blocks β€” reusable components that work almost everywhere in Slack. You can experiment and prototype with Block Kit using the [Block Kit Builder](https://api.slack.com/tools/block-kit-builder). We're going to be using Block Kit to build our onboarding tutorial messages. diff --git a/tutorial/03-responding-to-slack-events.md b/tutorial/03-responding-to-slack-events.md index b6a998800..70c904e50 100644 --- a/tutorial/03-responding-to-slack-events.md +++ b/tutorial/03-responding-to-slack-events.md @@ -81,7 +81,7 @@ def start_onboarding(user_id: str, channel: str, client: WebClient): ### Responding to events in Slack -When events occur in Slack there are two primary ways to be notified about them. We can send you an [HTTP Request through our Events API](https://api.slack.com/apis/connections/events-api), or you can stream events through a WebSocket connection with our [Socket Mode](https://api.slack.com/apis/connections/socket) API. If you're behind a firewall and cannot receive incoming web requests from Slack, we recommend going with Socket Mode. +When events occur in Slack there are two primary ways to be notified about them. We can send you an [HTTP Request through our Events API](https://docs.slack.dev/apis/events-api/), or you can stream events through a WebSocket connection with our [Socket Mode](https://docs.slack.dev/apis/events-api/using-socket-mode/) API. If you're behind a firewall and cannot receive incoming web requests from Slack, we recommend going with Socket Mode. In this tutorial we'll be using the Events API and the [Bolt for Python](https://github.com/slackapi/bolt-python). @@ -96,7 +96,7 @@ Back to our application, it's time to link our onboarding functionality to Slack # Note: Bolt provides a WebClient instance as an argument to the listener function # we've defined here, which we then use to access Slack Web API methods like conversations_open. -# For more info, checkout: https://slack.dev/bolt-python/concepts#message-listening +# For more info, checkout: https://docs.slack.dev/tools/bolt-python/concepts/message-listening @app.event("team_join") def onboarding_message(event, client): """Create and send an onboarding welcome message to new users. Save the diff --git a/tutorial/PythOnBoardingBot/app.py b/tutorial/PythOnBoardingBot/app.py index b24852a80..7245c71ab 100644 --- a/tutorial/PythOnBoardingBot/app.py +++ b/tutorial/PythOnBoardingBot/app.py @@ -38,7 +38,7 @@ def start_onboarding(user_id: str, channel: str, client: WebClient): # Note: Bolt provides a WebClient instance as an argument to the listener function # we've defined here, which we then use to access Slack Web API methods like conversations_open. -# For more info, checkout: https://slack.dev/bolt-python/concepts#message-listening +# For more info, checkout: https://docs.slack.dev/tools/bolt-python/concepts/message-listening @app.event("team_join") def onboarding_message(event, client): """Create and send an onboarding welcome message to new users. Save the diff --git a/tutorial/README.md b/tutorial/README.md index 0fe94c109..12d99c89c 100644 --- a/tutorial/README.md +++ b/tutorial/README.md @@ -21,14 +21,14 @@ As you complete each task you'll see the message update with a green checkmark. 1. A Slack team. Before anything else you'll need a Slack team. You can [Sign into an existing Slack workspace](https://get.slack.help/hc/en-us/articles/212681477-Sign-in-to-Slack) or you can [create a new Slack workspace](https://get.slack.help/hc/en-us/articles/206845317-Create-a-Slack-workspace) to test your app first. -2. A terminal with Python 3.6+ installed. +2. A terminal with Python 3.7+ installed. Check your installation by running the following command in your terminal: ``` $ python3 --version --> Python 3.6.7 +-> Python 3.7.17 ``` -You'll need to install Python 3.6 if you receive the following error: +You'll need to install Python 3.7 if you receive the following error: ``` -> bash: python3: command not found ``` @@ -54,7 +54,6 @@ Open up your new project folder "PythOnBoardingBot" in your text editor. ## Coming up next - Add tests to your app. - Add starring a message as an onboarding task. -- Run this app on [Glitch](https://glitch.com/). - Creating a Slack "MessageBuilder" object. This would aid in the creation of complex messages. - Running this app from the command line with [`$ click_`](https://click.palletsprojects.com/en/7.x/). - How to run this app on multiple teams.