From 6c24b6a13e06e51dfc37e7859795e82735182438 Mon Sep 17 00:00:00 2001 From: EvieePy Date: Fri, 26 Jan 2024 08:38:23 +1000 Subject: [PATCH 001/796] Remove old codebase. --- .github/workflows/build.yml | 80 - .github/workflows/edit_version.py | 16 - .github/workflows/get_revision.py | 14 - .github/workflows/issues.yml | 15 - .github/workflows/publish.yml | 42 - docs/Makefile | 20 - docs/_static/js/custom.js | 12 - docs/_static/logo_dark.png | Bin 4308 -> 0 bytes docs/_static/logo_light.png | Bin 4109 -> 0 bytes docs/_static/styles/furo.css | 2270 -------------------- docs/changelog.rst | 434 ---- docs/conf.py | 121 -- docs/extensions/attributetable.py | 266 --- docs/exts/commands.rst | 652 ------ docs/exts/eventsub.rst | 497 ----- docs/exts/pubsub.rst | 310 --- docs/exts/routines.rst | 117 - docs/exts/sounds.rst | 183 -- docs/faq.rst | 20 - docs/images/commands_arguments_1.png | Bin 82741 -> 0 bytes docs/images/commands_arguments_2.png | Bin 40681 -> 0 bytes docs/images/commands_arguments_3.png | Bin 119032 -> 0 bytes docs/images/commands_arguments_4.png | Bin 68432 -> 0 bytes docs/images/commands_arguments_5.png | Bin 153976 -> 0 bytes docs/images/commands_basic_1.png | Bin 31229 -> 0 bytes docs/images/commands_basic_2.png | Bin 88965 -> 0 bytes docs/images/commands_errors_1.png | Bin 55362 -> 0 bytes docs/images/commands_errors_2.png | Bin 113468 -> 0 bytes docs/images/commands_errors_3.png | Bin 35718 -> 0 bytes docs/images/commands_parsing_1.png | Bin 22050 -> 0 bytes docs/images/commands_parsing_2.png | Bin 28831 -> 0 bytes docs/images/commands_parsing_3.png | Bin 24292 -> 0 bytes docs/images/commands_parsing_4.png | Bin 24253 -> 0 bytes docs/index.rst | 122 -- docs/installing.rst | 79 - docs/make.bat | 35 - docs/pa.txt | 1 - docs/quickstart.rst | 126 -- docs/reference.rst | 477 ---- docs/sidebar_logo.png | Bin 18877 -> 0 bytes docs/twitchio.rst | 50 - examples/basic_bot.py | 44 - examples/basic_routine.py | 9 - examples/eventsub.py | 34 - setup.py | 96 - twitchio/abcs.py | 122 -- twitchio/backoff.py | 86 - twitchio/cache.py | 102 - twitchio/channel.py | 173 -- twitchio/chatter.py | 259 --- twitchio/client.py | 1128 ---------- twitchio/cooldowns.py | 106 - twitchio/enums.py | 51 - twitchio/errors.py | 81 - twitchio/ext/commands/__init__.py | 29 - twitchio/ext/commands/bot.py | 614 ------ twitchio/ext/commands/builtin_converter.py | 114 - twitchio/ext/commands/cooldowns.py | 179 -- twitchio/ext/commands/core.py | 695 ------ twitchio/ext/commands/errors.py | 97 - twitchio/ext/commands/meta.py | 216 -- twitchio/ext/commands/stringparser.py | 78 - twitchio/ext/commands/utils.py | 48 - twitchio/ext/eventsub/__init__.py | 27 - twitchio/ext/eventsub/http.py | 80 - twitchio/ext/eventsub/models.py | 1736 --------------- twitchio/ext/eventsub/server.py | 445 ---- twitchio/ext/eventsub/websocket.py | 502 ----- twitchio/ext/pubsub/__init__.py | 28 - twitchio/ext/pubsub/models.py | 504 ----- twitchio/ext/pubsub/pool.py | 185 -- twitchio/ext/pubsub/topics.py | 114 - twitchio/ext/pubsub/websocket.py | 221 -- twitchio/ext/routines/__init__.py | 480 ----- twitchio/ext/sounds/__init__.py | 439 ---- twitchio/http.py | 1246 ----------- twitchio/message.py | 153 -- twitchio/models.py | 2078 ------------------ twitchio/parse.py | 156 -- twitchio/rewards.py | 395 ---- twitchio/user.py | 1968 ----------------- twitchio/utils.py | 31 - twitchio/websocket.py | 613 ------ 83 files changed, 21721 deletions(-) delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/edit_version.py delete mode 100644 .github/workflows/get_revision.py delete mode 100644 .github/workflows/issues.yml delete mode 100644 .github/workflows/publish.yml delete mode 100644 docs/Makefile delete mode 100644 docs/_static/js/custom.js delete mode 100644 docs/_static/logo_dark.png delete mode 100644 docs/_static/logo_light.png delete mode 100644 docs/_static/styles/furo.css delete mode 100644 docs/changelog.rst delete mode 100644 docs/conf.py delete mode 100644 docs/extensions/attributetable.py delete mode 100644 docs/exts/commands.rst delete mode 100644 docs/exts/eventsub.rst delete mode 100644 docs/exts/pubsub.rst delete mode 100644 docs/exts/routines.rst delete mode 100644 docs/exts/sounds.rst delete mode 100644 docs/faq.rst delete mode 100644 docs/images/commands_arguments_1.png delete mode 100644 docs/images/commands_arguments_2.png delete mode 100644 docs/images/commands_arguments_3.png delete mode 100644 docs/images/commands_arguments_4.png delete mode 100644 docs/images/commands_arguments_5.png delete mode 100644 docs/images/commands_basic_1.png delete mode 100644 docs/images/commands_basic_2.png delete mode 100644 docs/images/commands_errors_1.png delete mode 100644 docs/images/commands_errors_2.png delete mode 100644 docs/images/commands_errors_3.png delete mode 100644 docs/images/commands_parsing_1.png delete mode 100644 docs/images/commands_parsing_2.png delete mode 100644 docs/images/commands_parsing_3.png delete mode 100644 docs/images/commands_parsing_4.png delete mode 100644 docs/index.rst delete mode 100644 docs/installing.rst delete mode 100644 docs/make.bat delete mode 100644 docs/pa.txt delete mode 100644 docs/quickstart.rst delete mode 100644 docs/reference.rst delete mode 100644 docs/sidebar_logo.png delete mode 100644 docs/twitchio.rst delete mode 100644 examples/basic_bot.py delete mode 100644 examples/basic_routine.py delete mode 100644 examples/eventsub.py delete mode 100644 setup.py delete mode 100644 twitchio/abcs.py delete mode 100644 twitchio/backoff.py delete mode 100644 twitchio/cache.py delete mode 100644 twitchio/channel.py delete mode 100644 twitchio/chatter.py delete mode 100644 twitchio/client.py delete mode 100644 twitchio/cooldowns.py delete mode 100644 twitchio/enums.py delete mode 100644 twitchio/errors.py delete mode 100644 twitchio/ext/commands/__init__.py delete mode 100644 twitchio/ext/commands/bot.py delete mode 100644 twitchio/ext/commands/builtin_converter.py delete mode 100644 twitchio/ext/commands/cooldowns.py delete mode 100644 twitchio/ext/commands/core.py delete mode 100644 twitchio/ext/commands/errors.py delete mode 100644 twitchio/ext/commands/meta.py delete mode 100644 twitchio/ext/commands/stringparser.py delete mode 100644 twitchio/ext/commands/utils.py delete mode 100644 twitchio/ext/eventsub/__init__.py delete mode 100644 twitchio/ext/eventsub/http.py delete mode 100644 twitchio/ext/eventsub/models.py delete mode 100644 twitchio/ext/eventsub/server.py delete mode 100644 twitchio/ext/eventsub/websocket.py delete mode 100644 twitchio/ext/pubsub/__init__.py delete mode 100644 twitchio/ext/pubsub/models.py delete mode 100644 twitchio/ext/pubsub/pool.py delete mode 100644 twitchio/ext/pubsub/topics.py delete mode 100644 twitchio/ext/pubsub/websocket.py delete mode 100644 twitchio/ext/routines/__init__.py delete mode 100644 twitchio/ext/sounds/__init__.py delete mode 100644 twitchio/http.py delete mode 100644 twitchio/message.py delete mode 100644 twitchio/models.py delete mode 100644 twitchio/parse.py delete mode 100644 twitchio/rewards.py delete mode 100644 twitchio/user.py delete mode 100644 twitchio/utils.py delete mode 100644 twitchio/websocket.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index a46a9a42..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: Build - -on: - push: - pull_request: - types: [opened, edited, synchronize] - -jobs: - lib: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - python-version: ["3.7", "3.10", "3.11"] - - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Install CPython - uses: actions/setup-python@v2 - with: - python-version: ${{matrix.python-version}} - - - name: Install Deps - run: | - python -m ensurepip - pip install wheel setuptools - pip install -r requirements.txt - - - name: Build - run: python setup.py sdist bdist_wheel - - docs: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Install CPython - uses: actions/setup-python@v2 - with: - python-version: 3.7 - - - name: Install Deps - run: | - sudo apt update - sudo apt install -y libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 - python -m ensurepip - pip install -r docs/requirements.txt - pip install -r requirements.txt - - - name: Build Docs - run: | - cd docs - make html - - lint: - runs-on: ubuntu-latest - steps: - - name: checkout - uses: actions/checkout@v2 - - - name: Setup Python - uses: actions/setup-python@v2 - with: - python-version: 3.7 - - - name: install black - run: | - python -m ensurepip - pip install black - - - name: run linter - run: | - black twitchio --line-length 120 --verbose --check \ No newline at end of file diff --git a/.github/workflows/edit_version.py b/.github/workflows/edit_version.py deleted file mode 100644 index 47baf3d8..00000000 --- a/.github/workflows/edit_version.py +++ /dev/null @@ -1,16 +0,0 @@ -import argparse -import re - - -parser = argparse.ArgumentParser() -parser.add_argument("--latest") -args = parser.parse_args() - - -with open("../../twitchio/__init__.py", "r+") as fp: - data = fp.read() - - data = re.sub(r"__version__ = \"\d+.\d+.\d+\"", f'__version__ = "{args.latest.removeprefix("v")}"', data) - - fp.seek(0) - fp.write(data) diff --git a/.github/workflows/get_revision.py b/.github/workflows/get_revision.py deleted file mode 100644 index 60e3021f..00000000 --- a/.github/workflows/get_revision.py +++ /dev/null @@ -1,14 +0,0 @@ -import requests - - -def getrev(): - resp = requests.get("https://pypi.org/pypi/TwitchIO/json") - data = resp.json()["releases"] - - pre = max(data).split("b") - final = f"{pre[0]}b{int(pre[1]) + 1}" - - return final - - -print(getrev()) diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml deleted file mode 100644 index a3ab6304..00000000 --- a/.github/workflows/issues.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: issue-welcome - -on: - issues: - types: [opened] - -jobs: - comment: - runs-on: ubuntu-latest - - steps: - - uses: ben-z/actions-comment-on-issue@1.0.2 - with: - message: "Hello! Thanks for the issue. If this is a general help question, for a faster response consider joining the official [Discord Server](https://discord.gg/RAKc3HF)\n\nElse if you have an issue with the library please wait for someone to help you here." - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 1fd3ee59..00000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Publish to PyPI - -on: - release: - types: [published] - -jobs: - deploy: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v1 - - - name: Get Latest Release - id: latest_version - uses: abatilo/release-info-action@v1.3.0 - with: - owner: PythonistaGuild - repo: TwitchIO - - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: '3.11' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install setuptools wheel twine - - - name: Edit init version - working-directory: .github/workflows/ - run: | - python edit_version.py --latest ${{ steps.latest_version.outputs.latest_tag }} - - - name: Build and publish - env: - TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} - TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - python setup.py sdist bdist_wheel - twine upload dist/* diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index d4bb2cbb..00000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_static/js/custom.js b/docs/_static/js/custom.js deleted file mode 100644 index 435fe66c..00000000 --- a/docs/_static/js/custom.js +++ /dev/null @@ -1,12 +0,0 @@ -const classes = document.getElementsByClassName("class"); -const tables = document.getElementsByClassName('py-attribute-table'); - -for (let i = 0; i < classes.length; i++) { - const parentSig = classes[i].getElementsByTagName('dt')[0]; - const table = tables[i]; - - parentSig.classList.add(`parent-sig-${i}`); - table.id = `attributable-${i}` - - $(`#attributable-${i}`).insertAfter( `.parent-sig-${i}` ); -} \ No newline at end of file diff --git a/docs/_static/logo_dark.png b/docs/_static/logo_dark.png deleted file mode 100644 index 1fcb025febfdba30d81b2fce64d945eeecd74e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4308 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 diff --git a/docs/_static/styles/furo.css b/docs/_static/styles/furo.css deleted file mode 100644 index 05190da0..00000000 --- a/docs/_static/styles/furo.css +++ /dev/null @@ -1,2270 +0,0 @@ -body { - font-size: .9em; - --font-stack: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji; - --font-stack--monospace: "SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace; - --font-size--normal: 100%; - --font-size--small: 87.5%; - --font-size--small--2: 81.25%; - --font-size--small--3: 75%; - --font-size--small--4: 62.5%; - --sidebar-caption-font-size: var(--font-size--small--2); - --sidebar-item-font-size: var(--font-size--small); - --sidebar-search-input-font-size: var(--font-size--small); - --toc-font-size: var(--font-size--small--3); - --toc-font-size--mobile: var(--font-size--normal); - --toc-title-font-size: var(--font-size--small--4); - --admonition-font-size: 0.8125rem; - --admonition-title-font-size: 0.8125rem; - --code-font-size: var(--font-size--small--2); - --api-font-size: var(--font-size--small); - --header-height: calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4); - --header-padding: 0.5rem; - --sidebar-tree-space-above: 1.5rem; - --sidebar-caption-space-above: 1rem; - --sidebar-item-line-height: 1rem; - --sidebar-item-spacing-vertical: 0.5rem; - --sidebar-item-spacing-horizontal: 1rem; - --sidebar-item-height: calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2); - --sidebar-expander-width: var(--sidebar-item-height); - --sidebar-search-space-above: 0.5rem; - --sidebar-search-input-spacing-vertical: 0.5rem; - --sidebar-search-input-spacing-horizontal: 0.5rem; - --sidebar-search-input-height: 1rem; - --sidebar-search-icon-size: var(--sidebar-search-input-height); - --toc-title-padding: 0.25rem 0; - --toc-spacing-vertical: 1.5rem; - --toc-spacing-horizontal: 1.5rem; - --toc-item-spacing-vertical: 0.4rem; - --toc-item-spacing-horizontal: 1rem; - --icon-search: url('data:image/svg+xml;charset=utf-8,'); - --icon-pencil: url('data:image/svg+xml;charset=utf-8,'); - --icon-abstract: url('data:image/svg+xml;charset=utf-8,'); - --icon-info: url('data:image/svg+xml;charset=utf-8,'); - --icon-flame: url('data:image/svg+xml;charset=utf-8,'); - --icon-question: url('data:image/svg+xml;charset=utf-8,'); - --icon-warning: url('data:image/svg+xml;charset=utf-8,'); - --icon-failure: url('data:image/svg+xml;charset=utf-8,'); - --icon-spark: url('data:image/svg+xml;charset=utf-8,'); - --color-admonition-title--caution: #ff9100; - --color-admonition-title-background--caution: rgba(255,145,0,.1); - --color-admonition-title--warning: #ff9100; - --color-admonition-title-background--warning: rgba(255,145,0,.1); - --color-admonition-title--danger: #ff5252; - --color-admonition-title-background--danger: rgba(255,82,82,.1); - --color-admonition-title--attention: #ff5252; - --color-admonition-title-background--attention: rgba(255,82,82,.1); - --color-admonition-title--error: #ff5252; - --color-admonition-title-background--error: rgba(255,82,82,.1); - --color-admonition-title--hint: #00c852; - --color-admonition-title-background--hint: rgba(0,200,82,.1); - --color-admonition-title--tip: #00c852; - --color-admonition-title-background--tip: rgba(0,200,82,.1); - --color-admonition-title--important: #00bfa5; - --color-admonition-title-background--important: rgba(0,191,165,.1); - --color-admonition-title--note: #00b0ff; - --color-admonition-title-background--note: rgba(0,176,255,.1); - --color-admonition-title--seealso: #448aff; - --color-admonition-title-background--seealso: rgba(68,138,255,.1); - --color-admonition-title--admonition-todo: grey; - --color-admonition-title-background--admonition-todo: hsla(0,0%,50%,.1); - --color-admonition-title: #651fff; - --color-admonition-title-background: rgba(101,31,255,.1); - --icon-admonition-default: var(--icon-abstract); - --color-topic-title: #14b8a6; - --color-topic-title-background: rgba(20,184,166,.1); - --icon-topic-default: var(--icon-pencil); - --color-problematic: #b30000; - --color-foreground-primary: #000; - --color-foreground-secondary: #5a5c63; - --color-foreground-muted: #646776; - --color-foreground-border: #878787; - --color-background-primary: #fff; - --color-background-secondary: #f8f9fb; - --color-background-hover: #efeff4; - --color-background-hover--transparent: #efeff400; - --color-background-border: #eeebee; - --color-announcement-background: #000000dd; - --color-announcement-text: #eeebee; - --color-brand-primary: #2962ff; - --color-brand-content: #2a5adf; - --color-api-background: var(--color-background-secondary); - --color-api-background-hover: var(--color-background-hover); - --color-api-overall: var(--color-foreground-secondary); - --color-api-name: var(--color-problematic); - --color-api-pre-name: var(--color-problematic); - --color-api-paren: var(--color-foreground-secondary); - --color-api-keyword: var(--color-foreground-primary); - --color-highlight-on-target: #ffc; - --color-inline-code-background: var(--color-background-secondary); - --color-highlighted-background: #def; - --color-highlighted-text: var(--color-foreground-primary); - --color-guilabel-background: #ddeeff80; - --color-guilabel-border: #bedaf580; - --color-guilabel-text: var(--color-foreground-primary); - --color-admonition-background: transparent; - --color-table-header-background: var(--color-background-secondary); - --color-table-border: var(--color-background-border); - --color-card-border: var(--color-background-secondary); - --color-card-background: transparent; - --color-card-marginals-background: var(--color-background-secondary); - --color-header-background: var(--color-background-primary); - --color-header-border: var(--color-background-border); - --color-header-text: var(--color-foreground-primary); - --color-sidebar-background: var(--color-background-secondary); - --color-sidebar-background-border: var(--color-background-border); - --color-sidebar-brand-text: var(--color-foreground-primary); - --color-sidebar-caption-text: var(--color-foreground-muted); - --color-sidebar-link-text: var(--color-foreground-secondary); - --color-sidebar-link-text--top-level: var(--color-brand-primary); - --color-sidebar-item-background: var(--color-sidebar-background); - --color-sidebar-item-background--current: var( --color-sidebar-item-background ); - --color-sidebar-item-background--hover: linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%); - --color-sidebar-item-expander-background: transparent; - --color-sidebar-item-expander-background--hover: var( --color-background-hover ); - --color-sidebar-search-text: var(--color-foreground-primary); - --color-sidebar-search-background: var(--color-background-secondary); - --color-sidebar-search-background--focus: var(--color-background-primary); - --color-sidebar-search-border: var(--color-background-border); - --color-sidebar-search-icon: var(--color-foreground-muted); - --color-toc-background: var(--color-background-primary); - --color-toc-title-text: var(--color-foreground-muted); - --color-toc-item-text: var(--color-foreground-secondary); - --color-toc-item-text--hover: var(--color-foreground-primary); - --color-toc-item-text--active: var(--color-brand-primary); - --color-content-foreground: var(--color-foreground-primary); - --color-content-background: transparent; - --color-link: var(--color-brand-content); - --color-link--hover: var(--color-brand-content); - --color-link-underline: var(--color-background-border); - --color-link-underline--hover: var(--color-foreground-border) -} - -.highlight { - background-color: #F6F6F6; -} - -.class > .sig-object { - border-left: #0e84b5 solid 3px; - border-radius: 3px 0 0 0; -} - -/* Attributable stuff */ -.py-attribute-table { - display: flex; - flex-wrap: wrap; - background-color: var(--color-api-background); - border-radius: 0 0 3px 3px; - border-left: #0e84b5 solid 3px; - margin-bottom: 2rem; -} - -.py-attribute-table-entry { - list-style: None; -} - -.py-attribute-table-column { - flex: .5; -} - -.py-attribute-table-column > span { - font-weight: bold; - margin-left: 1rem; -} - -.py-attribute-table-badge { - font-weight: bold; - margin-right: .5rem; -} - -/* Sidebar Stuff */ -.sidebar-drawer { - width: 0!important; - background: var(--color-sidebar-background); - border-right: 1px solid var(--color-sidebar-background-border); - box-sizing: border-box; - display: flex; - justify-content: flex-end; - min-width: 15em; -} - -/* Main Div */ -main { - display: block -} - -.main { - display: flex; - flex: 1; - justify-content: space-evenly!important; -} - -/* Content Div */ -.content { - width: 50%!important; - display: flex; - flex-direction: column; - justify-content: space-between; - padding: 0 3em; -} - -/* Index Page Stuff */ -.featuring-logo { - width: 50%; - align-self: flex-start; - margin-top: 4rem; -} - -.featuring-hr { - margin-top: 2rem; - opacity: 40%; -} - -.index-featuring { - margin-top: 2rem!important; -} - -.index-featuring-list { - list-style: none; - margin-top: 1rem; -} - -.index-featuring-list > li::before { - content: '- '; - font-weight: bold; -} - -.index-featuring-list > li::before { - content: '- '; - font-weight: bold; -} - -.index-section-header { - margin-top: 2rem; -} - -.index-apis-wrapper { - display: flex; - flex-direction: row; -} - -.index-apis-section { - margin-top: 2rem; - margin-right: 4rem; -} - -.index-display-none { - display: none; -} - -.index-changelog > .caption[role=heading] { - display: none; -} - -.index-changelog > ul > li::marker { - content: '- '; - font-weight: bold; -} - -html { - -webkit-text-size-adjust: 100%; - line-height: 1.15 -} - -body { - margin: 0 -} - -h1 { - font-size: 2em; - margin: .67em 0 -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible -} - -pre { - font-family: monospace,monospace; - font-size: 1em -} - -a { - background-color: transparent -} - -abbr[title] { - border-bottom: none; - text-decoration: underline; - text-decoration: underline dotted -} - -b,strong { - font-weight: bolder -} - -code,kbd,samp { - font-family: monospace,monospace; - font-size: 1em -} - -sub,sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline -} - -sub { - bottom: -.25em -} - -sup { - top: -.5em -} - -img { - border-style: none -} - -button,input,optgroup,select,textarea { - font-family: inherit; - font-size: 100%; - line-height: 1.15; - margin: 0 -} - -button,input { - overflow: visible -} - -button,select { - text-transform: none -} - -[type=button],[type=reset],[type=submit],button { - -webkit-appearance: button -} - -[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner { - border-style: none; - padding: 0 -} - -[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring { - outline: 1px dotted ButtonText -} - -fieldset { - padding: .35em .75em .625em -} - -legend { - box-sizing: border-box; - color: inherit; - display: table; - max-width: 100%; - padding: 0; - white-space: normal -} - -progress { - vertical-align: baseline -} - -textarea { - overflow: auto -} - -[type=checkbox],[type=radio] { - box-sizing: border-box; - padding: 0 -} - -[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button { - height: auto -} - -[type=search] { - -webkit-appearance: textfield; - outline-offset: -2px -} - -[type=search]::-webkit-search-decoration { - -webkit-appearance: none -} - -::-webkit-file-upload-button { - -webkit-appearance: button; - font: inherit -} - -details { - display: block -} - -summary { - display: list-item -} - -[hidden],template { - display: none -} - -@media print { - .content-icon-container,.headerlink,.mobile-header,.related-pages { - display: none!important - } - - .highlight { - border: .1pt solid var(--color-foreground-border) - } -} - -.visually-hidden { - clip: rect(0,0,0,0)!important; - border: 0!important; - height: 1px!important; - margin: -1px!important; - overflow: hidden!important; - padding: 0!important; - position: absolute!important; - white-space: nowrap!important; - width: 1px!important -} - -:-moz-focusring { - outline: auto -} - -.only-light { - display: block!important -} - -html body .only-dark { - display: none!important -} - -@media not print { - body[data-theme=dark] { - --color-problematic: #ee5151; - --color-foreground-primary: #ffffffcc; - --color-foreground-secondary: #9ca0a5; - --color-foreground-muted: #81868d; - --color-foreground-border: #666; - --color-background-primary: #131416; - --color-background-secondary: #1a1c1e; - --color-background-hover: #1e2124; - --color-background-hover--transparent: #1e212400; - --color-background-border: #303335; - --color-announcement-background: #000000dd; - --color-announcement-text: #eeebee; - --color-brand-primary: #2b8cee; - --color-brand-content: #368ce2; - --color-highlighted-background: #083563; - --color-guilabel-background: #08356380; - --color-guilabel-border: #13395f80; - --color-api-keyword: var(--color-foreground-secondary); - --color-highlight-on-target: #330; - --color-admonition-background: #18181a; - --color-card-border: var(--color-background-secondary); - --color-card-background: #18181a; - --color-card-marginals-background: var(--color-background-hover) - } - - html body[data-theme=dark] .only-light { - display: none!important - } - - body[data-theme=dark] .only-dark { - display: block!important - } - - @media(prefers-color-scheme: dark) { - body:not([data-theme=light]) { - --color-problematic:#ee5151; - --color-foreground-primary: #ffffffcc; - --color-foreground-secondary: #9ca0a5; - --color-foreground-muted: #81868d; - --color-foreground-border: #666; - --color-background-primary: #131416; - --color-background-secondary: #1a1c1e; - --color-background-hover: #1e2124; - --color-background-hover--transparent: #1e212400; - --color-background-border: #303335; - --color-announcement-background: #000000dd; - --color-announcement-text: #eeebee; - --color-brand-primary: #2b8cee; - --color-brand-content: #368ce2; - --color-highlighted-background: #083563; - --color-guilabel-background: #08356380; - --color-guilabel-border: #13395f80; - --color-api-keyword: var(--color-foreground-secondary); - --color-highlight-on-target: #330; - --color-admonition-background: #18181a; - --color-card-border: var(--color-background-secondary); - --color-card-background: #18181a; - --color-card-marginals-background: var(--color-background-hover) - } - - html body:not([data-theme=light]) .only-light { - display: none!important - } - - body:not([data-theme=light]) .only-dark { - display: block!important - } - } -} - -body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light { - display: block -} - -body { - font-family: var(--font-stack) -} - -code,kbd,pre,samp { - font-family: var(--font-stack--monospace) -} - -body { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -article { - line-height: 1.5 -} - -h1,h2,h3,h4,h5,h6 { - border-radius: .5rem; - font-weight: 700; - line-height: 1.25; - margin: .5rem -.5rem; - padding-left: .5rem; - padding-right: .5rem -} - -h1+p,h2+p,h3+p,h4+p,h5+p,h6+p { - margin-top: 0 -} - -h1 { - font-size: 2.5em; - margin-bottom: 1rem -} - -h1,h2 { - margin-top: 1.75rem -} - -h2 { - font-size: 2em -} - -h3 { - font-size: 1.5em -} - -h4 { - font-size: 1.25em -} - -h5 { - font-size: 1.125em -} - -h6 { - font-size: 1em -} - -small { - font-size: 80%; - opacity: 75% -} - -p { - margin-bottom: .75rem; - margin-top: .5rem -} - -hr.docutils { - background-color: var(--color-background-border); - border: 0; - height: 1px; - margin: 2rem 0; - padding: 0 -} - -.centered { - text-align: center -} - -a { - color: var(--color-link); - text-decoration: underline; - -webkit-text-decoration-color: var(--color-link-underline); - text-decoration-color: var(--color-link-underline) -} - -a:hover { - color: var(--color-link--hover); - -webkit-text-decoration-color: var(--color-link-underline--hover); - text-decoration-color: var(--color-link-underline--hover) -} - -a.muted-link { - color: inherit -} - -a.muted-link:hover { - color: var(--color-link); - -webkit-text-decoration-color: var(--color-link-underline--hover); - text-decoration-color: var(--color-link-underline--hover) -} - -html { - overflow-x: hidden; - overflow-y: scroll; - scroll-behavior: smooth -} - -.sidebar-scroll,.toc-scroll,article[role=main] * { - scrollbar-color: var(--color-foreground-border) transparent; - scrollbar-width: thin -} - -.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar { - height: .25rem; - width: .25rem -} - -.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb { - background-color: var(--color-foreground-border); - border-radius: .125rem -} - -body,html { - background: var(--color-background-primary); - color: var(--color-foreground-primary); - height: 100% -} - -article { - background: var(--color-content-background); - color: var(--color-content-foreground) -} - -.page { - display: flex; - min-height: 100% -} - -.mobile-header { - background-color: var(--color-header-background); - border-bottom: 1px solid var(--color-header-border); - color: var(--color-header-text); - display: none; - height: var(--header-height); - width: 100%; - z-index: 10 -} - -.mobile-header.scrolled { - border-bottom: none; - box-shadow: 0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2) -} - -.mobile-header .header-center a { - color: var(--color-header-text); - text-decoration: none -} - -.main { - display: flex; - flex: 1; - justify-content: space-evenly; -} - -.sidebar-container,.toc-drawer { - box-sizing: border-box; - width: 15em -} - -.toc-drawer { - background: var(--color-toc-background); - padding-right: 1rem -} - -.sidebar-sticky,.toc-sticky { - display: flex; - flex-direction: column; - height: min(100%,100vh); - height: 100vh; - position: -webkit-sticky; - position: sticky; - top: 0 -} - -.sidebar-scroll,.toc-scroll { - flex-grow: 1; - flex-shrink: 1; - overflow: auto; - scroll-behavior: smooth -} - -.icon { - display: inline-block; - height: 1rem; - width: 1rem -} - -.icon svg { - height: 100%; - width: 100% -} - -.announcement { - align-items: center; - background-color: var(--color-announcement-background); - color: var(--color-announcement-text); - display: flex; - height: var(--header-height); - overflow-x: auto -} - -.announcement+.page { - min-height: calc(100% - var(--header-height)) -} - -.announcement-content { - box-sizing: border-box; - min-width: 100%; - padding: .5rem; - text-align: center; - white-space: nowrap -} - -.announcement-content a { - color: var(--color-announcement-text); - -webkit-text-decoration-color: var(--color-announcement-text); - text-decoration-color: var(--color-announcement-text) -} - -.announcement-content a:hover { - color: var(--color-announcement-text); - -webkit-text-decoration-color: var(--color-link--hover); - text-decoration-color: var(--color-link--hover) -} - -.no-js .theme-toggle-container { - display: none -} - -.theme-toggle-container { - vertical-align: middle -} - -.theme-toggle { - background: 0 0; - border: none; - cursor: pointer; - padding: 0 -} - -.theme-toggle svg { - color: var(--color-foreground-primary); - display: none; - height: 1rem; - vertical-align: middle; - width: 1rem -} - -.theme-toggle-header { - float: left; - padding: 1rem .5rem -} - -.nav-overlay-icon,.toc-overlay-icon { - cursor: pointer; - display: none -} - -.nav-overlay-icon .icon,.toc-overlay-icon .icon { - color: var(--color-foreground-secondary); - height: 1rem; - width: 1rem -} - -.nav-overlay-icon,.toc-header-icon { - align-items: center; - justify-content: center -} - -.toc-content-icon { - height: 1.5rem; - width: 1.5rem -} - -.content-icon-container { - display: flex; - float: right; - gap: .5rem; - margin-bottom: 1rem; - margin-left: 1rem; - margin-top: 1.5rem -} - -.content-icon-container .edit-this-page svg { - color: inherit; - height: 1rem; - width: 1rem -} - -.sidebar-toggle { - display: none; - position: absolute -} - -.sidebar-toggle[name=__toc] { - left: 20px -} - -.sidebar-toggle:checked { - left: 40px -} - -.overlay { - background-color: rgba(0,0,0,.54); - height: 0; - opacity: 0; - position: fixed; - top: 0; - transition: width 0ms,height 0ms,opacity .25s ease-out; - width: 0 -} - -.sidebar-overlay { - z-index: 20 -} - -.toc-overlay { - z-index: 40 -} - -.sidebar-drawer { - transition: left .25s ease-in-out; - z-index: 30 -} - -.toc-drawer { - transition: right .25s ease-in-out; - z-index: 50 -} - -#__navigation:checked~.sidebar-overlay { - height: 100%; - opacity: 1; - width: 100% -} - -#__navigation:checked~.page .sidebar-drawer { - left: 0; - top: 0 -} - -#__toc:checked~.toc-overlay { - height: 100%; - opacity: 1; - width: 100% -} - -#__toc:checked~.page .toc-drawer { - right: 0; - top: 0 -} - -.back-to-top { - background: var(--color-background-primary); - border-radius: 1rem; - box-shadow: 0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 #6b728080; - display: none; - font-size: .8125rem; - left: 0; - margin-left: 50%; - padding: .5rem .75rem .5rem .5rem; - position: fixed; - text-decoration: none; - top: calc(var(--header-height) + .5rem); - transform: translateX(-50%); - z-index: 1 -} - -.back-to-top svg { - fill: var(--color-foreground-primary); - display: inline-block; - height: 1rem; - width: 1rem -} - -.back-to-top span { - margin-left: .25rem -} - -.show-back-to-top .back-to-top { - align-items: center; - display: flex -} - -@media(min-width: 97em) { - html { - font-size:110% - } -} - -@media(max-width: 82em) { - .toc-content-icon { - display:flex - } - - .toc-drawer { - border-left: 1px solid var(--color-background-muted); - height: 100vh; - position: fixed; - right: -15em; - top: 0 - } - - .toc-tree { - border-left: none; - font-size: var(--toc-font-size--mobile) - } - - .sidebar-drawer { - width: calc(50% - 18.5em) - } -} - -@media(max-width: 67em) { - .nav-overlay-icon { - display:flex - } - - .sidebar-drawer { - height: 100vh; - left: -15em; - position: fixed; - top: 0; - width: 15em - } - - .toc-header-icon { - display: flex - } - - .theme-toggle-content,.toc-content-icon { - display: none - } - - .theme-toggle-header { - display: block - } - - .mobile-header { - align-items: center; - display: flex; - justify-content: space-between; - position: -webkit-sticky; - position: sticky; - top: 0 - } - - .mobile-header .header-left,.mobile-header .header-right { - display: flex; - height: var(--header-height); - padding: 0 var(--header-padding) - } - - .mobile-header .header-left label,.mobile-header .header-right label { - height: 100%; - width: 100% - } - - :target { - scroll-margin-top: var(--header-height) - } - - .page { - flex-direction: column; - justify-content: center - } - - .content { - margin-left: auto; - margin-right: auto - } -} - -@media(max-width: 52em) { - .content { - overflow-x:auto; - width: 100%!important; - } -} - -@media(max-width: 46em) { - .content { - padding:0 1em - } - - article div.sidebar { - float: none; - margin: 1rem 0; - width: 100% - } -} - -.admonition,.topic { - background: var(--color-admonition-background); - border-radius: .2rem; - box-shadow: 0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1); - font-size: var(--admonition-font-size); - margin: 1rem auto; - overflow: hidden; - padding: 0 .5rem .5rem; - page-break-inside: avoid -} - -.admonition>:nth-child(2),.topic>:nth-child(2) { - margin-top: 0 -} - -.admonition>:last-child,.topic>:last-child { - margin-bottom: 0 -} - -p.admonition-title,p.topic-title { - font-size: var(--admonition-title-font-size); - font-weight: 500; - line-height: 1.3; - margin: 0 -.5rem .5rem; - padding: .4rem .5rem .4rem 2rem; - position: relative -} - -p.admonition-title:before,p.topic-title:before { - content: ""; - height: 1rem; - left: .5rem; - position: absolute; - width: 1rem -} - -p.admonition-title { - background-color: var(--color-admonition-title-background) -} - -p.admonition-title:before { - background-color: var(--color-admonition-title); - -webkit-mask-image: var(--icon-admonition-default); - mask-image: var(--icon-admonition-default); - -webkit-mask-repeat: no-repeat; - mask-repeat: no-repeat -} - -p.topic-title { - background-color: var(--color-topic-title-background) -} - -p.topic-title:before { - background-color: var(--color-topic-title); - -webkit-mask-image: var(--icon-topic-default); - mask-image: var(--icon-topic-default); - -webkit-mask-repeat: no-repeat; - mask-repeat: no-repeat -} - -.admonition { - border-left: .2rem solid var(--color-admonition-title) -} - -.admonition.caution { - border-left-color: var(--color-admonition-title--caution) -} - -.admonition.caution>.admonition-title { - background-color: var(--color-admonition-title-background--caution) -} - -.admonition.caution>.admonition-title:before { - background-color: var(--color-admonition-title--caution); - -webkit-mask-image: var(--icon-spark); - mask-image: var(--icon-spark) -} - -.admonition.warning { - border-left-color: var(--color-admonition-title--warning) -} - -.admonition.warning>.admonition-title { - background-color: var(--color-admonition-title-background--warning) -} - -.admonition.warning>.admonition-title:before { - background-color: var(--color-admonition-title--warning); - -webkit-mask-image: var(--icon-warning); - mask-image: var(--icon-warning) -} - -.admonition.danger { - border-left-color: var(--color-admonition-title--danger) -} - -.admonition.danger>.admonition-title { - background-color: var(--color-admonition-title-background--danger) -} - -.admonition.danger>.admonition-title:before { - background-color: var(--color-admonition-title--danger); - -webkit-mask-image: var(--icon-spark); - mask-image: var(--icon-spark) -} - -.admonition.attention { - border-left-color: var(--color-admonition-title--attention) -} - -.admonition.attention>.admonition-title { - background-color: var(--color-admonition-title-background--attention) -} - -.admonition.attention>.admonition-title:before { - background-color: var(--color-admonition-title--attention); - -webkit-mask-image: var(--icon-warning); - mask-image: var(--icon-warning) -} - -.admonition.error { - border-left-color: var(--color-admonition-title--error) -} - -.admonition.error>.admonition-title { - background-color: var(--color-admonition-title-background--error) -} - -.admonition.error>.admonition-title:before { - background-color: var(--color-admonition-title--error); - -webkit-mask-image: var(--icon-failure); - mask-image: var(--icon-failure) -} - -.admonition.hint { - border-left-color: var(--color-admonition-title--hint) -} - -.admonition.hint>.admonition-title { - background-color: var(--color-admonition-title-background--hint) -} - -.admonition.hint>.admonition-title:before { - background-color: var(--color-admonition-title--hint); - -webkit-mask-image: var(--icon-question); - mask-image: var(--icon-question) -} - -.admonition.tip { - border-left-color: var(--color-admonition-title--tip) -} - -.admonition.tip>.admonition-title { - background-color: var(--color-admonition-title-background--tip) -} - -.admonition.tip>.admonition-title:before { - background-color: var(--color-admonition-title--tip); - -webkit-mask-image: var(--icon-info); - mask-image: var(--icon-info) -} - -.admonition.important { - border-left-color: var(--color-admonition-title--important) -} - -.admonition.important>.admonition-title { - background-color: var(--color-admonition-title-background--important) -} - -.admonition.important>.admonition-title:before { - background-color: var(--color-admonition-title--important); - -webkit-mask-image: var(--icon-flame); - mask-image: var(--icon-flame) -} - -.admonition.note { - border-left-color: var(--color-admonition-title--note) -} - -.admonition.note>.admonition-title { - background-color: var(--color-admonition-title-background--note) -} - -.admonition.note>.admonition-title:before { - background-color: var(--color-admonition-title--note); - -webkit-mask-image: var(--icon-pencil); - mask-image: var(--icon-pencil) -} - -.admonition.seealso { - border-left-color: var(--color-admonition-title--seealso) -} - -.admonition.seealso>.admonition-title { - background-color: var(--color-admonition-title-background--seealso) -} - -.admonition.seealso>.admonition-title:before { - background-color: var(--color-admonition-title--seealso); - -webkit-mask-image: var(--icon-info); - mask-image: var(--icon-info) -} - -.admonition.admonition-todo { - border-left-color: var(--color-admonition-title--admonition-todo) -} - -.admonition.admonition-todo>.admonition-title { - background-color: var(--color-admonition-title-background--admonition-todo) -} - -.admonition.admonition-todo>.admonition-title:before { - background-color: var(--color-admonition-title--admonition-todo); - -webkit-mask-image: var(--icon-pencil); - mask-image: var(--icon-pencil) -} - -.admonition-todo>.admonition-title { - text-transform: uppercase -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd { - margin-left: 2rem -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child { - margin-top: .125rem -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child { - margin-bottom: .75rem -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt { - font-size: var(--font-size--small); - text-transform: uppercase -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty { - margin-bottom: .5rem -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul { - margin-left: -1.2rem -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2) { - margin-top: 0 -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty { - margin-bottom: 0; - margin-top: 0 -} - -dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt { - color: var(--color-api-overall) -} - -.sig { - background: var(--color-api-background); - border-radius: .25rem; - font-family: var(--font-stack--monospace); - font-size: var(--api-font-size); - font-weight: 700; - padding: .25rem .5rem .25rem 3em; - text-indent: -2.5em -} - -.sig:hover { - background: var(--color-api-background-hover) -} - -.sig a.reference .viewcode-link { - font-weight: 400; - width: 3.5rem -} - -.sig span.pre { - overflow-wrap: anywhere -} - -em.property { - font-style: normal -} - -em.property:first-child { - color: var(--color-api-keyword) -} - -.sig-name { - color: var(--color-api-name) -} - -.sig-prename { - color: var(--color-api-pre-name); - font-weight: 400 -} - -.sig-paren { - color: var(--color-api-paren) -} - -.sig-param { - font-style: normal -} - -.versionmodified { - font-style: italic -} - -div.deprecated p,div.versionadded p,div.versionchanged p { - margin-bottom: .125rem; - margin-top: .125rem -} - -.viewcode-back,.viewcode-link { - float: right; - text-align: right -} - -.code-block-caption,article p.caption,table>caption { - font-size: var(--font-size--small); - text-align: center -} - -.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text { - font-size: var(--font-size--small); - margin-bottom: 0; - text-align: initial; - text-transform: uppercase -} - -.toctree-wrapper.compound>ul { - margin-bottom: 0; - margin-top: 0 -} - -code.literal { - background: var(--color-inline-code-background); - border-radius: .2em; - font-size: var(--font-size--small--2); - padding: .1em .2em -} - -p code.literal { - border: 1px solid var(--color-background-border) -} - -div[class*=" highlight-"],div[class^=highlight-] { - display: flex; - margin: 1em 0 -} - -div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre { - margin: 0; - padding: 0 -} - -article[role=main] .highlight pre { - line-height: 1.5 -} - -.highlight pre,pre.literal-block { - font-size: var(--code-font-size); - overflow: auto; - padding: .625rem .875rem -} - -pre.literal-block { - background-color: var(--color-code-background); - border-radius: .2rem; - color: var(--color-code-foreground); - margin-bottom: 1rem; - margin-top: 1rem -} - -.highlight { - border-radius: .2rem; - width: 100% -} - -.highlight .gp,.highlight span.linenos { - pointer-events: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none -} - -.highlight .hll { - display: block; - margin-left: -.875rem; - margin-right: -.875rem; - padding-left: .875rem; - padding-right: .875rem -} - -.code-block-caption { - background-color: var(--color-code-background); - border-bottom: 1px solid; - border-bottom-color: var(--color-background-border); - border-radius: .25rem; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - border-left-color: var(--color-background-border); - border-right-color: var(--color-background-border); - border-top-color: var(--color-background-border); - color: var(--color-code-foreground); - display: flex; - font-weight: 300; - padding: .625rem .875rem -} - -.code-block-caption+div[class] { - margin-top: 0 -} - -.code-block-caption+div[class] pre { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.highlighttable { - display: block; - width: 100% -} - -.highlighttable tbody { - display: block -} - -.highlighttable tr { - display: flex -} - -.highlighttable td.linenos { - background-color: var(--color-code-background); - border-bottom-left-radius: .2rem; - border-top-left-radius: .2rem; - color: var(--color-code-foreground); - padding: .625rem 0 .625rem .875rem -} - -.highlighttable .linenodiv { - box-shadow: -.0625rem 0 var(--color-foreground-border) inset; - font-size: var(--code-font-size); - padding-right: .875rem -} - -.highlighttable td.code { - display: block; - flex: 1; - overflow: hidden; - padding: 0 -} - -.highlighttable td.code .highlight { - border-bottom-left-radius: 0; - border-top-left-radius: 0 -} - -.highlight span.linenos { - box-shadow: -.0625rem 0 var(--color-foreground-border) inset; - display: inline-block; - margin-right: .875rem; - padding-left: 0; - padding-right: .875rem -} - -.footnote-reference { - font-size: var(--font-size--small--4); - vertical-align: super -} - -dl.footnote.brackets { - color: var(--color-foreground-secondary); - display: grid; - font-size: var(--font-size--small); - grid-template-columns: -webkit-max-content auto; - grid-template-columns: max-content auto -} - -dl.footnote.brackets dt { - margin: 0 -} - -dl.footnote.brackets dt>.fn-backref { - margin-left: .25rem -} - -dl.footnote.brackets dt:after { - content: ":" -} - -dl.footnote.brackets dt .brackets:before { - content: "[" -} - -dl.footnote.brackets dt .brackets:after { - content: "]" -} - -dl.footnote.brackets dd { - margin: 0; - padding: 0 1rem -} - -img { - box-sizing: border-box; - height: auto; - max-width: 100% -} - -article .figure,article figure { - border-radius: .2rem; - margin: 0 -} - -article .figure :last-child,article figure :last-child { - margin-bottom: 0 -} - -article .align-left { - clear: left; - float: left; - margin: 0 1rem 1rem -} - -article .align-right { - clear: right; - float: right; - margin: 0 1rem 1rem -} - -article .align-center,article .align-default { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center -} - -article table.align-default { - display: table; - text-align: initial -} - -.domainindex-jumpbox,.genindex-jumpbox { - border-bottom: 1px solid var(--color-background-border); - border-top: 1px solid var(--color-background-border); - padding: .25rem -} - -.domainindex-section h2,.genindex-section h2 { - margin-bottom: .5rem; - margin-top: .75rem -} - -.domainindex-section ul,.genindex-section ul { - margin-bottom: 0; - margin-top: 0 -} - -ol,ul { - margin-bottom: 1rem; - margin-top: 1rem; - padding-left: 1.2rem -} - -ol li>p:first-child,ul li>p:first-child { - margin-bottom: .25rem; - margin-top: .25rem -} - -ol li>p:last-child,ul li>p:last-child { - margin-top: .25rem -} - -ol li>ol,ol li>ul,ul li>ol,ul li>ul { - margin-bottom: .5rem; - margin-top: .5rem -} - -.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul { - margin-bottom: 0; - margin-top: 0 -} - -.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt { - font-weight: 500; - margin-top: .25rem -} - -.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt { - margin-top: 0 -} - -.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before { - content: ":"; - margin-left: .2rem; - margin-right: .2rem -} - -.field-list dd>p:first-child,.field-list dd ul,.option-list dd>p:first-child,.option-list dd ul,dl.footnote dd>p:first-child,dl.footnote dd ul,dl.glossary dd>p:first-child,dl.glossary dd ul,dl.simple dd>p:first-child,dl.simple dd ul,dl:not([class]) dd>p:first-child,dl:not([class]) dd ul { - margin-top: .125rem -} - -.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul { - margin-bottom: .125rem -} - -.math-wrapper { - overflow-x: auto; - width: 100% -} - -div.math { - position: relative; - text-align: center -} - -div.math .headerlink,div.math:focus .headerlink { - display: none -} - -div.math:hover .headerlink { - display: inline-block -} - -div.math span.eqno { - position: absolute; - right: .5rem; - top: 50%; - transform: translateY(-50%); - z-index: 1 -} - -abbr[title] { - cursor: help -} - -.problematic { - color: var(--color-problematic) -} - -kbd:not(.compound) { - background-color: var(--color-background-secondary); - border: 1px solid var(--color-foreground-border); - border-radius: .2rem; - box-shadow: 0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary); - color: var(--color-foreground-primary); - display: inline-block; - font-size: var(--font-size--small--3); - margin: 0 .2rem; - padding: 0 .2rem; - vertical-align: text-bottom -} - -blockquote { - background: var(--color-background-secondary); - border-left: 4px solid var(--color-background-border); - margin-left: 0; - margin-right: 0; - padding: .5rem 1rem -} - -blockquote .attribution { - font-weight: 600; - text-align: right -} - -blockquote.highlights,blockquote.pull-quote { - font-size: 1.25em -} - -blockquote.epigraph,blockquote.pull-quote { - border-left-width: 0; - border-radius: .5rem -} - -blockquote.highlights { - background: 0 0; - border-left-width: 0 -} - -p .reference img { - vertical-align: middle -} - -p.rubric { - font-size: 1.125em; - font-weight: 700; - line-height: 1.25 -} - -article .sidebar { - background-color: var(--color-background-secondary); - border: 1px solid var(--color-background-border); - border-radius: .2rem; - clear: right; - float: right; - margin-left: 1rem; - margin-right: 0; - width: 30% -} - -article .sidebar>* { - padding-left: 1rem; - padding-right: 1rem -} - -article .sidebar>ol,article .sidebar>ul { - padding-left: 2.2rem -} - -article .sidebar .sidebar-title { - border-bottom: 1px solid var(--color-background-border); - font-weight: 500; - margin: 0; - padding: .5rem 1rem -} - -.table-wrapper { - margin-bottom: .5rem; - margin-top: 1rem; - overflow-x: auto; - padding: .2rem .2rem .75rem; - width: 100% -} - -table.docutils { - border-collapse: collapse; - border-radius: .2rem; - border-spacing: 0; - box-shadow: 0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1) -} - -table.docutils th { - background: var(--color-table-header-background) -} - -table.docutils td,table.docutils th { - border-bottom: 1px solid var(--color-table-border); - border-left: 1px solid var(--color-table-border); - border-right: 1px solid var(--color-table-border); - padding: 0 .25rem -} - -table.docutils td p,table.docutils th p { - margin: .25rem -} - -table.docutils td:first-child,table.docutils th:first-child { - border-left: none -} - -table.docutils td:last-child,table.docutils th:last-child { - border-right: none -} - -:target { - scroll-margin-top: .5rem -} - -@media(max-width: 67em) { - :target { - scroll-margin-top:calc(.5rem + var(--header-height)) - } - - section>span:target { - scroll-margin-top: calc(.8rem + var(--header-height)) - } -} - -.headerlink { - font-weight: 100; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none -} - -.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink { - margin-left: .5rem; - visibility: hidden -} - -.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink { - visibility: visible -} - -.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref { - color: inherit; - -webkit-text-decoration-line: none; - text-decoration-line: none -} - -figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink { - visibility: visible -} - -:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type { - background-color: var(--color-highlight-on-target) -} - -:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal { - background-color: transparent -} - -.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption { - background-color: var(--color-highlight-on-target) -} - -dt:target { - background-color: var(--color-highlight-on-target)!important -} - -.footnote-reference:target,.footnote>dt:target+dd { - background-color: var(--color-highlight-on-target) -} - -.guilabel { - background-color: var(--color-guilabel-background); - border: 1px solid var(--color-guilabel-border); - border-radius: .5em; - color: var(--color-guilabel-text); - font-size: .9em; - padding: 0 .3em -} - -footer { - display: flex; - flex-direction: column; - font-size: var(--font-size--small); - margin-top: 2rem -} - -.bottom-of-page { - align-items: center; - border-top: 1px solid var(--color-background-border); - color: var(--color-foreground-secondary); - display: flex; - justify-content: space-between; - line-height: 1.5; - margin-top: 1rem; - padding-bottom: 1rem; - padding-top: 1rem -} - -@media(max-width: 46em) { - .bottom-of-page { - flex-direction:column-reverse; - gap: .25rem; - text-align: center - } -} - -.bottom-of-page .left-details { - font-size: var(--font-size--small) -} - -.bottom-of-page .right-details { - display: flex; - flex-direction: column; - gap: .25rem; - text-align: right -} - -.bottom-of-page .icons { - display: flex; - font-size: 1rem; - gap: .25rem; - justify-content: flex-end -} - -.bottom-of-page .icons a { - text-decoration: none -} - -.bottom-of-page .icons img,.bottom-of-page .icons svg { - font-size: 1.125rem; - height: 1em; - width: 1em -} - -.related-pages a { - align-items: center; - display: flex; - text-decoration: none -} - -.related-pages a:hover .page-info .title { - color: var(--color-link); - text-decoration: underline; - -webkit-text-decoration-color: var(--color-link-underline); - text-decoration-color: var(--color-link-underline) -} - -.related-pages a svg,.related-pages a svg>use { - color: var(--color-foreground-border); - flex-shrink: 0; - height: .75rem; - margin: 0 .5rem; - width: .75rem -} - -.related-pages a.next-page { - clear: right; - float: right; - max-width: 50%; - text-align: right -} - -.related-pages a.prev-page { - clear: left; - float: left; - max-width: 50% -} - -.related-pages a.prev-page svg { - transform: rotate(180deg) -} - -.page-info { - display: flex; - flex-direction: column; - overflow-wrap: anywhere -} - -.next-page .page-info { - align-items: flex-end -} - -.page-info .context { - align-items: center; - color: var(--color-foreground-muted); - display: flex; - font-size: var(--font-size--small); - padding-bottom: .1rem; - text-decoration: none -} - -ul.search { - list-style: none; - padding-left: 0 -} - -ul.search li { - border-bottom: 1px solid var(--color-background-border); - padding: 1rem 0 -} - -[role=main] .highlighted { - background-color: var(--color-highlighted-background); - color: var(--color-highlighted-text) -} - -.sidebar-brand { - display: flex; - flex-direction: column; - flex-shrink: 0; - padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal); - text-decoration: none -} - -.sidebar-brand-text { - color: var(--color-sidebar-brand-text); - font-size: 1.5rem; - overflow-wrap: break-word -} - -.sidebar-brand-text,.sidebar-logo-container { - margin: var(--sidebar-item-spacing-vertical) 0 -} - -.sidebar-logo { - display: block; - margin: 0 auto; - max-width: 100% -} - -.sidebar-search-container { - align-items: center; - background: var(--color-sidebar-search-background); - display: flex; - margin-top: var(--sidebar-search-space-above); - position: relative -} - -.sidebar-search-container:focus-within,.sidebar-search-container:hover { - background: var(--color-sidebar-search-background--focus) -} - -.sidebar-search-container:before { - background-color: var(--color-sidebar-search-icon); - content: ""; - height: var(--sidebar-search-icon-size); - left: var(--sidebar-item-spacing-horizontal); - -webkit-mask-image: var(--icon-search); - mask-image: var(--icon-search); - position: absolute; - width: var(--sidebar-search-icon-size) -} - -.sidebar-search { - background: 0 0; - border: none; - border-bottom: 1px solid var(--color-sidebar-search-border); - border-top: 1px solid var(--color-sidebar-search-border); - box-sizing: border-box; - color: var(--color-sidebar-search-foreground); - padding: var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size)); - width: 100%; - z-index: 10 -} - -.sidebar-search:focus { - outline: none -} - -.sidebar-search::-moz-placeholder { - font-size: var(--sidebar-search-input-font-size) -} - -.sidebar-search:-ms-input-placeholder { - font-size: var(--sidebar-search-input-font-size) -} - -.sidebar-search::placeholder { - font-size: var(--sidebar-search-input-font-size) -} - -#searchbox .highlight-link { - margin: 0; - padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0; - text-align: center -} - -#searchbox .highlight-link a { - color: var(--color-sidebar-search-icon); - font-size: var(--font-size--small--2) -} - -.sidebar-tree { - font-size: var(--sidebar-item-font-size); - margin-bottom: var(--sidebar-item-spacing-vertical); - margin-top: var(--sidebar-tree-space-above) -} - -.sidebar-tree ul { - display: flex; - flex-direction: column; - list-style: none; - margin-bottom: 0; - margin-top: 0; - padding: 0 -} - -.sidebar-tree li { - margin: 0; - position: relative -} - -.sidebar-tree li>ul { - margin-left: var(--sidebar-item-spacing-horizontal) -} - -.sidebar-tree .icon,.sidebar-tree .reference { - color: var(--color-sidebar-link-text) -} - -.sidebar-tree .reference { - box-sizing: border-box; - display: inline-block; - height: 100%; - line-height: var(--sidebar-item-line-height); - overflow-wrap: anywhere; - padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal); - text-decoration: none; - width: 100% -} - -.sidebar-tree .reference:hover { - background: var(--color-sidebar-item-background--hover) -} - -.sidebar-tree .reference.external:after { - color: var(--color-sidebar-link-text); - content: url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyB3aWR0aD0nMTInIGhlaWdodD0nMTInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDI0IDI0JyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlPScjNjA3RDhCJyBmaWxsPSdub25lJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnPjxwYXRoIGQ9J00wIDBoMjR2MjRIMHonIHN0cm9rZT0nbm9uZScvPjxwYXRoIGQ9J00xMSA3SDZhMiAyIDAgMCAwLTIgMnY5YTIgMiAwIDAgMCAyIDJoOWEyIDIgMCAwIDAgMi0ydi01TTEwIDE0IDIwIDRNMTUgNGg1djUnLz48L3N2Zz4=); - margin: 0 .25rem; - vertical-align: middle -} - -.sidebar-tree .current-page>.reference { - font-weight: 700 -} - -.sidebar-tree label { - align-items: center; - cursor: pointer; - display: flex; - height: var(--sidebar-item-height); - justify-content: center; - position: absolute; - right: 0; - top: 0; - width: var(--sidebar-expander-width) -} - -.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text { - color: var(--color-sidebar-caption-text); - font-size: var(--sidebar-caption-font-size); - font-weight: 700; - margin: var(--sidebar-caption-space-above) 0 0; - padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal); - text-transform: uppercase -} - -.sidebar-tree li.has-children>.reference { - padding-right: var(--sidebar-expander-width) -} - -.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon { - color: var(--color-sidebar-link-text--top-level) -} - -.sidebar-tree label { - background: var(--color-sidebar-item-expander-background) -} - -.sidebar-tree label:hover { - background: var(--color-sidebar-item-expander-background--hover) -} - -.sidebar-tree .current>.reference { - background: var(--color-sidebar-item-background--current) -} - -.sidebar-tree .current>.reference:hover { - background: var(--color-sidebar-item-background--hover) -} - -.toctree-checkbox { - display: none; - position: absolute -} - -.toctree-checkbox~ul { - display: none -} - -.toctree-checkbox~label .icon svg { - transform: rotate(90deg) -} - -.toctree-checkbox:checked~ul { - display: block -} - -.toctree-checkbox:checked~label .icon svg { - transform: rotate(-90deg) -} - -.toc-title-container { - padding: var(--toc-title-padding); - padding-top: var(--toc-spacing-vertical) -} - -.toc-title { - color: var(--color-toc-title-text); - font-size: var(--toc-title-font-size); - padding-left: var(--toc-spacing-horizontal); - text-transform: uppercase -} - -.no-toc { - display: none -} - -.toc-tree-container { - padding-bottom: var(--toc-spacing-vertical) -} - -.toc-tree { - border-left: 1px solid var(--color-background-border); - font-size: var(--toc-font-size); - line-height: 1.3; - padding-left: calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal)) -} - -.toc-tree>ul>li:first-child { - padding-top: 0 -} - -.toc-tree>ul>li:first-child>ul { - padding-left: 0 -} - -.toc-tree>ul>li:first-child>a { - display: none -} - -.toc-tree ul { - list-style-type: none; - margin-bottom: 0; - margin-top: 0; - padding-left: var(--toc-item-spacing-horizontal) -} - -.toc-tree li { - padding-top: var(--toc-item-spacing-vertical) -} - -.toc-tree li.scroll-current>.reference { - color: var(--color-toc-item-text--active); - font-weight: 700 -} - -.toc-tree .reference { - color: var(--color-toc-item-text); - overflow-wrap: anywhere; - text-decoration: none -} - -.toc-scroll { - max-height: 100vh; - overflow-y: scroll -} - -.text-align\:left>p { - text-align: left -} - -.text-align\:center>p { - text-align: center -} - -.text-align\:right>p { - text-align: right -} diff --git a/docs/changelog.rst b/docs/changelog.rst deleted file mode 100644 index d7cdcd2d..00000000 --- a/docs/changelog.rst +++ /dev/null @@ -1,434 +0,0 @@ -:orphan: - -2.8.2 -====== -- ext.commands - - Bug fixes - - Fixed an issue where built-in converters would raise an internal ``TypeError``. - -2.8.1 -====== -- ext.commands - - Bug fixes - - Fixed an issue where ``CommandNotFound`` couldn't be processed from ``get_context``. - -2.8.0 -====== -- TwitchIO - - Additions - - Added the new follower / followed endpoints for :class:`~twitchio.PartialUser`: - - :func:`~twitchio.PartialUser.fetch_channel_followers` - - :func:`~twitchio.PartialUser.fetch_channel_following` - - :func:`~twitchio.PartialUser.fetch_channel_follower_count` - - :func:`~twitchio.PartialUser.fetch_channel_following_count` - - The deprecated methods have had warnings added in the docs. - - New models for the new methods have been added: - - :class:`~twitchio.ChannelFollowerEvent` - - :class:`~twitchio.ChannelFollowingEvent` - - New optional ``is_featured`` query parameter for :func:`~twitchio.PartialUser.fetch_clips` - - New attribute :attr:`~twitchio.Clip.is_featured` for :class:`~twitchio.Clip` - - - Bug fixes - - Fix IndexError when getting prefix when empty message is sent in a reply. - -- ext.eventsub - - Bug fixes - - Fix websocket reconnection event. - - Fix another websocket reconnect issue where it tried to decode nonexistent headers. - -- ext.commands - - Additions - - Added support for the following typing constructs in command signatures: - - ``Union[A, B]`` / ``A | B`` - - ``Optional[T]`` / ``T | None`` - - ``Annotated[T, converter]`` (accessible through the ``typing_extensions`` module on older python versions) - -- Docs - - Added walkthrough for ext.commands - -2.7.0 -====== -- TwitchIO - - Additions - - Added :func:`~twitchio.PartialUser.fetch_charity_campaigns` with :class:`~twitchio.CharityCampaign` and :class:`~twitchio.CharityValues`. - - Added :func:`~twitchio.Client.fetch_global_chat_badges` - - Added User method :func:`~twitchio.PartialUser.fetch_chat_badges` - - Added repr for :class:`~twitchio.SearchUser` - - Added two new events - - Added :func:`~twitchio.Client.event_notice` - - Added :func:`~twitchio.Client.event_raw_notice` - - - Added :class:`~twitchio.message.HypeChatData` for hype chat events - - Added :attr:`~twitchio.message.Message.hype_chat_data` for hype chat events - - Added :func:`~twitchio.Client.fetch_content_classification_labels` along with :class:`~twitchio.ContentClassificationLabel` - - Added :attr:`~twitchio.ChannelInfo.content_classification_labels` and :attr:`~twitchio.ChannelInfo.is_branded_content` to :class:`~twitchio.ChannelInfo` - - Added new parameters to :func:`~twitchio.PartialUser.modify_stream` for ``is_branded_content`` and ``content_classification_labels`` - - - Bug fixes - - Fix :func:`~twitchio.Client.search_categories` due to :attr:`~twitchio.Game.igdb_id` being added to :class:`~twitchio.Game` - - Made Chatter :attr:`~twitchio.Chatter.id` property public - - :func:`~twitchio.Client.event_token_expired` will now be called correctly when response is ``401 Invalid OAuth token`` - - Fix reconnect loop when Twitch sends a RECONNECT via IRC websocket - - Fix :func:`~twitchio.CustomReward.edit` so it now can enable the reward - - - Other Changes - - Updated the HTTPException to provide useful information when an error is raised. - -- ext.eventsub - - Added websocket support via :class:`~twitchio.ext.eventsub.EventSubWSClient`. - - Added support for charity donation events. - -- Other - - [speed] extra - - Added wheels on external pypi index for cchardet and ciso8601 - - Bumped ciso8601 from >=2.2,<2.3 to >=2.2,<3 - - Bumped cchardet from >=2.1,<2.2 to >=2.1,<3 - -2.6.0 -====== -- TwitchIO - - Additions - - Added optional ``started_at`` and ``ended_at`` arguments to :func:`~twitchio.PartialUser.fetch_clips` - - Updated docstring regarding new HypeTrain contribution method ``OTHER`` for :attr:`~twitchio.HypeTrainContribution.type` - - Add support for ``ciso8601`` if installed - - Added ``speed`` install flag (``pip install twitchio[speed]``) to install all available speedups - - Added :attr:`~twitchio.Game.igdb_id` to :class:`~twitchio.Game` - - Added ``igdb_ids`` argument to :func:`~twitchio.Client.fetch_games` - - Added ``tags`` attribute to :class:`~twitchio.Stream`, :class:`~twitchio.ChannelInfo` and :class:`~twitchio.SearchUser` - - Added :func:`~twitchio.PartialUser.fetch_shield_mode_status` - - Added :func:`~twitchio.PartialUser.update_shield_mode_status` - - Added :func:`~twitchio.PartialUser.fetch_followed_streams` - - Added :func:`~twitchio.PartialUser.shoutout` - - Added ``type`` arg to :func:`~twitchio.Client.fetch_streams` - - - Bug fixes - - Fix :func:`~twitchio.PartialUser.fetch_bits_leaderboard` not handling ``started_at`` and :class:`~twitchio.BitsLeaderboard` not correctly parsing - - Fix parsing :class:`~twitchio.ScheduleSegment` where :attr:`~twitchio.ScheduleSegment.end_time` is None - - Fix auto reconnect of websocket. Created tasks by asyncio.create_task() need to be referred to prevent task disappearing (garbage collection) - - Strip newlines from message content when sending or replying to IRC websocket - - Removed unnessecary assert from :func:`~twitchio.Client.fetch_streams` - -- ext.eventsub - - Documentation - - Updated quickstart example to reflect proper usage of callback - - Additions - - Updated docs regarding new HypeTrain contribution method ``other`` for :attr:`~twitchio.ext.eventsub.HypeTrainContributor.type` - - Added Shield Status events - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_shield_mode_begin` - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_shield_mode_end` - - Added Shoutout events - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_shoutout_create` - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_shoutout_receive` - - Added :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_follows_v2` - - Added support for ``type`` and ``user_id`` queries on :func:`~twitchio.ext.eventsub.EventSubClient.get_subscriptions` - - - Deprecations - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_follows`, use :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_follows_v2` - - -- ext.pubsub - - Bug fixes - - Fix forced RECONNECT messages - - - Additions - - Added proper message when wrong type is passed to a topic argument - - Added auth failure hook: :func:`~twitchio.ext.pubsub.PubSubPool.auth_fail_hook` - - Added reconnect hook: :func:`~twitchio.ext.pubsub.PubSubPool.reconnect_hook` - -2.5.0 -====== -- TwitchIO - - Additions - - Added :attr:`~twitchio.Message.first` to :class:`~twitchio.Message` - - Added :func:`~twitchio.PartialUser.fetch_channel_emotes` to :class:`~twitchio.PartialUser` - - Added :func:`~twitchio.Client.fetch_global_emotes` to :class:`~twitchio.Client` - - Added :func:`~twitchio.Client.event_channel_join_failure` event: - - This is dispatched when the bot fails to join a channel - - This also makes the channel join error message in logs optional - - Bug fixes - - Fix AuthenticationError not being properly propagated when a bad token is given - - Fix channel join failures causing `ValueError: list.remove(x): x not in list` when joining channels after the initial start - - Added :attr:`~twitchio.Chatter.is_vip` property to Chatter - - New PartialUser methods - - :func:`~twitchio.PartialUser.fetch_follower_count` to fetch total follower count of a User - - :func:`~twitchio.PartialUser.fetch_following_count` to fetch total following count of a User - - - Fix whispers that were not able to be parsed - - Fix USERSTATE parsing incorrect user - - Fix errors when event loop is started using `run_until_complete` to call methods prior to :func:`~twitchio.Client.run` - - Improved handling of USERNOTICE messages and the tags created for :func:`~twitchio.Client.event_raw_usernotice` - -- ext.routines - - Additions - - Added the :func:`~twitchio.ext.routines.Routine.change_interval` method. - -- ext.commands - - Bug fixes - - Make sure double-quotes are properly tokenized for bot commands - -- ext.sound - - Bug fixes - - Make system calls to ffmpeg are more robust (works on windows and linux) - -- ext.eventsub - - Additions - - Goal subscriptions have been Added - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_goal_begin` - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_goal_progress` - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_goal_end` - - :func:`~twitchio.ext.eventsub.event_eventsub_notification_channel_goal_begin` - - :func:`~twitchio.ext.eventsub.event_eventsub_notification_channel_goal_progress` - - :func:`~twitchio.ext.eventsub.event_eventsub_notification_channel_goal_end` - - - Channel subscription end - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_subscription_end` - - User authorization grant - - :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_user_authorization_granted` - - - HypeTrainBeginProgressData now has the :attr:`~twitchio.ext.eventsub.HypeTrainBeginProgressData.level` - - - - Bug fixes - - Correct typo in :class:`~twitchio.ext.eventsub.HypeTrainBeginProgressData` attribute :attr:`~twitchio.ext.eventsub.HypeTrainBeginProgressData.expires` - - Correct typo "revokation" to "revocation" in server _message_types. - -- ext.pubsub - - Additions - - Websocket automatically handles "RECONNECT" requests by Twitch - - Bug fixes - - "type" of :class:`~twitchio.ext.pubsub.PubSubModerationActionChannelTerms` now uses the correct type data - - Correct typo in :class:`~twitchio.ext.eventsub.HypeTrainBeginProgressData` attribute :attr:`~twitchio.ext.eventsub.HypeTrainBeginProgressData.expires` - - Unsubscribing from PubSub events works again - - Fix a forgotten nonce in :func:`~twitchio.ext.pubsub.websocket._send_topics` - - :class:`~twitchio.ext.pubsub.PubSubModerationActionChannelTerms` now uses the correct type data - -2.4.0 -====== -- TwitchIO - - Additions - - Added :func:`~twitchio.Client.event_reconnect` to :class:`~twitchio.Client` - - Add attribute docs to :class:`~twitchio.PartialUser` and :class:`~twitchio.User` - - Added following new :class:`~twitchio.PartialUser` methods: - - :func:`~twitchio.PartialUser.create_custom_reward` - - :func:`~twitchio.PartialUser.chat_announcement` - - :func:`~twitchio.PartialUser.delete_chat_messages` - - :func:`~twitchio.PartialUser.fetch_channel_vips` - - :func:`~twitchio.PartialUser.add_channel_vip` - - :func:`~twitchio.PartialUser.remove_channel_vip` - - :func:`~twitchio.PartialUser.add_channel_moderator` - - :func:`~twitchio.PartialUser.remove_channel_moderator` - - :func:`~twitchio.PartialUser.start_raid` - - :func:`~twitchio.PartialUser.cancel_raid` - - :func:`~twitchio.PartialUser.ban_user` - - :func:`~twitchio.PartialUser.timeout_user` - - :func:`~twitchio.PartialUser.unban_user` - - :func:`~twitchio.PartialUser.send_whisper` - - Added following new :class:`~twitchio.Client` methods: - - :func:`~twitchio.Client.fetch_chatters_colors` - - :func:`~twitchio.Client.update_chatter_color` - - :func:`~twitchio.Client.fetch_channels` - - Add ``duration`` and ``vod_offset`` attributes to :class:`~twitchio.Clip` - - Added repr for :class:`~twitchio.CustomReward` - - Added repr for :class:`~twitchio.PredictionOutcome` - - Add extra attributes to :class:`~twitchio.UserBan` - - Bug fixes - - Added ``self.registered_callbacks = {}`` to :func:`~twitchio.Client.from_client_credentials` - - Allow empty or missing initial_channels to trigger :func:`~twitchio.Client.event_ready` - - Corrected :func:`twitchio.CustomRewardRedemption.fulfill` endpoint typo and creation - - Corrected :func:`twitchio.CustomRewardRedemption.refund` endpoint typo and creation - - Changed :func:`~twitchio.Client.join_channels` logic to handle bigger channel lists better - - Corrected :class:`~twitchio.Predictor` slots and user keys, repr has also been added - - Updated IRC parser to not strip colons from beginning of messages - - Updated IRC parser to not remove multiple spaces when clumped together - - Fixed :func:`twitchio.Client.start` exiting immediately - - Chatters will now update correctly when someone leaves chat - - Fixed a crash when twitch sends a RECONNECT notice - -- ext.commands - - Bug fixes - - Add type conversion for variable positional arguments - - Fixed message content while handling commands in reply messages - -- ext.pubsub - - Bug fixes - - :class:`~twitchio.ext.pubsub.PubSubModerationAction` now handles missing keys - -- ext.eventsub - - Additions - - Added Gift Subcriptions subscriptions for gifting other users Subs: - - Subscribed via :func:`twitchio.ext.eventsub.EventSubClient.subscribe_channel_subscription_gifts` - - Callback function is :func:`twitchio.ext.eventsub.event_eventsub_notification_subscription_gift` - - Added Resubscription Message subscriptions for Resub messages: - - Subscribed via :func:`twitchio.ext.eventsub.EventSubClient.subscribe_channel_subscription_messages` - - Callback function is :func:`twitchio.ext.eventsub.event_eventsub_notification_subscription_message` - - Added :func:`twitchio.ext.eventsub.EventSubClient.delete_all_active_subscriptions` for convenience - - Created an Eventsub-specific :class:`~twitchio.ext.eventsub.CustomReward` model - -2.3.0 -===== -Massive documentation updates - -- TwitchIO - - Additions - - Added ``retain_cache`` kwarg to Client and Bot. Default is True. - - Poll endpoints added: - - :func:`twitchio.PartialUser.fetch_polls` - - :func:`twitchio.PartialUser.create_poll` - - :func:`twitchio.PartialUser.end_poll` - - Added :func:`twitchio.PartialUser.fetch_goals` method - - Added :func:`twitchio.PartialUser.fetch_chat_settings` and :func:`twitchio.PartialUser.update_chat_settings` methods - - Added :func:`twitchio.Client.part_channels` method - - Added :func:`~twitchio.Client.event_channel_joined` event. This is dispatched when the bot joins a channel - - Added first kwarg to :func:`twitchio.CustomReward.get_redemptions` - - - Bug fixes - - Removed unexpected loop termination from ``WSConnection._close()`` - - Fix bug where # prefixed channel names and capitals in initial_channels would not trigger :func:`~twitchio.Client.event_ready` - - Adjusted join channel rate limit handling - - :func:`twitchio.PartialUser.create_clip` has been fixed by converting bool to string in http request - - :attr:`~twitchio.Client.fetch_cheermotes` color attribute corrected - - :func:`twitchio.PartialUser.fetch_channel_teams` returns empty list if no teams found rather than unhandled error - - Fix :class:`twitchio.CustomRewardRedemption` so :func:`twitchio.CustomReward.get_redemptions` returns correctly - -- ext.commands - - :func:`twitchio.ext.commands.Bot.handle_commands` now also invokes on threads / replies - - Cooldowns are now handled correctly per bucket. - - Fix issue with :func:`twitchio.ext.commands.Bot.reload_module` where module is reloaded incorrectly if exception occurs - - Additions - - :func:`twitchio.ext.commands.Bot.handle_commands` now also invokes on threads / replies - - - Bug fixes - - Cooldowns are now handled correctly per bucket. - - Fix issue with :func:`twitchio.ext.Bot.reload_module` where module is reloaded incorrectly if exception occurs - -- ext.pubsub - - Channel subscription model fixes and additional type hints for Optional return values - - :class:`~twitchio.ext.pubsub.PubSubBitsMessage` model updated to return correct data and updated typing - - :class:`~twitchio.ext.pubsub.PubSubBitsBadgeMessage` model updated to return correct data and updated typing - - :class:`~twitchio.ext.pubsub.PubSubChatMessage` now correctly returns a string rather than int for the Bits Events - -2.2.0 -===== -- ext.sounds - - Added sounds extension. Check the :ref:`sounds-ref` documentation for more information. - -- TwitchIO - - Loosen aiohttp requirements to allow 3.8.1 - - :class:`~twitchio.Stream` was missing from ``__all__``. It is now available in the twitchio namespace. - - Added ``.status``, ``.reason`` and ``.extra`` to :class:`HTTPException` - - Fix ``Message._timestamp`` value when tag is not provided by twitch - - Fix :func:`~twitchio.Client.wait_for_ready` - - Remove loop= parameter inside :func:`~twitchio.Client.wait_for` for 3.10 compatibility - - Add :attr:`~twitchio.Chatter.is_broadcaster` check to :class:`~twitchio.PartialChatter`. This is accessible as ``Context.author.is_broadcaster`` - - :func:`~twitchio.PartialUser.fetch_follow` will now return ``None`` if the FollowEvent does not exists - - TwitchIO will now correctly handle error raised when only the prefix is typed in chat - - Fix paginate logic in :func:`TwitchHTTP.request` - -- ext.commands - - Fixed an issue (`GH#273 `_) where cog listeners were not ejected when unloading a module - -- ext.pubsub - - Add channel subscription pubsub model. - -- ext.eventsub - - Add support for the following subscription types - - :class:`twitchio.ext.eventsub.PollBeginProgressData` - - ``channel.poll.begin``: - - ``channel.poll.progress`` - - :class:`twitchio.ext.eventsub.PollEndData` - - ``channel.poll.end`` - - :class:`twitchio.ext.eventsub.PredictionBeginProgressData` - - ``channel.prediction.begin`` - - ``channel.prediction.progress`` - - :class:`twitchio.ext.eventsub.PredictionLockData` - - ``channel.prediction.lock`` - - :class:`twitchio.ext.eventsub.PredictionEndData` - - ``channel.prediction.end`` - -2.1.5 -===== -- TwitchIO - - Add ``user_id`` property to Client - - Change id_cache to only cache if a value is not ``None`` - - Add :func:`Client.wait_for_ready` - -2.1.4 -====== -- TwitchIO - - Chatter.is_mod now uses name instead of display_name - - Added ChannelInfo to slots - - Remove loop= parameter for asyncio.Event in websocket for 3.10 compatibility - -- ext.eventsub - - ChannelCheerData now returns user if is_anonymous is False else None - -2.1.3 -====== -- TwitchIO - - Fix bug where chatter never checked for founder in is_subscriber - - Fix rewards model so it can now handle pubsub and helix callbacks - -- ext.commands - - Fix TypeError in Bot.from_client_credentials - -2.1.2 -====== -New logo! - -- TwitchIO - - Add :func:`Chatter.mention` - - Re-add ``raw_usernotice`` from V1.x - - Fix echo messages for replies - - Fix a bug where the wrong user would be whispered - - Fix a bug inside :func:`User.modify_stream` where the game_id key would be specified as ``"None"`` if not provided (GH#237) - - Add support for teams and channelteams API routes - - :class:`Team`, :class:`ChannelTeams` - - :func:`Client.fetch_teams` - - :func:`PartialUser.fetch_channel_teams` - -- ext.commands - - Fix issue where Bot.from_client_credentials would result in an inoperable Bot instance (GH#239) - -- ext.pubsub - - Added :func:`ext.pubsub.Websocket.pubsub_error` to support being notified of pubsub errors - - Added :func:`ext.pubsub.Websocket.pubsub_nonce` to support being notified of pubsub nonces - -- ext.eventsub - - Patch 2.1.1 bug which breaks library on 3.7 for ext.eventsub - -2.1.1 -====== -- TwitchIO - - Patch a bug introduced in 2.1.0 that broke the library on python 3.7 - -2.1.0 -====== -- TwitchIO - - Type the :class:`User` class - - Update the library to use a proper ISO datetime parser - - Add event_raw_usernotice event (GH#229) - - :class:`User` fixed an issue where the User class couldn't fetch rewards (GH#214) - - :class:`Chatter` fixed the docstring for the `badges` property - - :func:`Chatter.is_subscriber` will now return True for founders - - :class:`Client` change docstring on `fetch_channel` - - Add support for the predictions API routes - - :class:`Prediction`, :class:`Predictor`, :class:`PredictionOutcome` - - :func:`PartialUser.end_prediction`, :func:`PartialUser.get_prediction`, :func:`PartialUser.create_prediction` - - Add support for the schedules API routes - - :class:`Schedule`, :class:`ScheduleSegment`, :class:`ScheduleCategory`, :class:`ScheduleVacation` - - :func:`PartialUser.fetch_schedule` - - Add :func:`PartialUser.modify_stream` - - Fix bug where chatter cache would not be created - - Fix bug where :func:`Client.wait_for` would cause internal asyncio.InvalidState errors - -- ext.commands - - General typing improvements - - :func:`ext.commands.builtin_converters.convert_Clip` - Raise error when the regex doesn't match to appease linters. This should never be raised. - - Added :func:`ext.commands.Context.reply` to support message replies - -- ext.pubsub - - Fixed bug with Pool.unsubscribe_topics caused by typo - -- ext.eventsub - - fix :class:`ext.eventsub.models.ChannelBanData`'s ``permanent`` attribute accessing nonexistent attrs from the event payload - - Add documentation diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 10f566cc..00000000 --- a/docs/conf.py +++ /dev/null @@ -1,121 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- Project information ----------------------------------------------------- -import re -import os -import sys - -sys.path.insert(0, os.path.abspath(".")) -sys.path.insert(0, os.path.abspath("..")) -sys.path.append(os.path.abspath("extensions")) - -on_rtd = os.environ.get("READTHEDOCS") == "True" -project = "TwitchIO" -copyright = "2023, TwitchIO" -author = "PythonistaGuild" - -# The full version, including alpha/beta/rc tags -release = '' -with open('../twitchio/__init__.py') as f: - release = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE).group(1) - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.extlinks", - "sphinxcontrib.asyncio", - "sphinx.ext.intersphinx", - "attributetable", - "sphinxext.opengraph", - "sphinx.ext.napoleon" -] - -# OpenGraph Meta Tags -ogp_image = "https://raw.githubusercontent.com/TwitchIO/TwitchIO/master/logo.png" -ogp_description = "Documentation for TwitchIO, the asynchronous Python wrapper for Twitch.tv." -ogp_site_url = "https://twitchio.dev/" -ogp_custom_meta_tags = [ - '', - '' -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "furo" -# html_logo = "logo.png" - -html_theme_options = { - "sidebar_hide_name": True, - "light_logo": "logo_light.png", - "dark_logo": "logo_dark.png", -} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.styles" will overwrite the builtin "default.styles". -# These folders are copied to the documentation's HTML output -html_static_path = ["_static"] - -# These paths are either relative to html_static_path -# or fully qualified paths (eg. https://...) -html_css_files = ["styles/furo.css"] -html_js_files = ["js/custom.js"] - - -napoleon_use_rtype = False -napoleon_google_docstring = False -napoleon_numpy_docstring = True -napoleon_include_private_with_doc = False -napoleon_include_special_with_doc = False -autodoc_member_order = "groupwise" - -rst_prolog = """ -.. |coro| replace:: This function is a |corourl|_. -.. |maybecoro| replace:: This function *could be a* |corourl|_. -.. |corourl| replace:: *coroutine* -.. _corourl: https://docs.python.org/3/library/asyncio-task.html#coroutine -.. |deco| replace:: This function is a **decorator**. -""" - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = ".rst" - -intersphinx_mapping = {"py": ("https://docs.python.org/3", None)} - -pygments_style = "sphinx" -pygments_dark_style = "monokai" diff --git a/docs/extensions/attributetable.py b/docs/extensions/attributetable.py deleted file mode 100644 index 6fa74110..00000000 --- a/docs/extensions/attributetable.py +++ /dev/null @@ -1,266 +0,0 @@ -from sphinx.util.docutils import SphinxDirective -from sphinx.locale import _ -from docutils import nodes -from sphinx import addnodes - -from collections import OrderedDict, namedtuple -import importlib -import inspect -import os -import re - - -class attributetable(nodes.General, nodes.Element): - pass - - -class attributetablecolumn(nodes.General, nodes.Element): - pass - - -class attributetabletitle(nodes.TextElement): - pass - - -class attributetableplaceholder(nodes.General, nodes.Element): - pass - - -class attributetablebadge(nodes.TextElement): - pass - - -class attributetable_item(nodes.Part, nodes.Element): - pass - - -def visit_attributetable_node(self, node): - self.body.append('
' % node["python-class"]) - - -def visit_attributetablecolumn_node(self, node): - self.body.append(self.starttag(node, "div", CLASS="py-attribute-table-column")) - - -def visit_attributetabletitle_node(self, node): - self.body.append(self.starttag(node, "span")) - - -def visit_attributetablebadge_node(self, node): - attributes = { - "class": "py-attribute-table-badge", - "title": node["badge-type"], - } - self.body.append(self.starttag(node, "span", **attributes)) - - -def visit_attributetable_item_node(self, node): - self.body.append(self.starttag(node, "li", CLASS="py-attribute-table-entry")) - - -def depart_attributetable_node(self, node): - self.body.append("
") - - -def depart_attributetablecolumn_node(self, node): - self.body.append("") - - -def depart_attributetabletitle_node(self, node): - self.body.append("") - - -def depart_attributetablebadge_node(self, node): - self.body.append("") - - -def depart_attributetable_item_node(self, node): - self.body.append("") - - -_name_parser_regex = re.compile(r"(?P[\w.]+\.)?(?P\w+)") - - -class PyAttributeTable(SphinxDirective): - has_content = False - required_arguments = 1 - optional_arguments = 0 - final_argument_whitespace = False - option_spec = {} - - def parse_name(self, content): - path, name = _name_parser_regex.match(content).groups() - if path: - modulename = path.rstrip(".") - else: - modulename = self.env.temp_data.get("autodoc:module") - if not modulename: - modulename = self.env.ref_context.get("py:module") - if modulename is None: - raise RuntimeError("modulename somehow None for %s in %s." % (content, self.env.docname)) - - return modulename, name - - def run(self): - """If you're curious on the HTML this is meant to generate: -
-
- _('Attributes') - -
- -
- However, since this requires the tree to be complete - and parsed, it'll need to be done at a different stage and then - replaced. - """ - content = self.arguments[0].strip() - node = attributetableplaceholder("") - modulename, name = self.parse_name(content) - node["python-module"] = modulename - node["python-class"] = name - node["python-full-name"] = "%s.%s" % (modulename, name) - return [node] - - -def build_lookup_table(env): - # Given an environment, load up a lookup table of - # full-class-name: objects - result = {} - domain = env.domains["py"] - - ignored = { - "data", - "exception", - "module", - "class", - } - - for (fullname, _, objtype, docname, _, _) in domain.get_objects(): - if objtype in ignored: - continue - - classname, _, child = fullname.rpartition(".") - try: - result[classname].append(child) - except KeyError: - result[classname] = [child] - - return result - - -TableElement = namedtuple("TableElement", "fullname label badge") - - -def process_attributetable(app, doctree, fromdocname): - env = app.builder.env - - lookup = build_lookup_table(env) - for node in doctree.traverse(attributetableplaceholder): - modulename, classname, fullname = node["python-module"], node["python-class"], node["python-full-name"] - groups = get_class_results(lookup, modulename, classname, fullname) - table = attributetable("") - for label, subitems in groups.items(): - if not subitems: - continue - table.append(class_results_to_node(label, sorted(subitems, key=lambda c: c.label))) - - table["python-class"] = fullname - - if not table: - node.replace_self([]) - else: - node.replace_self([table]) - - -def get_class_results(lookup, modulename, name, fullname): - module = importlib.import_module(modulename) - cls = getattr(module, name) - - groups = OrderedDict( - [ - (_("Attributes"), []), - (_("Methods"), []), - ] - ) - - try: - members = lookup[fullname] - except KeyError: - return groups - - for attr in members: - attrlookup = "%s.%s" % (fullname, attr) - key = _("Attributes") - badge = None - label = attr - - for base in cls.__mro__: - value = base.__dict__.get(attr) - if value is not None: - break - - if value is not None: - doc = value.__doc__ or "" - if inspect.iscoroutinefunction(value) or doc.startswith("|coro|"): - key = _("Methods") - badge = attributetablebadge("async", "async") - badge["badge-type"] = _("coroutine") - elif isinstance(value, classmethod): - key = _("Methods") - label = "%s.%s" % (name, attr) - badge = attributetablebadge("cls", "cls") - badge["badge-type"] = _("classmethod") - elif inspect.isfunction(value): - if doc.startswith(("A decorator", "A shortcut decorator")): - # finicky but surprisingly consistent - badge = attributetablebadge("@", "@") - badge["badge-type"] = _("decorator") - key = _("Methods") - else: - key = _("Methods") - badge = attributetablebadge("def", "def") - badge["badge-type"] = _("method") - - groups[key].append(TableElement(fullname=attrlookup, label=label, badge=badge)) - - return groups - - -def class_results_to_node(key, elements): - title = attributetabletitle(key, key) - ul = nodes.bullet_list("") - for element in elements: - ref = nodes.reference( - "", "", internal=True, refuri="#" + element.fullname, anchorname="", *[nodes.Text(element.label)] - ) - para = addnodes.compact_paragraph("", "", ref) - if element.badge is not None: - ul.append(attributetable_item("", element.badge, para)) - else: - ul.append(attributetable_item("", para)) - - return attributetablecolumn("", title, ul) - - -def setup(app): - app.add_directive("attributetable", PyAttributeTable) - app.add_node(attributetable, html=(visit_attributetable_node, depart_attributetable_node)) - app.add_node(attributetablecolumn, html=(visit_attributetablecolumn_node, depart_attributetablecolumn_node)) - app.add_node(attributetabletitle, html=(visit_attributetabletitle_node, depart_attributetabletitle_node)) - app.add_node(attributetablebadge, html=(visit_attributetablebadge_node, depart_attributetablebadge_node)) - app.add_node(attributetable_item, html=(visit_attributetable_item_node, depart_attributetable_item_node)) - app.add_node(attributetableplaceholder) - app.connect("doctree-resolved", process_attributetable) diff --git a/docs/exts/commands.rst b/docs/exts/commands.rst deleted file mode 100644 index 171be6af..00000000 --- a/docs/exts/commands.rst +++ /dev/null @@ -1,652 +0,0 @@ -.. currentmodule:: twitchio.ext.commands - -.. _commands-ref: - -Commands Ext -=========================== - - -Walkthrough ------------- - -The commands ext is meant purely for creating twitch chatbots. It gives you powerful tools, including dynamic loading/unloading/reloading -of modules, organization of code using Cogs, and of course, commands. - -The base of this ext revolves around the :class:`Bot`. :class:`Bot` is a subclass of :class:`~twitchio.Client`, which means it has all the functionality -of :class:`~twitchio.Client`, while also adding on the features needed for command handling. - -.. note:: - Because :class:`Bot` is a subclass of :class:`~twitchio.Client`, you do not need to use :class:`~twitchio.Client` at all. - All of the functionality you're looking for is contained within :class:`Bot`. - The only exception for this rule is when using the :ref:`Eventsub Ext `. - -To set up your bot for commands, the first thing we'll do is create a :class:`Bot`. - -.. code-block:: python - - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!") - - bot.run() - -:class:`Bot` has two required arguments, ``token`` and ``prefix``. ``token`` is the same as for :class:`~twitchio.Client`, -and ``prefix`` is a new argument, specific to commands. You can pass many different things as a prefix, for example: - -.. code-block:: python - - import twitchio - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!") - - bot = commands.Bot(token="...", prefix=("!", "?")) - - def prefix_callback(bot: commands.Bot, message: twitchio.Message) -> str: - if message.channel.name == "iamtomahawkx": - return "!" - elif message.channel.name == "chillymosh": - return "?" - else: - return ">>" - - bot = commands.Bot(token="...", prefix=prefix_callback) - - bot.run() - -All of those methods are valid prefixes, you can even pass an async function if needed. For this demo, we'll stick to using ``!``. -We'll also be passing 3 initial channels to our bot, so that we can send commands right away on them: - -.. code-block:: python - - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - bot.run() - -___ - -To create a command, we'll use the following code: - -.. code-block:: python - - async def cookie(ctx: commands.Context) -> None: - await ctx.send(f"{ctx.author.name} gets a cookie!") - -Every command takes a ``ctx`` argument, which gives you information on the command, who called it, from what channel, etc. -You can read more about the ctx argument :ref:`Here `. - -Once we've made our function, we can tie it into our bot like this: - -.. code-block:: python - - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command() - async def cookie(ctx: commands.Context) -> None: - await ctx.send(f"{ctx.author.name} gets a cookie!") - - bot.run() - -And then we can use it like this: - -.. image:: /images/commands_basic_1.png - -We've made use of a decorator here to make the ``cookie`` function a command that will be called -whenever someone types ``!cookie`` in one of our twitch channels. But sometimes we'll want our function to be named something different -than our command, or we'll want aliases so that multiple things trigger our command. We can do that by passing arguments to the decorator, like so: - -.. code-block:: python - - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command(name="cookie", aliases=("cookies", "biscuits")) - async def cookie_command(ctx: commands.Context) -> None: - await ctx.send(f"{ctx.author.name} gets a cookie!") - - bot.run() - -Now our command can be triggered with any of ``!cookie``, ``!cookies``, or ``!biscuits``. But it `cannot` be triggered with ``!cookie_command``: - -.. image:: /images/commands_basic_2.png - -You may notice that if you try to run ``!cookie_command``, you get an error in your console about the command not being found. -Don't worry, we'll hide that later, when we cover error handling. - -___ - -Now let's say we want to take an argument for our command. We want to specify how many cookies the bot will give out. -Fortunately, twitchio has that functionality built right in! We can simply add an argument to our function, and the argument will be added. - -.. code-block:: python - - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command(name="cookie", aliases=("cookies", "biscuits")) - async def cookie_command(ctx: commands.Context, amount) -> None: - await ctx.send(f"{ctx.author.name} gets {amount} cookie(s)!") - - bot.run() - -.. image:: /images/commands_arguments_1.png - -Now, you'll notice that I passed ``words?`` as the argument in the image, and the code handled it fine. -While it's good that it didn't error, we actually want it to error here, as our code should only take numbers! -Good news, twitchio's argument handling goes beyond simple positional arguments. We can use python's typehints to tell the parser to **only** accept integers: - -.. code-block:: python - - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command(name="cookie", aliases=("cookies", "biscuits")) - async def cookie_command(ctx: commands.Context, amount: int) -> None: - await ctx.send(f"{ctx.author.name} gets {amount} cookie(s)!") - - bot.run() - -.. image:: /images/commands_arguments_2.png - -Good, the command didn't accept the word where the number should be. -We've got a messy error in our console, that looks like this: - -.. code:: - - twitchio.ext.commands.errors.ArgumentParsingFailed: Invalid argument parsed at `amount` in command `cookie`. Expected type got . - -but we'll clean that up when we cover error handling. - -Twitchio allows for many kinds of typehints to be used, including built in types like ``str`` (the default), ``int``, and ``bool``. -It also allows for some Twitchio models to be hinted. For instance, you can grab another user like this: - -.. code-block:: python - - import twitchio - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command(name="cookie", aliases=("cookies", "biscuits")) - async def cookie_command(ctx: commands.Context, amount: int, user: twitchio.User) -> None: - await ctx.send(f"{user.name} gets {amount} cookie(s)!") - - bot.run() - -.. image:: /images/commands_arguments_3.png - -Note that an error is raised for the last message, because "anfkednfowinoi" does not exist. - -.. code-block:: - - twitchio.ext.commands.errors.BadArgument: User 'anfkednfowinoi' was not found. - -The built in models that you can use include: - -- :class:`~twitchio.PartialChatter` - cache independent. -- :class:`~twitchio.Chatter` - dependent on cache, will fail if the user is not cached. -- :class:`~twitchio.PartialUser` - makes an API call, use :class:`~twitchio.PartialChatter` instead when possible. -- :class:`~twitchio.User` - makes an API call, use :class:`~twitchio.Chatter` instead when possible. -- :class:`~twitchio.Channel` - another channel that your bot has joined. -- :class:`~twitchio.Clip` - takes a clip URL. - -.. note:: - The :class:`~twitchio.User` / :class:`~twitchio.PartialUser` converters do make an API call, so they should only be used - in cases where you need to ensure the user exists (as an error will be raised when they don't exist). - For most usages of finding another user, you can simply use ``str`` or :class:`twitchio.PartialChatter`. - - Because of this downside, we'll be using :class:`~twitchio.PartialChatter` for the remainder of this walkthrough. - -___ - -Now, let's say we want to have the option to pass a chatter, but we want it to be optional. If a chatter isn't passed, we use the author instead. -We can accomplish this through the use of Python's ``typing`` module: - -.. code-block:: python - - import twitchio - from typing import Optional - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command(name="cookie", aliases=("cookies", "biscuits")) - async def cookie_command(ctx: commands.Context, amount: int, user: Optional[twitchio.PartialChatter]) -> None: - if user is None: - user = ctx.author - - await ctx.send(f"{user.name} gets {amount} cookie(s)!") - - bot.run() - -If you're on Python 3.10+, you could also structure it like this: - -.. code-block:: python - - import twitchio - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command(name="cookie", aliases=("cookies", "biscuits")) - async def cookie_command(ctx: commands.Context, amount: int, user: twitchio.PartialChatter | None) -> None: - if user is None: - user = ctx.author - - await ctx.send(f"{user.name} gets {amount} cookie(s)!") - - bot.run() - -.. image:: /images/commands_arguments_4.png - -With that 3.10 syntax in mind, we could also replace that ``None`` for another type. Maybe we want a clip, or any URL. -We could accomplish this using the Union syntax (as it's known). We'll make use of ``yarl`` here to parse URLs. - -.. note:: - If you're using anything below 3.10, you can use ``typing.Union`` as a substitute for that syntax, like so: - - .. code-block:: python - - from typing import Union - - def foo(argument: Union[str, int]) -> None: - ... - -At the same time, we'll introduce custom converters. While the library handles basic types and certain twitch types for you, -you may wish to make your own converters at some point. The library allows you to do this by passing a callable function to the typehint. -Additionally, you can use ``typing.Annotated`` to transform the argument for the type checker. This feature was introduced in Python 3.9, -if you wish to use this feature on lower versions consider installing ``typing_extensions`` to use it from there. -Using Annotated is not required, however it will help your type checker distinguish between converters and types. - -Lets take a look at custom converters and Annotated: - -.. code-block:: python - - import yarl - import twitchio - from typing import Annotated - from twitchio.ext import commands - - def url_converter(ctx: commands.Context, arg: str) -> yarl.URL: - return yarl.URL(arg) # this will raise if its an invalid URL. - - @bot.command(name="share") - async def share_command(ctx: commands.Context, url: Annotated[yarl.URL, url_converter]) -> None: - await ctx.send(f"{ctx.author.name} wants to share a link on {url.host}: {url}") - -Now that we've seen how custom converters work, let's combine them with the Union syntax to create a command that -will take either a :class:`~twitchio.Clip` or a URL. -I've spread the command definition out over multiple lines to make it more readable. - -.. code-block:: python - - import yarl - import twitchio - from typing import Annotated - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - def url_converter(ctx: commands.Context, arg: str) -> yarl.URL: - return yarl.URL(arg) # this will raise if its an invalid URL. - - @bot.command(name="share") - async def share_command( - ctx: commands.Context, - url: twitchio.Clip | Annotated[yarl.URL, url_converter] - ) -> None: - if isinstance(url, twitchio.Clip): - await ctx.send(f"{ctx.author.name} wants to share a clip from {url.broadcaster.name}: {url.url}") - else: - await ctx.send(f"{ctx.author.name} wants to share a link on {url.host}: {url}") - - bot.run() - - -.. image:: /images/commands_arguments_5.png - -___ - -Let's take a look at the different ways you can pass strings to your commands. -We'll use this example code: - -.. code-block:: python - - import twitchio - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command(name="echo") - async def echo(ctx: commands.Context, phrase: str, other_phrase: str | None) -> None: - response = f"Echo! {phrase}" - if other_phrase: - response += f". You also said: {other_phrase}" - - await ctx.send(response) - - bot.run() - -At it's most basic, we can simply pass a word, and get a word back: - -.. image:: /images/commands_parsing_1.png - -However what do we do when we want to pass a sentence or multiple words to one argument? -If change nothing here, and add a second word, we'll get some unwanted behaviour: - -.. image:: /images/commands_parsing_2.png - -However, there are two workarounds we can do. - -First, we can tell our users to quote their argument: - -.. image:: /images/commands_parsing_3.png - -However, if we want to work around it on the bot side, we can change our code to use a special *positional only* argument. -In python, positional only arguments are ones that you must specify explicitly when calling the function. -However, twitchio interprets them to mean "pass me the rest of the input". This means that you can only have **one** of these arguments. -This must also be the last argument, because it consumes the rest of the input. - -Let's see how this would look: - -.. code-block:: python - - import twitchio - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - @bot.command(name="echo") - async def echo(ctx: commands.Context, *, phrase: str) -> None: - response = f"Echo! {phrase}" - - await ctx.send(response) - - bot.run() - -And how it turns out: - -.. image:: /images/commands_parsing_4.png - - -___ - -Now, let's clean up our errors a bit. To do this, we'll take a mix of the code examples from above: - -.. code-block:: python - - import yarl - import twitchio - from typing import Annotated - from twitchio.ext import commands - - bot = commands.Bot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - def youtube_converter(ctx: commands.Context, arg: str) -> yarl.URL: - url = yarl.URL(arg) # this will raise if its an invalid URL. - if url.host not in ("youtube.com", "youtu.be"): - raise RuntimeError("Not a youtube link!") - - return url - - @bot.command(name="share") - async def share_command( - ctx: commands.Context, - url: Annotated[yarl.URL, youtube_converter], - hype: int, - *, - comment: str - ) -> None: - hype_level = "hype" if 0 < hype < 5 else "very hype" - await ctx.send(f"{ctx.author.name} wants to share a {hype_level} link on {url.host}: {comment}") - - bot.run() - -Currently, any errors that are raised will simply go directly into our console, but that's not really ideal behaviour. -We want to choose errors to ignore, errors to print, and errors to send to the user. We can do this by subclassing our Bot, and overriding the command_error event. -Let's take a look at that specifically: - -.. code-block:: python - - from twitchio.ext import commands - - class MyBot(commands.Bot): - async def event_command_error(self, context: commands.Context, error: Exception): - print(error) - - bot = MyBot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - # SNIP: command - - bot.run() - -Great, we've switched from the default behaviour to a custom behaviour. However, we can improve on it. - -There are a couple errors that you are garaunteed to encounter. CommandNotFound is probably the most annoying one, so let's start there: - -.. code-block:: python - - class MyBot(commands.Bot): - async def event_command_error(self, context: commands.Context, error: Exception): - if isinstance(error, commands.CommandNotFound): - return - - print(error) - - # SNIP: everything else - -Now we will no longer see that pesky command not found error in our console every time someone mistypes a command. -Next, we can handle some of the errors we saw earlier, like ArgumentParsingFailed: - -.. code-block:: python - - class MyBot(commands.Bot): - async def event_command_error(self, context: commands.Context, error: Exception): - if isinstance(error, commands.CommandNotFound): - return - - elif isinstance(error, commands.ArgumentParsingFailed): - await context.send(error.message) - - else: - print(error) - - # SNIP: everything else - -Now we send argument parsing errors directly to the user, so they can adjust their input. -Let's try combining this subclass with our existing code: - -.. code-block:: python - - import yarl - import twitchio - from typing import Annotated - from twitchio.ext import commands - - class MyBot(commands.Bot): - async def event_command_error(self, context: commands.Context, error: Exception): - if isinstance(error, commands.CommandNotFound): - return - - elif isinstance(error, commands.ArgumentParsingFailed): - await context.send(error.message) - - else: - print(error) - - bot = MyBot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - def youtube_converter(ctx: commands.Context, arg: str) -> yarl.URL: - url = yarl.URL(arg) # this will raise if its an invalid URL. - if url.host not in ("youtube.com", "youtu.be"): - raise RuntimeError("Not a youtube link!") - - return url - - @bot.command(name="share") - async def share_command( - ctx: commands.Context, - url: Annotated[yarl.URL, youtube_converter], - hype: int, - *, - comment: str - ) -> None: - hype_level = "hype" if 0 < hype < 5 else "very hype" - await ctx.send(f"{ctx.author.name} wants to share a {hype_level} link on {url.host}: {comment}") - - bot.run() - -Now, let's pass it some bad arguments and see what happens. - -.. image:: /images/commands_errors_1.png - -Now, that isn't very user intuitive, but for the purpose of this walkthrough, it'll do just fine. You can tweak that as you want! -Let's fill this out with some more common errors: - -.. code-block:: python - - class MyBot(commands.Bot): - async def event_command_error(self, context: commands.Context, error: Exception): - if isinstance(error, commands.CommandNotFound): - return - - elif isinstance(error, commands.ArgumentParsingFailed): - await context.send(error.message) - - elif isinstance(error, commands.MissingRequiredArgument): - await context.send("You're missing an argument: " + error.name) - - elif isinstance(error, commands.CheckFailure): # we'll explain checks later, but lets include it for now. - await context.send("Sorry, you cant run that command: " + error.args[0]) - - else: - print(error) - -Now when we run our code we get some actual errors in our chat! - -.. image:: /images/commands_errors_2.png - -To create your own errors to handle here from arguments, subclass :class:`BadArgument` and raise that custom exception in your argument parser. -If you want to raise errors from your commands, subclass :class:`TwitchCommandError` instead. As an example, let's change the youtube converter to use a custom error: - - .. code-block:: python - - import yarl - import twitchio - from typing import Annotated - from twitchio.ext import commands - - class MyBot(commands.Bot): - async def event_command_error(self, context: commands.Context, error: Exception): - if isinstance(error, commands.CommandNotFound): - return - - elif isinstance(error, commands.ArgumentParsingFailed): - await context.send(error.message) - - elif isinstance(error, commands.MissingRequiredArgument): - await context.send("You're missing an argument: " + error.name) - - elif isinstance(error, commands.CheckFailure): # we'll explain checks later, but lets include it for now. - await context.send("Sorry, you cant run that command: " + error.args[0]) - - elif isinstance(error, YoutubeConverterError): - await context.send(f"{error.link} is not a valid youtube URL!") - - else: - print(error) - - bot = MyBot(token="...", prefix="!", initial_channels=["iamtomahawkx", "chillymosh", "mystypy"]) - - class YoutubeConverterError(commands.BadArgument): - def __init__(self, link: yarl.URL): - self.link = link - super().__init__("Bad link!") - - def youtube_converter(ctx: commands.Context, arg: str) -> yarl.URL: - url = yarl.URL(arg) # this will raise if its an invalid URL. - if url.host not in ("youtube.com", "youtu.be"): - raise YoutubeConverterError(url) - - return url - - @bot.command(name="share") - async def share_command( - ctx: commands.Context, - url: Annotated[yarl.URL, youtube_converter], - hype: int, - *, - comment: str - ) -> None: - hype_level = "hype" if 0 < hype < 5 else "very hype" - await ctx.send(f"{ctx.author.name} wants to share a {hype_level} link on {url.host}: {comment}") - - bot.run() - -Now, let's pass a bad URL to it: - -.. image:: /images/commands_errors_3.png - -Great, we get our custom error! That's our basic error handling, anything more complex is beyond this walkthrough. - -.. tip:: - - Many Twitchio errors have additional context contained within them. - If you wish to build your own error messages instead of the defaults, try checking the error's attributes. - -___ - - -API Reference --------------- - -Bot -++++ -.. attributetable:: Bot - -.. autoclass:: Bot - :members: - :inherited-members: - -.. _context_ref: - -Context -++++++++ -.. attributetable:: Context - -.. autoclass:: Context - :members: - :inherited-members: - -Command -++++++++ -.. attributetable:: Command - -.. autoclass:: Command - :members: - :inherited-members: - -Cog -++++ -.. attributetable:: Cog - -.. autoclass:: Cog - :members: - :inherited-members: - - -Cooldowns -++++++++++ -.. autoclass:: Bucket - :members: - -.. autoclass:: Cooldown - :members: - :inherited-members: diff --git a/docs/exts/eventsub.rst b/docs/exts/eventsub.rst deleted file mode 100644 index 9fac08af..00000000 --- a/docs/exts/eventsub.rst +++ /dev/null @@ -1,497 +0,0 @@ -.. currentmodule:: twitchio.ext.eventsub - -.. _eventsub_ref: - -EventSub Ext -============= - -The EventSub ext is made to receive eventsub webhook notifications from twitch. -For those not familiar with eventsub, it allows you to subscribe to certain events, and when these events happen, -Twitch will send you an HTTP request containing information on the event. This ext abstracts away the complex portions of this, -integrating seamlessly into the twitchio Client event dispatching system. - -.. warning:: - This ext requires you to have a public facing ip AND domain, and to be able to receive inbound requests. - -.. note:: - Twitch requires EventSub targets to have TLS/SSL enabled (https). TwitchIO does not support this, as such you should - use a reverse proxy such as ``nginx`` to handle TLS/SSL. - - -A Quick Example ----------------- - -.. code-block:: python3 - - import twitchio - from twitchio.ext import eventsub, commands - bot = commands.Bot(token="...") - eventsub_client = eventsub.EventSubClient(bot, "some_secret_string", "https://your-url.here/callback") - # when subscribing (you can only await inside coroutines) - - await eventsub_client.subscribe_channel_subscriptions(channel_ID) - - @bot.event() - async def eventsub_notification_subscription(payload: eventsub.ChannelSubscribeData): - ... - - bot.loop.create_task(eventsub_client.listen(port=4000)) - bot.loop.create_task(bot.start()) - bot.loop.run_forever() - - -Running Eventsub Inside a Commands Bot ---------------------------------------- - -.. code-block:: python3 - - import twitchio - from twitchio.ext import commands, eventsub - - esbot = commands.Bot.from_client_credentials(client_id='...', - client_secret='...') - esclient = eventsub.EventSubClient(esbot, - webhook_secret='...', - callback_route='https://your-url.here/callback') - - - class Bot(commands.Bot): - - def __init__(self): - super().__init__(token='...', prefix='!', initial_channels=['channel']) - - async def __ainit__(self) -> None: - self.loop.create_task(esclient.listen(port=4000)) - - try: - await esclient.subscribe_channel_follows_v2(broadcaster=some_channel_ID, moderator=a_channel_mod_ID) - except twitchio.HTTPException: - pass - - async def event_ready(self): - print('Bot is ready!') - - - bot = Bot() - bot.loop.run_until_complete(bot.__ainit__()) - - - @esbot.event() - async def event_eventsub_notification_followV2(payload: eventsub.ChannelFollowData) -> None: - print('Received event!') - channel = bot.get_channel('channel') - await channel.send(f'{payload.data.user.name} followed woohoo!') - - bot.run() - - -Event Reference ----------------- -This is a list of events dispatched by the eventsub ext. - -.. function:: event_eventsub_notification_user_authorization_grant(event: UserAuthorizationGrantedData) - - Called when your app has had access granted on a channel. - -.. function:: event_eventsub_revokation(event: RevokationEvent) - - Called when your app has had access revoked on a channel. - -.. function:: event_eventsub_webhook_callback_verification(event: ChallengeEvent) - - Called when Twitch sends a challenge to your server. - - .. note:: - You generally won't need to interact with this event. The ext will handle responding to the challenge automatically. - -.. function:: event_eventsub_keepalive(event: KeepaliveEvent) - - Called when a Twitch sends a keepalive event. You do not need to use this in daily usage. - - .. note:: - You generally won't need to interact with this event. - -.. function:: event_eventsub_reconnect(event: ReconnectEvent) - - Called when a Twitch wishes for us to reconnect. - - .. note:: - You generally won't need to interact with this event. The library will automatically handle reconnecting. - -.. function:: event_eventsub_notification_follow(event: ChannelFollowData) - - Called when someone creates a follow on a channel you've subscribed to. - - .. warning:: - Twitch has removed this, please use :func:`event_eventsub_notification_followV2` - - -.. function:: event_eventsub_notification_followV2(event: ChannelFollowData) - - Called when someone creates a follow on a channel you've subscribed to. - -.. function:: event_eventsub_notification_subscription(event: ChannelSubscribeData) - - Called when someone subscribes to a channel that you've subscribed to. - -.. function:: event_eventsub_notification_subscription_end(event: ChannelSubscriptionEndData) - - Called when a subscription to a channel that you've subscribed to ends. - -.. function:: event_eventsub_notification_subscription_gift(event: ChannelSubscriptionGiftData) - - Called when someone gifts a subscription to a channel that you've subscribed to. - -.. function:: event_eventsub_notification_subscription_message(event: ChannelSubscriptionMessageData) - - Called when someone resubscribes with a message to a channel that you've subscribed to. - -.. function:: event_eventsub_notification_cheer(event: ChannelCheerData) - - Called when someone cheers on a channel you've subscribed to. - -.. function:: event_eventsub_notification_raid(event: ChannelRaidData) - - Called when someone raids a channel you've subscribed to. - -.. function:: event_eventsub_notification_poll_begin(event: PollBeginProgressData) - - Called when a poll begins on a channel you've subscribed to. - -.. function:: event_eventsub_notification_poll_progress(event: PollBeginProgressData) - - Called repeatedly while a poll is running on a channel you've subscribed to. - -.. function:: event_eventsub_notification_poll_end(event: PollEndData) - - Called when a poll ends on a channel you've subscribed to. - -.. function:: event_eventsub_notification_prediction_begin(event: PredictionBeginProgressData) - - Called when a prediction starts on a channel you've subscribed to. - -.. function:: event_eventsub_notification_prediction_progress(event: PredictionBeginProgressData) - - Called repeatedly while a prediction is running on a channel you've subscribed to. - -.. function:: event_eventsub_notification_prediction_lock(event: PredictionLockData) - - Called when a prediction locks on a channel you've subscribed to. - -.. function:: event_eventsub_notification_prediction_end(event: PredictionEndData) - - Called when a prediction ends on a channel you've subscribed to. - -.. function:: event_eventsub_notification_stream_start(event: StreamOnlineData) - - Called when a stream starts on a channel you've subscribed to. - -.. function:: event_eventsub_notification_stream_end(event: StreamOfflineData) - - Called when a stream ends on a channel you've subscribed to. - -.. function:: event_eventsub_notification_channel_goal_begin(event: ChannelGoalBeginProgressData) - - Called when a streamer starts a goal on their channel. - -.. function:: event_eventsub_notification_channel_goal_progress(event: ChannelGoalBeginProgressData) - - Called when there is an update event to a channel's goal. - -.. function:: event_eventsub_notification_channel_goal_end(event: ChannelGoalEndData) - - Called when someone ends a goal on their channel. - -.. function:: event_eventsub_notification_hypetrain_begin(event: HypeTrainBeginProgressData) - - Called when a hype train starts on their channel. - -.. function:: event_eventsub_notification_hypetrain_progress(event: HypeTrainBeginProgressData) - - Called when a hype train receives an update on their channel. - -.. function:: event_eventsub_notification_hypetrain_end(event: HypeTrainEndData) - - Called when a hype train ends on their channel. - -.. function:: event_eventsub_notification_channel_shield_mode_begin(event: ChannelShieldModeBeginData) - - Called when a channel's Shield Mode status is activated. - -.. function:: event_eventsub_notification_channel_shield_mode_end(event: ChannelShieldModeEndData) - - Called when a channel's Shield Mode status is deactivated. - -.. function:: event_eventsub_notification_channel_shoutout_create(event: ChannelShoutoutCreateData) - - Called when a channel sends a shoutout. - -.. function:: event_eventsub_notification_channel_shoutout_receive(event: ChannelShoutoutReceiveData) - - Called when a channel receives a shoutout. - -.. function:: event_eventsub_notification_channel_charity_donate(event: ChannelCharityDonationData) - - Called when a user donates to an active charity campaign. - -API Reference --------------- - -.. attributetable:: EventSubClient - -.. autoclass:: EventSubClient - :members: - :undoc-members: - -.. attributetable:: EventSubWSClient - -.. autoclass:: EventSubWSClient - :members: - :undoc-members: - -.. attributetable:: Subscription - -.. autoclass:: Subscription - :members: - :inherited-members: - -.. attributetable:: Headers - -.. autoclass:: Headers - :members: - :inherited-members: - -.. attributetable:: WebsocketHeaders - -.. autoclass:: WebsocketHeaders - :members: - :inherited-members: - -.. attributetable::: ChannelBanData - -.. autoclass:: ChannelBanData - :members: - :inherited-members: - -.. attributetable::: ChannelShieldModeBeginData - -.. autoclass:: ChannelShieldModeBeginData - :members: - :inherited-members: - -.. attributetable::: ChannelShieldModeEndData - -.. autoclass:: ChannelShieldModeEndData - :members: - :inherited-members: - -.. attributetable::: ChannelShoutoutCreateData - -.. autoclass:: ChannelShoutoutCreateData - :members: - :inherited-members: - -.. attributetable::: ChannelShoutoutReceiveData - -.. autoclass:: ChannelShoutoutReceiveData - :members: - :inherited-members: - -.. attributetable::: ChannelSubscribeData - -.. autoclass:: ChannelSubscribeData - :members: - :inherited-members: - -.. attributetable::: ChannelSubscriptionGiftData - -.. autoclass:: ChannelSubscriptionGiftData - :members: - :inherited-members: - -.. attributetable::: ChannelSubscriptionMessageData - -.. autoclass:: ChannelSubscriptionMessageData - :members: - :inherited-members: - -.. attributetable::: ChannelCheerData - -.. autoclass:: ChannelCheerData - :members: - :inherited-members: - -.. attributetable::: ChannelUpdateData - -.. autoclass:: ChannelUpdateData - :members: - :inherited-members: - -.. attributetable::: ChannelFollowData - -.. autoclass:: ChannelFollowData - :members: - :inherited-members: - -.. attributetable::: ChannelRaidData - -.. autoclass:: ChannelRaidData - :members: - :inherited-members: - -.. attributetable::: ChannelModeratorAddRemoveData - -.. autoclass:: ChannelModeratorAddRemoveData - :members: - :inherited-members: - -.. attributetable::: ChannelGoalBeginProgressData - -.. autoclass:: ChannelGoalBeginProgressData - :members: - :inherited-members: - -.. attributetable::: ChannelGoalEndData - -.. autoclass:: ChannelGoalEndData - :members: - :inherited-members: - -.. attributetable::: CustomReward - -.. autoclass:: CustomReward - :members: - :inherited-members: - -.. attributetable::: CustomRewardAddUpdateRemoveData - -.. autoclass:: CustomRewardAddUpdateRemoveData - :members: - :inherited-members: - -.. attributetable::: CustomRewardRedemptionAddUpdateData - -.. autoclass:: CustomRewardRedemptionAddUpdateData - :members: - :inherited-members: - -.. attributetable::: HypeTrainContributor - -.. autoclass:: HypeTrainContributor - :members: - :inherited-members: - -.. attributetable::: HypeTrainBeginProgressData - -.. autoclass:: HypeTrainBeginProgressData - :members: - :inherited-members: - -.. attributetable::: HypeTrainEndData - -.. autoclass:: HypeTrainEndData - :members: - :inherited-members: - -.. attributetable::: PollChoice - -.. autoclass:: PollChoice - :members: - :inherited-members: - -.. attributetable::: BitsVoting - -.. autoclass:: BitsVoting - :members: - :inherited-members: - -.. attributetable::: ChannelPointsVoting - -.. autoclass:: ChannelPointsVoting - :members: - :inherited-members: - -.. attributetable::: PollStatus - -.. autoclass:: PollStatus - :members: - :inherited-members: - -.. attributetable::: PollBeginProgressData - -.. autoclass:: PollBeginProgressData - :members: - :inherited-members: - -.. attributetable::: PollEndData - -.. autoclass:: PollEndData - :members: - :inherited-members: - -.. attributetable::: Predictor - -.. autoclass:: Predictor - :members: - :inherited-members: - -.. attributetable::: PredictionOutcome - -.. autoclass:: PredictionOutcome - :members: - :inherited-members: - -.. attributetable::: PredictionStatus - -.. autoclass:: PredictionStatus - :members: - :inherited-members: - -.. attributetable::: PredictionBeginProgressData - -.. autoclass:: PredictionBeginProgressData - :members: - :inherited-members: - -.. attributetable::: PredictionLockData - -.. autoclass:: PredictionLockData - :members: - :inherited-members: - -.. attributetable::: PredictionEndData - -.. autoclass:: PredictionEndData - :members: - :inherited-members: - -.. attributetable::: StreamOnlineData - -.. autoclass:: StreamOnlineData - :members: - :inherited-members: - -.. attributetable::: StreamOfflineData - -.. autoclass:: StreamOfflineData - :members: - :inherited-members: - -.. attributetable::: UserAuthorizationRevokedData - -.. autoclass:: UserAuthorizationRevokedData - :members: - :inherited-members: - -.. attributetable::: UserUpdateData - -.. autoclass:: UserUpdateData - :members: - :inherited-members: - -.. attributetable::: ChannelCharityDonationData - -.. autoclass:: ChannelCharityDonationData - :members: - :inherited-members: - diff --git a/docs/exts/pubsub.rst b/docs/exts/pubsub.rst deleted file mode 100644 index 60d6b347..00000000 --- a/docs/exts/pubsub.rst +++ /dev/null @@ -1,310 +0,0 @@ -.. currentmodule:: twitchio.ext.pubsub - -.. _pubsub-ref: - -PubSub Ext -=========== - -The PubSub Ext is designed to make receiving events from twitch's PubSub websocket simple. -This ext handles all the necessary connection management, authorizing, and dispatching events through -TwitchIO's Client event system. - -A quick example ----------------- - -.. code-block:: python3 - - import twitchio - import asyncio - from twitchio.ext import pubsub - - my_token = "..." - users_oauth_token = "..." - users_channel_id = 12345 - client = twitchio.Client(token=my_token) - client.pubsub = pubsub.PubSubPool(client) - - @client.event() - async def event_pubsub_bits(event: pubsub.PubSubBitsMessage): - pass # do stuff on bit redemptions - - @client.event() - async def event_pubsub_channel_points(event: pubsub.PubSubChannelPointsMessage): - pass # do stuff on channel point redemptions - - async def main(): - topics = [ - pubsub.channel_points(users_oauth_token)[users_channel_id], - pubsub.bits(users_oauth_token)[users_channel_id] - ] - await client.pubsub.subscribe_topics(topics) - await client.start() - - client.loop.run_until_complete(main()) - -This will connect to to the pubsub server, and subscribe to the channel points and bits events -for user 12345, using the oauth token they have given us with the corresponding scopes. - -Topics -------- - -Each of the topics below needs to first be called with a user oauth token, and then needs channel id(s) passed to it, as such: - -.. code-block:: python3 - - from twitchio.ext import pubsub - user_token = "..." - user_channel_id = 12345 - topic = pubsub.bits(user_token)[user_channel_id] - -If the topic requires multiple channel ids, they should be passed as such: - -.. code-block:: python3 - - from twitchio.ext import pubsub - user_token = "..." - user_channel_id = 12345 # the channel to listen to - mods_channel_id = 67890 # the mod to listen for actions from - topic = pubsub.moderation_user_action(user_token)[user_channel_id][mods_channel_id] - - -.. function:: bits(oauth_token: str) - - This topic listens for bit redemptions on the given channel. - This topic dispatches the ``pubsub_bits`` client event. - This topic takes one channel id, the channel to listen on, e.g.: - - .. code-block:: python3 - - from twitchio.ext import pubsub - user_token = "..." - user_channel_id = 12345 - topic = pubsub.bits(user_token)[user_channel_id] - - This can be received via the following: - - .. code-block:: python3 - - import twitchio - from twitchio.ext import pubsub - - client = twitchio.Client(token="...") - - @client.event() - async def event_pubsub_bits(event: pubsub.PubSubBitsMessage): - ... - - -.. function:: bits_badge(oauth_token: str) - - This topic listens for bit badge upgrades on the given channel. - This topic dispatches the ``pubsub_bits_badge`` client event. - This topic takes one channel id, the channel to listen on, e.g.: - - .. code-block:: python3 - - from twitchio.ext import pubsub - user_token = "..." - user_channel_id = 12345 - topic = pubsub.bits_badge(user_token)[user_channel_id] - - This can be received via the following: - - .. code-block:: python3 - - import twitchio - from twitchio.ext import pubsub - - client = twitchio.Client(token="...") - - @client.event() - async def event_pubsub_bits_badge(event: pubsub.PubSubBitsBadgeMessage): - ... - - -.. function:: channel_points(oauth_token: str) - - This topic listens for channel point redemptions on the given channel. - This topic dispatches the ``pubsub_channel_points`` client event. - This topic takes one channel id, the channel to listen on, e.g.: - - .. code-block:: python3 - - from twitchio.ext import pubsub - user_token = "..." - user_channel_id = 12345 - topic = pubsub.channel_points(user_token)[user_channel_id] - - This can be received via the following: - - .. code-block:: python3 - - import twitchio - from twitchio.ext import pubsub - - client = twitchio.Client(token="...") - - @client.event() - async def event_pubsub_channel_points(event: pubsub.PubSubChannelPointsMessage): - ... - - -.. function:: channel_subscriptions(oauth_token: str) - - This topic listens for subscriptions on the given channel. - This topic dispatches the ``pubsub_subscription`` client event. - This topic takes one channel id, the channel to listen on, e.g.: - - .. code-block:: python3 - - from twitchio.ext import pubsub - user_token = "..." - user_channel_id = 12345 - topic = pubsub.channel_subscriptions(user_token)[user_channel_id] - - -.. function:: moderation_user_action(oauth_token: str) - - This topic listens for moderation actions on the given channel. - This topic dispatches the ``pubsub_moderation`` client event. - This topic takes two channel ids, the channel to listen on, and the user to listen to, e.g.: - - .. code-block:: python3 - - from twitchio.ext import pubsub - user_token = "..." - user_channel_id = 12345 - moderator_id = 67890 - topic = pubsub.bits_badge(user_token)[user_channel_id][moderator_id] - - This event can receive many different events; :class:`PubSubModerationActionBanRequest`, - :class:`PubSubModerationActionChannelTerms`, :class:`PubSubModerationActionModeratorAdd`, or - :class:`PubSubModerationAction` - - It can be received via the following: - - .. code-block:: python3 - - import twitchio - from twitchio.ext import pubsub - - client = twitchio.Client(token="...") - - @client.event() - async def event_pubsub_moderation(event): - ... - - -.. function:: whispers(oauth_token: str) - - .. warning:: - - This does not have a model created yet, and will error when a whisper event is received - - This topic listens for bit badge upgrades on the given channel. - This topic dispatches the `pubsub_whisper` client event. - This topic takes one channel id, the channel to listen to whispers from, e.g.: - - .. code-block:: python3 - - from twitchio.ext import pubsub - user_token = "..." - listen_to_id = 12345 - topic = pubsub.whispers(user_token)[listen_to_id] - -Hooks ------- - -There are two hooks available in the PubSubPool class. To access these hooks, subclass the PubSubPool. -After subclassing, use the subclass like normal. - -The ``auth_fail_hook`` is called whenever you attempt to subscribe to a topic and the auth token is invalid. -From the hook, you are able to fix your token (maybe you need to prompt the user for a new token), and then subscribe again. - -The ``reconnect_hook`` is called whenevever a node has to reconnect to twitch, for any reason. The node will wait for you to -return a list of topics before reconnecting. Any modifications to the topics will be applied to the node. - -.. code-block:: python3 - - from typing import List - from twitchio.ext import pubsub - - class MyPool(pubsub.PubSubPool): - async def auth_fail_hook(self, topics: List[pubsub.Topic]) -> None: - fixed_topics = fix_my_auth_tokens(topics) # somehow fix your auth tokens - await self.subscribe_topics(topics) - - async def reconnect_hook(self, node: pubsub.PubSubWebsocket, topics: List[pubsub.Topic]) -> List[pubsub.Topic]: - return topics - - -Api Reference --------------- - -.. attributetable:: Topic - -.. autoclass:: Topic - :members: - :inherited-members: - -.. attributetable:: PubSubPool - -.. autoclass:: PubSubPool - :members: - -.. attributetable:: PubSubChatMessage - -.. autoclass:: PubSubChatMessage - :members: - -.. attributetable:: PubSubBadgeEntitlement - -.. autoclass:: PubSubBadgeEntitlement - :members: - -.. attributetable:: PubSubMessage - -.. autoclass:: PubSubMessage - :members: - -.. attributetable:: PubSubBitsMessage - -.. autoclass:: PubSubBitsMessage - :members: - :inherited-members: - -.. attributetable:: PubSubBitsBadgeMessage - -.. autoclass:: PubSubBitsBadgeMessage - :members: - :inherited-members: - -.. attributetable:: PubSubChannelPointsMessage - -.. autoclass:: PubSubChannelPointsMessage - :members: - :inherited-members: - -.. attributetable:: PubSubModerationAction - -.. autoclass:: PubSubModerationAction - :members: - :inherited-members: - -.. attributetable:: PubSubModerationActionBanRequest - -.. autoclass:: PubSubModerationActionBanRequest - :members: - :inherited-members: - -.. attributetable:: PubSubModerationActionChannelTerms - -.. autoclass:: PubSubModerationActionChannelTerms - :members: - :inherited-members: - -.. attributetable:: PubSubModerationActionModeratorAdd - -.. autoclass:: PubSubModerationActionModeratorAdd - :members: - :inherited-members: diff --git a/docs/exts/routines.rst b/docs/exts/routines.rst deleted file mode 100644 index 451ccda2..00000000 --- a/docs/exts/routines.rst +++ /dev/null @@ -1,117 +0,0 @@ -.. currentmodule:: twitchio.ext.routines - -.. _routines-ref: - - -Routines Ext -=========================== - -Routines are helpers designed to make running async background tasks in TwitchIO easier. -Overall Routines are a QoL and are designed to be simple and easy to use. - -Recipes ---------------------------- - -**A simple routine:** - -This routine will run every 5 seconds for 5 iterations. - -.. code-block:: python3 - - from twitchio.ext import routines - - - @routines.routine(seconds=5.0, iterations=5) - async def hello(arg: str): - print(f'Hello {arg}!') - - - hello.start('World') - - -**Routine with a before/after_routine hook:** - -This routine will run a hook before starting, this can be useful for setting up state before the routine runs. -The `before_routine` hook will only be called once. Similarly `after_routine` will be called once at the end of the -routine. - -.. code-block:: python3 - - from twitchio.ext import routines - - - @routines.routine(hours=1) - async def hello(): - print('Hello World!') - - @hello.before_routine - async def hello_before(): - print('I am run first!') - - - hello.start() - - -**Routine with an error handler:** - -This example shows a routine with a non-default error handler; by default all routines will stop on error. -You can change this behaviour by adding `stop_on_error=False` to your routine start function. - - -.. code-block:: python3 - - from twitchio.ext import routines - - - @routines.routine(minutes=10) - async def hello(arg: str): - raise RuntimeError - - @hello.error - async def hello_on_error(error: Exception): - print(f'Hello routine raised: {error}.') - - - hello.start('World', stop_on_error=True) - - -**Routine which runs at a specific time:** - -This routine will run at the same time everyday. -If a naive datetime is provided, your system local time is used. - -The below example shows a routine which will first be ran on the **1st, June 2021 at 9:30am** system local time. -It will then be ran every 24 hours after the initial date, until stopped. - - -If the **date** has already passed, the routine will run at the next specified time. -For example: If today was the **2nd, June 2021 8:30am** and your datetime was scheduled to run on the -**1st, June 2021 at 9:30am**, your routine will first run on **2nd, June 2021 at 9:30am**. - -In simpler terms, datetimes in the past only care about the time, not the date. This can be useful when scheduling -routines that don't need to be started on a specific date. - - -.. code-block:: python3 - - import datetime - - from twitchio.ext import routines - - - @routines.routine(time=datetime.datetime(year=2021, month=6, day=1, hour=9, minute=30)) - async def hello(arg: str): - print(f'Hello {arg}!') - - - hello.start('World') - -API Reference ---------------------------- - -.. attributetable:: Routine - -.. autoclass:: Routine - :members: - -.. autofunction:: twitchio.ext.routines.routine diff --git a/docs/exts/sounds.rst b/docs/exts/sounds.rst deleted file mode 100644 index eb5b9a14..00000000 --- a/docs/exts/sounds.rst +++ /dev/null @@ -1,183 +0,0 @@ -.. currentmodule:: twitchio.ext.sounds - -.. _sounds-ref: - - -Sounds Ext -=========================== - -Sounds is an extension to easily play sounds on your local machine plugged directly into your bot. -Sounds is currently a Beta release, and as such should be treated so. - -Currently sounds supports local files and YouTube searches. See below for more details. - -Sounds requires a few extra steps to get started, below is a short guide on how to get started with sounds: - -**Installation:** - -**1 -** First install TwitchIO with the following commands: - -**Windows:** - -.. code:: sh - - py -3.9 -m pip install -U twitchio[sounds] - -**Linux:** - -.. code:: sh - - python3.9 -m pip install -U twitchio[sounds] - - -If you are on Linux you can skip to step **3**. - - -**2 -** Windows users require an extra step to get sounds working, in your console run the following commands: - -.. code:: sh - - py -3.9 -m pip install -U pipwin - - -Then: - -.. code:: sh - - pipwin install pyaudio - - -**3 -** If you are on windows, download ffmpeg and make sure you add it your path. You can find the .exe required in -the /bin folder. Alternatively copy and paste ffmpeg.exe into your bots Working Directory. - -Linux/MacOS users should use their package manager to download and install ffmpeg on their system. - -Recipes ---------------------------- - -**A simple Bot with an AudioPlayer:** - -This bot will search YouTube for a relevant video and playback its audio. - -.. code-block:: python3 - - from twitchio.ext import commands, sounds - - - class Bot(commands.Bot): - - def __init__(self): - super().__init__(token='...', prefix='!', initial_channels=['...']) - - self.player = sounds.AudioPlayer(callback=self.player_done) - - async def event_ready(self) -> None: - print('Successfully logged in!') - - async def player_done(self): - print('Finished playing song!') - - @commands.command() - async def play(self, ctx: commands.Context, *, search: str) -> None: - track = await sounds.Sound.ytdl_search(search) - self.player.play(track) - - await ctx.send(f'Now playing: {track.title}') - - - bot = Bot() - bot.run() - - -**Sound with a Local File:** - -This Sound will target a local file on your machine. Just pass the location to source. - -.. code-block:: python3 - - sound = sounds.Sound(source='my_audio.mp3') - - -**Multiple Players:** - -This example shows how to setup multiple players. Useful for playing music in addition to sounds on events! - - -.. code-block:: python3 - - import twitchio - from twitchio.ext import commands, sounds - - - class Bot(commands.Bot): - - def __init__(self): - super().__init__(token='...', prefix='!', initial_channels=['...']) - - self.music_player = sounds.AudioPlayer(callback=self.music_done) - self.event_player = sounds.AudioPlayer(callback=self.sound_done) - - async def event_ready(self) -> None: - print('Successfully logged in!') - - async def music_done(self): - print('Finished playing song!') - - async def sound_done(self): - print('Finished playing sound!') - - @commands.command() - async def play(self, ctx: commands.Context, *, search: str) -> None: - track = await sounds.Sound.ytdl_search(search) - self.music_player.play(track) - - await ctx.send(f'Now playing: {track.title}') - - async def event_message(self, message: twitchio.Message) -> None: - # This is just an example only... - # Playing a sound on every message could get extremely spammy... - sound = sounds.Sound(source='beep.mp3') - self.event_player.play(sound) - - - bot = Bot() - bot.run() - - -**Common AudioPlayer actions:** - -.. code-block:: python3 - - # Set the volume of the player... - player.volume = 50 - - # Pause the player... - player.pause() - - # Resume the player... - player.resume() - - # Stop the player... - player.stop() - - # Check if the player is playing... - player.is_playing - - -API Reference ---------------------------- - -.. attributetable:: OutputDevice - -.. autoclass:: OutputDevice - :members: - -.. attributetable:: Sound - -.. autoclass:: Sound - :members: - -.. attributetable:: AudioPlayer - -.. autoclass:: AudioPlayer - :members: diff --git a/docs/faq.rst b/docs/faq.rst deleted file mode 100644 index 1d615598..00000000 --- a/docs/faq.rst +++ /dev/null @@ -1,20 +0,0 @@ -:orphan: - -Frequently Asked Questions -================================== -Frequently asked questions for TwitchIO 2. - -.. rst-class:: this-will-duplicate-information-and-it-is-still-useful-here -.. contents:: Questions - :local: - - -How can I run something on a schedule in the background? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -TwitchIO has a helper extension named routines. Routines are asyncio tasks that run on a schedule in the background. -Consider reading through the :doc:`exts/routines` documentation. - -How can I send a message? -~~~~~~~~~~~~~~~~~~~~~~~~~ -TwitchIO is an object orientated library with stateful objects. To send a message simply use ``await .send('Hello World!)`` -on any ``Messageable`` class. E.g :class:`twitchio.PartialChatter`, :class:`twitchio.Channel` or :class:`twitchio.ext.commands.Context`. diff --git a/docs/images/commands_arguments_1.png b/docs/images/commands_arguments_1.png deleted file mode 100644 index 6039a57f044574b45917d2a3832bbbf515d1bcd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82741 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 z 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

Q-AmVQB&dyml++>jwVav{_!38 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 =hyb1{4Ma131kgV4$HVU*EymY!p&G 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 T(60daPok-=qxR{ZRmlGVQ0{2! diff --git a/docs/images/commands_arguments_3.png b/docs/images/commands_arguments_3.png deleted file mode 100644 index 2353167ebe522862c3d652027d7966a02e6035d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119032 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

eL^MFze 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ΝQ17mBA^NjtTwI?}u3gKIn}TytI@ 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%0DD%2FhhU^qK^6kRr2xA4gkenW-Q+ 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

tn;51O>{ou zbE{eZP~=r~a;p1nJW;iQR5tB;!|wwJu|A3+m&{J4#SJmUg5&*QS-xdST8QJy60!y) zQWwEYxbAEn4b! z7%1_!xkrq5lB9~AxLqW?&Nsv*5@Z~2>Oj51W^kqAEs}tFx)+Q;82J+&`1kBj#}X)D zF`8%;Fd)^fB*0eySdTr3jquM7KdIv%$O&(YOlWO)oihM z(@A|BnayDe2-W}(*d77VBU8qRQ*!&~HjD;9S_g0YSZN`z^Qz7o>UYG(We(*R#ulje z(?&2~Ztct18$AsGXsNGEtQZc`reN>*zXD)bA7T8BKL(=xEr6vL%iejZ^EA8vwgV53 zjQfn#`rkI6O8H^or0KsC|LMLMC8bz4;mX@*e+#~$U@{1zK>ycGpb9K390Uf527vcM(w7d$?EEt4szT}FQvc0h8_0w zIgJ~fA9wSz|0|WJR$HpXI(K+DUx|*jesp~XN!=;RSM|17vs{j(h!_1r6?W)!LgV;# zTE-I(hq~==H(QE6UeKXiHY<9{TDGBD@PSz(78y1x*0Htcu|agwuj#(@1@(^Nvt%;N zFq%KV!g)oP@9zIcuFe>+sF-&>d->%qO4M@oiA^L7m$A=@7C33`6Z+f3{rP79wu8BY z1$T%T?wX)kGhdK@(e95bO7d8RD_i;ez~n!%XPYDIlqYFsTeOEauwEgWfk^x>Snvl| zzM1S~ig#)Loj~nEF=6t!x>Jyyih`DZE=NLR#~UV-EIF(?jtCBcigo-u#drDKF@p4) zZ(aXZLjI)kZJeTKt>`5aeY-VZJ2jpWNgX=w;m$@FYfh^I@uxq-qKx74M@I;E)!NrB z4^@`)c#%nrr~jH580(i(#eGxJGltb)_O6H{Aq={ z|7O;a@@I+cr~p6voBvwDbOaV;%ra%_(_`nKA#Nys6ytbvnojWd_RWA^^x0t!Oa57; zr?g_($?P5@5r67@G63pq@P%$s{n3>hY)bG@lJK_lpE?q3fNGqQNS*!ZkH0sd8(WH* zXVib{P!UjqU)-SOdi)WQSO=hRXSAapSpS=U{}|NY6c3UjC5R#nZ7{$`URp(}QsQmE F{{hdSvRwcG diff --git a/docs/images/commands_arguments_4.png b/docs/images/commands_arguments_4.png deleted file mode 100644 index 555cde9f61b1d91a42d9e30c74c4a84f6d3beb23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68432 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 diff --git a/docs/images/commands_arguments_5.png b/docs/images/commands_arguments_5.png deleted file mode 100644 index ab0c18daea1ce048f9bf6ba7f68bc95c75b87c1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153976 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 ?OY1_6fVSme$t(;C_Nr(9 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

vcQt^+z_6bnji5DNG`jlxkTK35HNnw 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 R-Ifm?$V;n$OC^o{{|9jgvGo7| diff --git a/docs/images/commands_basic_2.png b/docs/images/commands_basic_2.png deleted file mode 100644 index 1fda7024e4902c2df5d0d3cad0c8c834ac4300e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88965 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%0APpzo?% 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 diff --git a/docs/images/commands_errors_1.png b/docs/images/commands_errors_1.png deleted file mode 100644 index 8fa9f9b19621af3e953073878e50a8c2393cb895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55362 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�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

L)$NjOuLCnf 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

  • alD`6#1@fKn8(aC<8L{5rIMX6Qv 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 E0B3D@YXATM diff --git a/docs/images/commands_parsing_1.png b/docs/images/commands_parsing_1.png deleted file mode 100644 index eb57e8b5dbaaa4cd1953e747fd776906f51b9ccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22050 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
    3j;qf=+1ZZ`j7jTE>J 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 diff --git a/docs/images/commands_parsing_2.png b/docs/images/commands_parsing_2.png deleted file mode 100644 index 9b683f710dbe350025614e1b48f230c301578b40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28831 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 MRn$@_k%Peh3z?aRNB{r; diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index a43dae78..00000000 --- a/docs/index.rst +++ /dev/null @@ -1,122 +0,0 @@ -.. meta:: - :title: TwitchIO Documentation - :description: Documentation for TwitchIO, the asynchronous Python wrapper for Twitch.tv. - :language: en-US - :keywords: twitchio, twitch, python api - :copyright: TwitchIO. 2017 - Present - - -.. raw:: html - - - -
    - -

    - - A fully asynchronous Python IRC, API, EventSub and PubSub library for Twitch. - -

    Featuring:

    -
      -
    • Full asynchronous design.
    • -
    • Covers 100% of the Twitch API.
    • -
    • IRC Commands extension for creating powerful chat bots.
    • -
    • EventSub and PubSub support.
    • -
    • Helper extensions for Music/Sounds and Background Tasks.
    • -
    • Object orientated design with stateful objects.
    • -
    -

    - -

    Getting Started

    -
    - For help with getting started with the library for the first time. - -
      -
    • For help with installing visit: Installing -
    • Your first steps with the library: Quickstart -
    • Frequently asked questions: FAQ -
    - -

    API Reference

    -
    - The API References of TwitchIO. - -
    -
    - TwitchIO Client Reference: - -
    - -
    - TwitchIO Extension API's: - -
    -
    - -

    Getting Help

    -
    - Consider joining the Official Discord server for a fast response to help.
    -

    - - For issues and contributing with the library, visit: GitHub - - -.. rst-class:: index-display-none -.. toctree:: - :maxdepth: 1 - :caption: Getting Started - - installing - quickstart - faq - -.. rst-class:: index-display-none -.. toctree:: - :maxdepth: 1 - :caption: API Reference - - twitchio - reference - -.. rst-class:: index-display-none -.. toctree:: - :maxdepth: 1 - :caption: Extensions API's: - - exts/commands - exts/pubsub - exts/eventsub - exts/routines - exts/sounds - - -.. raw:: html - -

    Changelog

    -
    - Keep upto date with the changelog.

    - -.. rst-class:: index-changelog -.. toctree:: - :maxdepth: 2 - :caption: Changelog - - changelog - - -.. raw:: html - -

    Table of Contents

    -
    - -* :ref:`genindex` -* :ref:`search` diff --git a/docs/installing.rst b/docs/installing.rst deleted file mode 100644 index a307ab96..00000000 --- a/docs/installing.rst +++ /dev/null @@ -1,79 +0,0 @@ -:orphan: - -Installing -============ -TwitchIO 2 requires Python 3.7+. -You can download the latest version of Python `here `_. - - -**Windows:** - -.. code:: sh - - py -3.9 -m pip install -U twitchio - -**Linux:** - -.. code:: sh - - python3.9 -m pip install -U twitchio - - -Debugging ----------- -Make sure you have the latest version of Python installed, or if you prefer, a Python version of 3.7 or greater. - -If you have have any other issues feel free to search for duplicates and then create a new issue on GitHub with as much detail as -possible. Including providing the output of pip, your OS details and Python version. - - -Extras -------- -Twitchio has some extra downloaders available to modify the library. -Due to some outdated binaries on the pypi package index, when using Python 3.11+, you'll want to make use of our custom pypi -index for these extras. You can access this index by doing the following (replace your-extra with the extra you want to use): - -.. code:: sh - - python3 -m pip install -U twitchio[your-extra] --extra-index-url https://pip.twitchio.dev/ - -Or, on windows: - -.. code:: sh - - py -3.11 -m pip install -U twitchio[your-extra] --extra-index-url https://pip.twitchio.dev/ - - -If you do not wish to use our custom index, you can build the wheels yourself by installing cython through pip prior to installing the extra. -Note that you will need C build tools installed to be able to do this. - -Extra: speed -++++++++++++++ -The speed extra will install dependancies built in C that are considerably faster than their pure-python equivalents. -You can install the speed extra by doing: - -.. code:: sh - - python3 -m pip install -U twitchio[speed] --extra-index-url https://pip.twitchio.dev/ - -Or, on windows: - -.. code:: sh - - py -3.11 -m pip install -U twitchio[speed] --extra-index-url https://pip.twitchio.dev/ - -Extra: sounds -+++++++++++++++ -The sounds extra installs extra dependancies for using the sounds ext. -If you wish to use the sounds ext, you will need to install this extra, which you can do by doing the following: - - -.. code:: sh - - python3 -m pip install -U twitchio[sounds] --extra-index-url https://pip.twitchio.dev/ - -Or, on windows: - -.. code:: sh - - py -3.11 -m pip install -U twitchio[sounds] --extra-index-url https://pip.twitchio.dev/ \ No newline at end of file diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 922152e9..00000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/pa.txt b/docs/pa.txt deleted file mode 100644 index 667bee49..00000000 --- a/docs/pa.txt +++ /dev/null @@ -1 +0,0 @@ -pyaudio==0.2.11 diff --git a/docs/quickstart.rst b/docs/quickstart.rst deleted file mode 100644 index b19cb9ab..00000000 --- a/docs/quickstart.rst +++ /dev/null @@ -1,126 +0,0 @@ -:orphan: - -Quickstart -============= -This mini tutorial will serve as an entry point into TwitchIO 2. -After it you should have a small working bot and a basic understanding of TwitchIO. - -If you haven't already installed TwitchIO 2, check out :doc:`installing`. - - -Tokens and Scopes -------------------- -For the purpose of this tutorial we will only be using an OAuth Token with permissions to read and write to chat. -If you require custom scopes, please make sure you select them. - -Visit `Token Generator `_ and select the Bot Chat Token. -After selecting this you can copy your Access Token somewhere safe. - - -Basic Bot ------------ -TwitchIO 2 can be run in multiple different ways, (as a client only, as a bot using extensions, with HTTP requests etc). -Here we will be using the commands extension of TwitchIO to create a Chat Bot. - -.. note:: - - The TwitchIO commands extension has all the functionality of the Client and HTTPClient, plus more. - -.. code:: python - - from twitchio.ext import commands - - - class Bot(commands.Bot): - - def __init__(self): - # Initialise our Bot with our access token, prefix and a list of channels to join on boot... - # prefix can be a callable, which returns a list of strings or a string... - # initial_channels can also be a callable which returns a list of strings... - super().__init__(token='ACCESS_TOKEN', prefix='?', initial_channels=['...']) - - async def event_ready(self): - # Notify us when everything is ready! - # We are logged in and ready to chat and use commands... - print(f'Logged in as | {self.nick}') - print(f'User id is | {self.user_id}') - - @commands.command() - async def hello(self, ctx: commands.Context): - # Here we have a command hello, we can invoke our command with our prefix and command name - # e.g ?hello - # We can also give our commands aliases (different names) to invoke with. - - # Send a hello back! - # Sending a reply back to the channel is easy... Below is an example. - await ctx.send(f'Hello {ctx.author.name}!') - - - bot = Bot() - bot.run() - # bot.run() is blocking and will stop execution of any below code here until stopped or closed. - - -The above example listens to one event, `event_ready`. If we want to listen to other events, -we can simply add them to our Bot class. - -For an exhaustive list of events, visit: `Event Reference `_ - -**Let's add an** `event_message` **which will listen for all messages the bot can see:** - -.. code:: py - - from twitchio.ext import commands - - - class Bot(commands.Bot): - - def __init__(self): - # Initialise our Bot with our access token, prefix and a list of channels to join on boot... - # prefix can be a callable, which returns a list of strings or a string... - # initial_channels can also be a callable which returns a list of strings... - super().__init__(token='ACCESS_TOKEN', prefix='?', initial_channels=['...']) - - async def event_ready(self): - # Notify us when everything is ready! - # We are logged in and ready to chat and use commands... - print(f'Logged in as | {self.nick}') - print(f'User id is | {self.user_id}') - - async def event_message(self, message): - # Messages with echo set to True are messages sent by the bot... - # For now we just want to ignore them... - if message.echo: - return - - # Print the contents of our message to console... - print(message.content) - - # Since we have commands and are overriding the default `event_message` - # We must let the bot know we want to handle and invoke our commands... - await self.handle_commands(message) - - @commands.command() - async def hello(self, ctx: commands.Context): - # Here we have a command hello, we can invoke our command with our prefix and command name - # e.g ?hello - # We can also give our commands aliases (different names) to invoke with. - - # Send a hello back! - # Sending a reply back to the channel is easy... Below is an example. - await ctx.send(f'Hello {ctx.author.name}!') - - - bot = Bot() - bot.run() - # bot.run() is blocking and will stop execution of any below code here until stopped or closed. - - -The above example is similar to our original code, though this time we have added in a common event, `event_message`. -When using `event_message`, as shown above, some things need to be taken into consideration. - -Mainly echo messages and the handling of commands. If you do not handle these appropriately you may have undesired -effects on your bot. - -You should now have a working Twitch Chat Bot that prints messages to console, and responds to the command `?hello`. -If you are stuck, please visit the :doc:`faq` page or `Join our Discord `_. \ No newline at end of file diff --git a/docs/reference.rst b/docs/reference.rst deleted file mode 100644 index 9c70cbb3..00000000 --- a/docs/reference.rst +++ /dev/null @@ -1,477 +0,0 @@ -.. currentmodule:: twitchio - -Dataclass Reference -===================== - -ActiveExtension ------------------- -.. attributetable:: ActiveExtension - -.. autoclass:: ActiveExtension - :members: - :inherited-members: - -AutomodCheckMessage ---------------------- -.. attributetable:: AutomodCheckMessage - -.. autoclass:: AutomodCheckMessage - :members: - :inherited-members: - -AutomodCheckResponse ----------------------- -.. attributetable:: AutomodCheckResponse - -.. autoclass:: AutomodCheckResponse - :members: - :inherited-members: - -Ban ----------- -.. attributetable:: Ban - -.. autoclass:: Ban - :members: - :inherited-members: - -BanEvent ----------- -.. attributetable:: BanEvent - -.. autoclass:: BanEvent - :members: - :inherited-members: - -BitLeaderboardUser --------------------- -.. attributetable:: BitLeaderboardUser - -.. autoclass:: BitLeaderboardUser - :members: - -BitsLeaderboard ------------------- -.. attributetable:: BitsLeaderboard - -.. autoclass:: BitsLeaderboard - :members: - :inherited-members: - -Channel ---------- -.. attributetable:: Channel - -.. autoclass:: Channel - :members: - :inherited-members: - -ChannelEmote ------------- -.. attributetable:: ChannelEmote - -.. autoclass:: ChannelEmote - :members: - :inherited-members: - -ChannelFollowerEvent ---------------------- -.. attributetable:: ChannelFollowerEvent - -.. autoclass:: ChannelFollowerEvent - :members: - :inherited-members: - -ChannelFollowingEvent ---------------------- -.. attributetable:: ChannelFollowingEvent - -.. autoclass:: ChannelFollowingEvent - :members: - :inherited-members: - -ChannelInfo ------------- -.. attributetable:: ChannelInfo - -.. autoclass:: ChannelInfo - :members: - :inherited-members: - -ChannelTeams -------------- -.. attributetable:: ChannelTeams - -.. autoclass:: ChannelTeams - :members: - :inherited-members: - -ChatBadge ----------- -.. attributetable:: ChatBadge - -.. autoclass:: ChatBadge - :members: - :inherited-members: - -ChatBadgeVersions ------------------- -.. attributetable:: ChatBadgeVersions - -.. autoclass:: ChatBadgeVersions - :members: - :inherited-members: - -ChatSettings -------------- -.. attributetable:: ChatSettings - -.. autoclass:: ChatSettings - :members: - :inherited-members: - -Chatter --------- -.. attributetable:: PartialChatter - -.. autoclass:: PartialChatter - :members: - :inherited-members: - -.. attributetable:: Chatter - -.. autoclass:: Chatter - :members: - -ChatterColor -------------- -.. attributetable:: ChatterColor - -.. autoclass:: ChatterColor - :members: - :inherited-members: - -CharityCampaign ----------------- -.. attributetable:: CharityCampaign - -.. autoclass:: CharityCampaign - :members: - :inherited-members: - -.. attributetable:: CharityValues - -.. autoclass:: CharityValues - :members: - :inherited-members: - -CheerEmote ------------- -.. attributetable:: CheerEmote - -.. autoclass:: CheerEmote - :members: - :inherited-members: - -CheerEmoteTier ----------------- -.. attributetable:: CheerEmoteTier - -.. autoclass:: CheerEmoteTier - :members: - :inherited-members: - -Clip ------- -.. attributetable:: Clip - -.. autoclass:: Clip - :members: - :inherited-members: - -ContentClassificationLabel ---------------------------- -.. attributetable:: ContentClassificationLabel - -.. autoclass:: ContentClassificationLabel - :members: - :inherited-members: - -CustomReward --------------- -.. attributetable:: CustomReward - -.. autoclass:: CustomReward - :members: - :inherited-members: - -CustomRewardRedemption ------------------------- -.. attributetable:: CustomRewardRedemption - -.. autoclass:: CustomRewardRedemption - :members: - :inherited-members: - -Extension ------------ -.. attributetable:: Extension - -.. autoclass:: Extension - :members: - :inherited-members: - -ExtensionBuilder ------------------- -.. attributetable:: ExtensionBuilder - -.. autoclass:: ExtensionBuilder - :members: - :inherited-members: - -FollowEvent -------------- -.. attributetable:: FollowEvent - -.. autoclass:: FollowEvent - :members: - :inherited-members: - -Game ------- -.. attributetable:: Game - -.. autoclass:: Game - :members: - :inherited-members: - -GlobalEmote ------------- -.. attributetable:: GlobalEmote - -.. autoclass:: GlobalEmote - :members: - :inherited-members: - -Goal ------- -.. attributetable:: Goal - -.. autoclass:: Goal - :members: - :inherited-members: - -HypeChatData - -.. attributetable:: HypeChatData - -.. autoclass:: HypeChatData - :members: - -HypeTrainContribution ------------------------ -.. attributetable:: HypeTrainContribution - -.. autoclass:: HypeTrainContribution - :members: - :inherited-members: - -HypeTrainEvent ----------------- -.. attributetable:: HypeTrainEvent - -.. autoclass:: HypeTrainEvent - :members: - :inherited-members: - -Marker --------- -.. attributetable:: Marker - -.. autoclass:: Marker - :members: - :inherited-members: - -MaybeActiveExtension ----------------------- -.. attributetable:: MaybeActiveExtension - -.. autoclass:: MaybeActiveExtension - :members: - :inherited-members: - -Message ---------- -.. attributetable:: Message - -.. autoclass:: Message - :members: - :inherited-members: - -ModEvent ----------- -.. attributetable:: ModEvent - -.. autoclass:: ModEvent - :members: - :inherited-members: - -Poll -------------- -.. attributetable:: Poll - -.. autoclass:: Poll - :members: - :inherited-members: - -.. attributetable:: PollChoice - -.. autoclass:: PollChoice - :members: - :inherited-members: - -Predictions -------------- -.. attributetable:: Prediction - -.. autoclass:: Prediction - :members: - :inherited-members: - -.. attributetable:: Predictor - -.. autoclass:: Predictor - :members: - :inherited-members: - -Raid ------ -.. attributetable:: Raid - -.. autoclass:: Raid - :members: - :inherited-members: - -Schedules ----------- -.. attributetable:: Schedule - -.. autoclass:: Schedule - :members: - :inherited-members: - -.. attributetable:: ScheduleSegment - -.. autoclass:: ScheduleSegment - :members: - :inherited-members: - -.. attributetable:: ScheduleCategory - -.. autoclass:: ScheduleCategory - :members: - :inherited-members: - -.. attributetable:: ScheduleVacation - -.. autoclass:: ScheduleVacation - :members: - :inherited-members: - -SearchUser ------------- -.. attributetable:: SearchUser - -.. autoclass:: SearchUser - :members: - -ShieldStatus ------------- -.. attributetable:: ShieldStatus - -.. autoclass:: ShieldStatus - :members: - -Stream ----------- -.. attributetable:: Stream - -.. autoclass:: Stream - :members: - :inherited-members: - -SubscriptionEvent -------------------- -.. attributetable:: SubscriptionEvent - -.. autoclass:: SubscriptionEvent - :members: - :inherited-members: - -Tag ------ -.. attributetable:: Tag - -.. autoclass:: Tag - :members: - :inherited-members: - -Team ----------- -.. attributetable:: Team - -.. autoclass:: Team - :members: - :inherited-members: - -Timeout ----------- -.. attributetable:: Timeout - -.. autoclass:: Timeout - :members: - :inherited-members: - -User ------- -.. attributetable:: PartialUser - -.. autoclass:: PartialUser - :members: - :inherited-members: - -.. attributetable:: User - -.. autoclass:: User - :members: - -UserBan ---------- -.. attributetable:: UserBan - -.. autoclass:: UserBan - :members: - -Video -------- -.. attributetable:: Video - -.. autoclass:: Video - :members: - :inherited-members: - -VideoMarkers --------------- -.. attributetable:: VideoMarkers - -.. autoclass:: VideoMarkers - :members: - :inherited-members: - -WebhookSubscription ---------------------- -.. attributetable:: WebhookSubscription - -.. autoclass:: WebhookSubscription - :members: - :inherited-members: diff --git a/docs/sidebar_logo.png b/docs/sidebar_logo.png deleted file mode 100644 index 7b8416b4bc48c687bb98cefbf45ec23b026d6427..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18877 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 None: - self.loop.create_task(esclient.listen(port=4000)) - try: - await esclient.subscribe_channel_follows_v2(broadcaster=channel_id, moderator=moderator_id) - except twitchio.HTTPException: - pass - - async def event_ready(self): - print("Bot is ready!") - - -bot = Bot() -bot.loop.run_until_complete(bot.__ainit__()) - - -@esbot.event() -async def event_eventsub_notification_followV2(payload: eventsub.ChannelFollowData) -> None: - print("Received event!") - channel = bot.get_channel("channel") - await channel.send(f"{payload.data.user.name} followed woohoo!") - - -bot.run() diff --git a/setup.py b/setup.py deleted file mode 100644 index 3e706895..00000000 --- a/setup.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -import os -import pathlib -import re -from setuptools import setup - - -ROOT = pathlib.Path(__file__).parent -on_rtd = os.getenv("READTHEDOCS") == "True" - -with open("requirements.txt") as f: - requirements = f.read().splitlines() - -if on_rtd: - with open("docs/requirements.txt") as f: - requirements.extend(f.read().splitlines()) - -with open(ROOT / "twitchio" / "__init__.py", encoding="utf-8") as f: - VERSION = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE).group(1) - -readme = "" -with open("README.rst") as f: - readme = f.read() - - -sounds = [ - "yt-dlp>=2022.2.4", - 'pyaudio==0.2.11; platform_system!="Windows"', -] -speed = [ - "ujson>=5.2,<6", - "ciso8601>=2.2,<3", - "cchardet>=2.1,<3" -] -extras_require = {"sounds": sounds, "speed": speed} - -setup( - name="twitchio", - author="TwitchIO", - url="https://github.com/TwitchIO/TwitchIO", - version=VERSION, - packages=[ - "twitchio", - "twitchio.ext.commands", - "twitchio.ext.pubsub", - "twitchio.ext.routines", - "twitchio.ext.eventsub", - "twitchio.ext.sounds", - ], - license="MIT", - description="An asynchronous Python IRC and API wrapper for Twitch.", - long_description=readme, - include_package_data=True, - install_requires=requirements, - extras_require=extras_require, - classifiers=[ - "License :: OSI Approved :: MIT License", - "Intended Audience :: Developers", - "Natural Language :: English", - "Operating System :: OS Independent", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Topic :: Internet", - "Topic :: Software Development :: Libraries", - "Topic :: Software Development :: Libraries :: Python Modules", - "Topic :: Utilities", - ], -) diff --git a/twitchio/abcs.py b/twitchio/abcs.py deleted file mode 100644 index 054ce723..00000000 --- a/twitchio/abcs.py +++ /dev/null @@ -1,122 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -import abc -import time - -from .cooldowns import RateBucket -from .errors import * - - -class IRCLimiterMapping: - def __init__(self): - self.buckets = {} - - def get_bucket(self, channel: str, method: str) -> RateBucket: - try: - bucket = self.buckets[channel] - except KeyError: - bucket = RateBucket(method=method) - self.buckets[channel] = bucket - if bucket.method != method: - bucket.method = method - bucket.limit = bucket.MODLIMIT if method == "mod" else bucket.IRCLIMIT - self.buckets[channel] = bucket - return bucket - - -limiter = IRCLimiterMapping() - - -class Messageable(abc.ABC): - __slots__ = () - - @abc.abstractmethod - def _fetch_channel(self): - raise NotImplementedError - - @abc.abstractmethod - def _fetch_websocket(self): - raise NotImplementedError - - @abc.abstractmethod - def _fetch_message(self): - raise NotImplementedError - - @abc.abstractmethod - def _bot_is_mod(self): - raise NotImplementedError - - def check_bucket(self, channel): - mod = self._bot_is_mod() - - if mod: - bucket = limiter.get_bucket(channel=channel, method="mod") - else: - bucket = limiter.get_bucket(channel=channel, method="irc") - now = time.time() - bucket.update() - - if bucket.limited: - raise IRCCooldownError( - f"IRC Message rate limit reached for channel <{channel}>." - f" Please try again in {bucket._reset - now:.2f}s" - ) - - def check_content(self, content: str): - if len(content) > 500: - raise InvalidContent("Content must not exceed 500 characters.") - - async def send(self, content: str): - """|coro| - - - Send a message to the destination associated with the dataclass. - - Destination will either be a channel or user. - - Parameters - ------------ - content: str - The content you wish to send as a message. The content must be a string. - - Raises - -------- - InvalidContent - Invalid content. - """ - entity = self._fetch_channel() - ws = self._fetch_websocket() - - self.check_content(content) - self.check_bucket(channel=entity.name) - - try: - name = entity.channel.name - except AttributeError: - name = entity.name - if entity.__messageable_channel__: - await ws.send(f"PRIVMSG #{name} :{content}\r\n") - else: - await ws.send(f"PRIVMSG #jtv :/w {entity.name} {content}\r\n") diff --git a/twitchio/backoff.py b/twitchio/backoff.py deleted file mode 100644 index 7634b486..00000000 --- a/twitchio/backoff.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -The MIT License (MIT) - -Copyright (c) 2015-2020 Rapptz - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -import time -import random - - -class ExponentialBackoff: - """An implementation of the exponential backoff algorithm - - Provides a convenient interface to implement an exponential backoff - for reconnecting or retrying transmissions in a distributed network. - - Once instantiated, the delay method will return the next interval to - wait for when retrying a connection or transmission. The maximum - delay increases exponentially with each retry up to a maximum of - 2^10 * base, and is reset if no more attempts are needed in a period - of 2^11 * base seconds. - - Parameters - ---------- - base: :class:`int` - The base delay in seconds. The first retry-delay will be up to - this many seconds. - integral: :class:`bool` - Set to True if whole periods of base is desirable, otherwise any - number in between may be returned. - """ - - def __init__(self, base=1, *, integral=False): - self._base = base - - self._exp = 0 - self._max = 10 - self._reset_time = base * 2**11 - self._last_invocation = time.monotonic() - - # Use our own random instance to avoid messing with global one - rand = random.Random() - rand.seed() - - self._randfunc = rand.randrange if integral else rand.uniform - - def delay(self): - """Compute the next delay - - Returns the next delay to wait according to the exponential - backoff algorithm. This is a value between 0 and base * 2^exp - where exponent starts off at 1 and is incremented at every - invocation of this method up to a maximum of 10. - - If a period of more than base * 2^11 has passed since the last - retry, the exponent is reset to 1. - """ - invocation = time.monotonic() - interval = invocation - self._last_invocation - self._last_invocation = invocation - - if interval > self._reset_time: - self._exp = 0 - - self._exp = min(self._exp + 1, self._max) - return self._randfunc(0, self._base * 2**self._exp) diff --git a/twitchio/cache.py b/twitchio/cache.py deleted file mode 100644 index 459c68e9..00000000 --- a/twitchio/cache.py +++ /dev/null @@ -1,102 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -import time -import functools -from typing import Hashable - - -__all__ = ("TimedCache", "user_cache", "id_cache") - - -class TimedCache(dict): - def __init__(self, seconds: int): - self.__timeout = seconds - super().__init__() - - def _verify_cache(self): - now = time.monotonic() - to_remove = [key for (key, (_, exp)) in self.items() if now > (exp + self.__timeout)] - for k in to_remove: - del self[k] - - def __getitem__(self, key): - self._verify_cache() - return super().__getitem__(key)[0] - - def __setitem__(self, key, value): - super().__setitem__(key, (value, time.monotonic())) - - def __contains__(self, key): - self._verify_cache() - return {a: b[0] for a, b in self.items()}.__contains__(key) - - -def user_cache(timer=300): - cache = TimedCache(timer) - - def wraps(func): - @functools.wraps(func) - async def _wraps(cls, names: list = None, ids: list = None, force=False, token=None): - if not force: - existing = [] - if names: - existing.extend([cache[x] for x in names if x in cache]) - - if ids: - existing.extend([cache[x] for x in ids if x in cache]) - - if len(existing) == (len(names) if names else 0) + (len(ids) if ids else 0): - return existing - - values = await func(cls, names=names, ids=ids, token=token) - for v in values: - cache[v.id] = v - cache[v.name] = v - - return values - - return _wraps - - return wraps - - -def id_cache(timer=300): - cache = TimedCache(timer) - - def wraps(func): - @functools.wraps(func) - def _wraps(cls, id: Hashable): - if id in cache: - return cache[id] - - value = func(cls, id) - if value is not None: - cache[id] = value - - return value - - return _wraps - - return wraps diff --git a/twitchio/channel.py b/twitchio/channel.py deleted file mode 100644 index 75b61379..00000000 --- a/twitchio/channel.py +++ /dev/null @@ -1,173 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -import datetime -from typing import Optional, Union, Set, TYPE_CHECKING - -from .abcs import Messageable -from .chatter import Chatter, PartialChatter -from .models import BitsLeaderboard - -if TYPE_CHECKING: - from .websocket import WSConnection - from .user import User - - -__all__ = ("Channel",) - - -class Channel(Messageable): - __slots__ = ("_name", "_ws", "_message") - - __messageable_channel__ = True - - def __init__(self, name: str, websocket: "WSConnection"): - self._name = name - self._ws = websocket - - def __eq__(self, other): - return other.name == self._name - - def __hash__(self): - return hash(self.name) - - def __repr__(self): - return f"" - - def _fetch_channel(self): - return self # Abstract method - - def _fetch_websocket(self): - return self._ws # Abstract method - - def _fetch_message(self): - return self._message # Abstract method - - def _bot_is_mod(self): - try: - cache = self._ws._cache[self.name] # noqa - except KeyError: - return False - - for user in cache: - if user.name == self._ws.nick: - try: - mod = user.is_mod - except AttributeError: - return False - - return mod - - @property - def name(self) -> str: - """The channel name.""" - return self._name - - @property - def chatters(self) -> Optional[Set[Union[Chatter, PartialChatter]]]: - """The channels current chatters.""" - try: - chatters = self._ws._cache[self._name] # noqa - except KeyError: - return None - - return chatters - - def get_chatter(self, name: str) -> Optional[Union[Chatter, PartialChatter]]: - """Retrieve a chatter from the channels user cache. - - Parameters - ----------- - name: str - The chatter's name to try and retrieve. - - Returns - -------- - Union[:class:`twitchio.chatter.Chatter`, :class:`twitchio.chatter.PartialChatter`] - Could be a :class:`twitchio.user.PartialChatter` depending on how the user joined the channel. - Returns None if no user was found. - """ - name = name.lower() - - try: - cache = self._ws._cache[self._name] # noqa - for chatter in cache: - if chatter.name == name: - return chatter - - return None - except KeyError: - return None - - async def user(self, force=False) -> "User": - """|coro| - - Fetches the User from the api. - - Parameters - ----------- - force: :class:`bool` - Whether to force a fetch from the api, or try and pull from the cache. Defaults to `False` - - Returns - -------- - :class:`twitchio.User` the user associated with the channel - """ - return (await self._ws._client.fetch_users(names=[self._name], force=force))[0] - - async def fetch_bits_leaderboard( - self, token: str, period: str = "all", user_id: int = None, started_at: datetime.datetime = None - ) -> BitsLeaderboard: - """|coro| - - Fetches the bits leaderboard for the channel. This requires an OAuth token with the bits:read scope. - - Parameters - ----------- - token: :class:`str` - the OAuth token with the bits:read scope - period: Optional[:class:`str`] - one of `day`, `week`, `month`, `year`, or `all`, defaults to `all` - started_at: Optional[:class:`datetime.datetime`] - the timestamp to start the period at. This is ignored if the period is `all` - user_id: Optional[:class:`int`] - the id of the user to fetch for - """ - data = await self._ws._client._http.get_bits_board(token, period, user_id, started_at) - return BitsLeaderboard(self._ws._client._http, data) - - async def whisper(self, content: str): - """|coro| - - Whispers the user behind the channel. This will not work if the channel is the same as the one you are sending the message from. - - .. warning: - Whispers are very unreliable on twitch. If you do not receive a whisper, this is probably twitch's fault, not the library's. - - Parameters - ----------- - content: :class:`str` - The content to send to the user - """ - await self.send(f"/w {self.name} {content}") diff --git a/twitchio/chatter.py b/twitchio/chatter.py deleted file mode 100644 index 32c3b9e2..00000000 --- a/twitchio/chatter.py +++ /dev/null @@ -1,259 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from typing import Optional, TYPE_CHECKING, Dict - -from .abcs import Messageable -from .enums import PredictionEnum - -if TYPE_CHECKING: - from .user import User - from .websocket import WSConnection - - -__all__ = ("PartialChatter", "Chatter") - - -class PartialChatter(Messageable): - __messageable_channel__ = False - - def __init__(self, websocket, **kwargs): - self._name = kwargs.get("name") - self._ws = websocket - self._channel = kwargs.get("channel", self._name) - self._message = kwargs.get("message") - - def __repr__(self): - return f"" - - def __eq__(self, other): - return other.name == self.name and other.channel.name == other.channel.name - - def __hash__(self): - return hash(self.name + self.channel.name) - - async def user(self) -> "User": - """|coro| - - Fetches a :class:`twitchio.User` object based off the chatters channel name - - Returns - -------- - :class:`twitchio.User` - """ - return (await self._ws._client.fetch_users(names=[self.name]))[0] - - @property - def name(self): - """The users name""" - return self._name - - @property - def channel(self): - """The channel associated with the user.""" - return self._channel - - def _fetch_channel(self): - return self # Abstract method - - def _fetch_websocket(self): - return self._ws # Abstract method - - def _fetch_message(self): - return self._message # Abstract method - - def _bot_is_mod(self): - return False - - -class Chatter(PartialChatter): - __slots__ = ( - "_name", - "_channel", - "_tags", - "_badges", - "_cached_badges", - "_ws", - "_id", - "_turbo", - "_sub", - "_mod", - "_display_name", - "_colour", - ) - - __messageable_channel__ = False - - def __init__(self, websocket: "WSConnection", **kwargs): - super(Chatter, self).__init__(websocket, **kwargs) - self._tags = kwargs.get("tags", None) - self._ws = websocket - - self._cached_badges: Optional[Dict[str, str]] = None - - if not self._tags: - self._id = None - self._badges = None - self._turbo = None - self._sub = None - self._mod = None - self._display_name = None - self._colour = None - self._vip = None - return - - self._id = self._tags.get("user-id") - self._badges = self._tags.get("badges") - self._turbo = self._tags.get("turbo") - self._sub = int(self._tags["subscriber"]) - self._mod = int(self._tags["mod"]) - self._display_name = self._tags["display-name"] - self._colour = self._tags["color"] - self._vip = int(self._tags.get("vip", 0)) - - if self._badges: - self._cached_badges = dict([badge.split("/") for badge in self._badges.split(",")]) - - def __repr__(self): - return f"" - - def _bot_is_mod(self): - cache = self._ws._cache[self._channel.name] # noqa - for user in cache: - if user.name == self._ws.nick: - try: - mod = user.is_mod - except AttributeError: - return False - - return mod - - @property - def name(self) -> str: - """The users name. This may be formatted differently than display name.""" - return self._name or (self.display_name and self.display_name.lower()) - - @property - def badges(self) -> dict: - """The users badges.""" - return self._cached_badges.copy() if self._cached_badges else {} - - @property - def display_name(self) -> Optional[str]: - """The user's display name.""" - return self._display_name - - @property - def id(self) -> Optional[str]: - """The user's id.""" - return self._id - - @property - def mention(self) -> str: - """Mentions the users display name by prefixing it with '@'""" - return f"@{self._display_name}" - - @property - def colour(self) -> str: - """The users colour. Alias to color.""" - return self._colour - - @property - def color(self) -> str: - """The users color.""" - return self.colour - - @property - def is_broadcaster(self) -> bool: - """A boolean indicating whether the User is the broadcaster of the current channel.""" - - return "broadcaster" in self.badges - - @property - def is_mod(self) -> bool: - """A boolean indicating whether the User is a moderator of the current channel.""" - return True if self._mod == 1 else self.channel.name == self.name.lower() - - @property - def is_vip(self) -> bool: - """A boolean indicating whether the User is a VIP of the current channel.""" - return bool(self._vip) - - @property - def is_turbo(self) -> Optional[bool]: - """A boolean indicating whether the User is Turbo. - - Could be None if no Tags were received. - """ - return self._turbo - - @property - def is_subscriber(self) -> bool: - """A boolean indicating whether the User is a subscriber of the current channel. - - .. note:: - - changed in 2.1.0: return value is no longer optional. founders will now appear as subscribers - """ - return bool(self._sub) or "founder" in self.badges - - @property - def prediction(self) -> Optional[PredictionEnum]: - """ - The users current prediction, if one exists. - - Returns - -------- - Optional[:class:`twitchio.enums.PredictionEnum`] - """ - if "blue-1" in self.badges: - return PredictionEnum("blue-1") - - elif "pink-2" in self.badges: - return PredictionEnum("pink-2") - - return None - - -class WhisperChatter(PartialChatter): - __messageable_channel__ = False - - def __init__(self, websocket: "WSConnection", **kwargs): - super().__init__(websocket, **kwargs) - - def __repr__(self): - return f"" - - @property - def channel(self): - return None - - def _fetch_channel(self): - return self # Abstract method - - def _fetch_websocket(self): - return self._ws # Abstract method - - def _bot_is_mod(self): - return False diff --git a/twitchio/client.py b/twitchio/client.py deleted file mode 100644 index 97460d06..00000000 --- a/twitchio/client.py +++ /dev/null @@ -1,1128 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -import asyncio -import inspect -import warnings -import logging -import traceback -import sys -from typing import Union, Callable, List, Optional, Tuple, Any, Coroutine, Dict -from typing_extensions import Literal - -from twitchio.errors import HTTPException -from . import models -from .websocket import WSConnection -from .http import TwitchHTTP -from .channel import Channel -from .message import Message -from .user import User, PartialUser, SearchUser -from .cache import user_cache, id_cache - -__all__ = ("Client",) - -logger = logging.getLogger("twitchio.client") - - -class Client: - """TwitchIO Client object that is used to interact with the Twitch API and connect to Twitch IRC over websocket. - - Parameters - ------------ - token: :class:`str` - An OAuth Access Token to login with on IRC and interact with the API. - client_secret: Optional[:class:`str`] - An optional application Client Secret used to generate Access Tokens automatically. - initial_channels: Optional[Union[:class:`list`, :class:`tuple`, Callable]] - An optional list, tuple or callable which contains channel names to connect to on startup. - If this is a callable, it must return a list or tuple. - loop: Optional[:class:`asyncio.AbstractEventLoop`] - The event loop the client will use to run. - heartbeat: Optional[float] - An optional float in seconds to send a PING message to the server. Defaults to 30.0. - retain_cache: Optional[bool] - An optional bool that will retain the cache if PART is received from websocket when True. - It will still remove from cache if part_channels is manually called. Defaults to True. - - Attributes - ------------ - loop: :class:`asyncio.AbstractEventLoop` - The event loop the Client uses. - """ - - def __init__( - self, - token: str, - *, - client_secret: str = None, - initial_channels: Union[list, tuple, Callable] = None, - loop: asyncio.AbstractEventLoop = None, - heartbeat: Optional[float] = 30.0, - retain_cache: Optional[bool] = True, - ): - self.loop: asyncio.AbstractEventLoop = loop or asyncio.get_event_loop() - self._heartbeat = heartbeat - - token = token.replace("oauth:", "") - - self._http = TwitchHTTP(self, api_token=token, client_secret=client_secret) - self._connection = WSConnection( - client=self, - token=token, - loop=self.loop, - initial_channels=initial_channels, - heartbeat=heartbeat, - retain_cache=retain_cache, - ) - - self._events = {} - self._waiting: List[Tuple[str, Callable[[...], bool], asyncio.Future]] = [] - self.registered_callbacks: Dict[Callable, str] = {} - self._closing: Optional[asyncio.Event] = None - - @classmethod - def from_client_credentials( - cls, - client_id: str, - client_secret: str, - *, - loop: asyncio.AbstractEventLoop = None, - heartbeat: Optional[float] = 30.0, - ) -> "Client": - """ - creates a client application token from your client credentials. - - .. warning: - - this is not suitable for logging in to IRC. - - .. note: - - This classmethod skips :meth:`~.__init__` - - Parameters - ------------ - client_id: :class:`str` - - client_secret: :class:`str` - An application Client Secret used to generate Access Tokens automatically. - loop: Optional[:class:`asyncio.AbstractEventLoop`] - The event loop the client will use to run. - - Returns - -------- - A new :class:`Client` instance - """ - self = cls.__new__(cls) - self.loop = loop or asyncio.get_event_loop() - self._http = TwitchHTTP(self, client_id=client_id, client_secret=client_secret) - self._heartbeat = heartbeat - self._connection = WSConnection( - client=self, - loop=self.loop, - initial_channels=None, - heartbeat=self._heartbeat, - ) # The only reason we're even creating this is to avoid attribute errors - self._events = {} - self._waiting = [] - self.registered_callbacks = {} - return self - - def run(self): - """ - A blocking function that starts the asyncio event loop, - connects to the twitch IRC server, and cleans up when done. - """ - try: - task = self.loop.create_task(self.connect()) - self.loop.run_until_complete(task) # this'll raise if the connect fails - self.loop.run_forever() - except KeyboardInterrupt: - pass - finally: - if not self._closing.is_set(): - self.loop.run_until_complete(self.close()) - - self.loop.close() - - async def start(self): - """|coro| - - Connects to the twitch IRC server, and cleanly disconnects when done. - """ - if self.loop is not asyncio.get_running_loop(): - raise RuntimeError( - f"Attempted to start a {self.__class__.__name__} instance on a different loop " - f"than the one it was initialized with." - ) - try: - await self.connect() - await self._closing.wait() - finally: - if not self._closing.is_set(): - await self.close() - - async def connect(self): - """|coro| - - Connects to the twitch IRC server - """ - self._closing = asyncio.Event() - await self._connection._connect() - - async def close(self): - """|coro| - - Cleanly disconnects from the twitch IRC server - """ - self._closing.set() - await self._connection._close() - - def run_event(self, event_name, *args): - name = f"event_{event_name}" - logger.debug(f"dispatching event {event_name}") - - async def wrapped(func): - try: - await func(*args) - except Exception as e: - if name == "event_error": - # don't enter a dispatch loop! - raise - - self.run_event("error", e) - - inner_cb = getattr(self, name, None) - if inner_cb is not None: - if inspect.iscoroutinefunction(inner_cb): - self.loop.create_task(wrapped(inner_cb)) - else: - warnings.warn( - f"event '{name}' callback is not a coroutine", - category=RuntimeWarning, - ) - - if name in self._events: - for event in self._events[name]: - self.loop.create_task(wrapped(event)) - - for e, check, future in self._waiting: - if e == event_name: - if check(*args): - future.set_result(args) - if future.done(): - self._waiting.remove((e, check, future)) - - def add_event(self, callback: Callable, name: str = None) -> None: - try: - func = callback.func - except AttributeError: - func = callback - - if not inspect.iscoroutine(func) and not inspect.iscoroutinefunction(func): - raise ValueError("Event callback must be a coroutine") - - event_name = name or callback.__name__ - self.registered_callbacks[callback] = event_name - - if event_name in self._events: - self._events[event_name].append(callback) - - else: - self._events[event_name] = [callback] - - def remove_event(self, callback: Callable) -> bool: - event_name = self.registered_callbacks.get(callback) - - if event_name is None: - raise ValueError("Event callback is not a registered event") - - if callback in self._events[event_name]: - self._events[event_name].remove(callback) - return True - - return False - - def event(self, name: str = None) -> Callable: - def decorator(func: Callable) -> Callable: - self.add_event(func, name) - return func - - return decorator - - async def wait_for( - self, - event: str, - predicate: Callable[[], bool] = lambda *a: True, - *, - timeout=60.0, - ) -> Tuple[Any]: - """|coro| - - - Waits for an event to be dispatched, then returns the events data - - Parameters - ----------- - event: :class:`str` - The event to wait for. Do not include the `event_` prefix - predicate: Callable[[...], bool] - A check that is fired when the desired event is dispatched. if the check returns false, - the waiting will continue until the timeout. - timeout: :class:`int` - How long to wait before timing out and raising an error. - - Returns - -------- - The arguments passed to the event. - """ - fut = self.loop.create_future() - tup = (event, predicate, fut) - self._waiting.append(tup) - values = await asyncio.wait_for(fut, timeout) - return values - - def wait_for_ready(self) -> Coroutine[Any, Any, bool]: - """|coro| - - Waits for the underlying connection to finish startup - - Returns - -------- - :class:`bool` The state of the underlying flag. This will always be ``True`` - """ - return self._connection.is_ready.wait() - - @id_cache() - def get_channel(self, name: str) -> Optional[Channel]: - """Retrieve a channel from the cache. - - Parameters - ----------- - name: str - The channel name to retrieve from cache. Returns None if no channel was found. - - Returns - -------- - :class:`.Channel` - """ - name = name.lower() - - if name in self._connection._cache: - # Basically the cache doesn't store channels naturally, instead it stores a channel key - # With the associated users as a set. - # We create a Channel here and return it only if the cache has that channel key. - - return Channel(name=name, websocket=self._connection) - - async def part_channels(self, channels: Union[List[str], Tuple[str]]): - """|coro| - - Part the specified channels. - - Parameters - ------------ - channels: Union[List[str], Tuple[str]] - The channels in either a list or tuple form to part. - """ - await self._connection.part_channels(*channels) - - async def join_channels(self, channels: Union[List[str], Tuple[str]]): - """|coro| - - Join the specified channels. - - Parameters - ------------ - channels: Union[List[str], Tuple[str]] - The channels in either a list or tuple form to join. - """ - await self._connection.join_channels(*channels) - - @property - def connected_channels(self) -> List[Channel]: - """A list of currently connected :class:`.Channel`""" - return [self.get_channel(x) for x in self._connection._cache.keys()] - - @property - def events(self): - """A mapping of events name to coroutine.""" - return self._events - - @property - def nick(self): - """The IRC bots nick.""" - return self._http.nick or self._connection.nick - - @property - def user_id(self): - """The IRC bot user id.""" - return self._http.user_id or self._connection.user_id - - def create_user(self, user_id: int, user_name: str) -> PartialUser: - """ - A helper method to create a :class:`twitchio.PartialUser` from a user id and user name. - - Parameters - ----------- - user_id: :class:`int` - The id of the user - user_name: :class:`str` - The name of the user - - Returns - -------- - :class:`twitchio.PartialUser` - """ - return PartialUser(self._http, user_id, user_name) - - @user_cache() - async def fetch_users( - self, - names: List[str] = None, - ids: List[int] = None, - token: str = None, - force=False, - ) -> List[User]: - """|coro| - - Fetches users from the helix API - - Parameters - ----------- - names: Optional[List[:class:`str`]] - usernames of people to fetch - ids: Optional[List[:class:`str`]] - ids of people to fetch - token: Optional[:class:`str`] - An optional OAuth token to use instead of the bot OAuth token - force: :class:`bool` - whether to force a fetch from the api, or check the cache first. Defaults to False - - Returns - -------- - List[:class:`twitchio.User`] - """ - # the forced argument doesnt actually get used here, it gets used by the cache wrapper. - # But we'll include it in the args here so that sphinx catches it - assert names or ids - data = await self._http.get_users(ids, names, token=token) - return [User(self._http, x) for x in data] - - async def fetch_clips(self, ids: List[str]): - """|coro| - - Fetches clips by clip id. - To fetch clips by user id, use :meth:`twitchio.PartialUser.fetch_clips` - - Parameters - ----------- - ids: List[:class:`str`] - A list of clip ids - - Returns - -------- - List[:class:`twitchio.Clip`] - """ - data = await self._http.get_clips(ids=ids) - return [models.Clip(self._http, d) for d in data] - - async def fetch_channel(self, broadcaster: str, token: Optional[str] = None): - """|coro| - - Retrieve channel information from the API. - - .. note:: - This will be deprecated in 3.0. It's recommended to use :func:`~fetch_channels` instead. - - Parameters - ----------- - broadcaster: str - The channel name or ID to request from API. Returns empty dict if no channel was found. - token: Optional[:class:`str`] - An optional OAuth token to use instead of the bot OAuth token. - - Returns - -------- - :class:`twitchio.ChannelInfo` - """ - - if not broadcaster.isdigit(): - get_id = await self.fetch_users(names=[broadcaster.lower()]) - if not get_id: - raise IndexError("Invalid channel name.") - broadcaster = str(get_id[0].id) - try: - data = await self._http.get_channels(broadcaster_id=broadcaster, token=token) - - from .models import ChannelInfo - - return ChannelInfo(self._http, data=data[0]) - - except HTTPException: - raise HTTPException("Incorrect channel ID.") - - async def fetch_channels(self, broadcaster_ids: List[int], token: Optional[str] = None): - """|coro| - - Retrieve information for up to 100 channels from the API. - - Parameters - ----------- - broadcaster_ids: List[:class:`int`] - The channel ids to request from API. - token: Optional[:class:`str`] - An optional OAuth token to use instead of the bot OAuth token - - Returns - -------- - List[:class:`twitchio.ChannelInfo`] - """ - from .models import ChannelInfo - - data = await self._http.get_channels_new(broadcaster_ids=broadcaster_ids, token=token) - return [ChannelInfo(self._http, data=d) for d in data] - - async def fetch_videos( - self, - ids: List[int] = None, - game_id: int = None, - user_id: int = None, - period=None, - sort=None, - type=None, - language=None, - ): - """|coro| - - Fetches videos by id, game id, or user id - - Parameters - ----------- - ids: Optional[List[:class:`int`]] - A list of video ids - game_id: Optional[:class:`int`] - A game to fetch videos from - user_id: Optional[:class:`int`] - A user to fetch videos from. See :meth:`twitchio.PartialUser.fetch_videos` - period: Optional[:class:`str`] - The period for which to fetch videos. Valid values are `all`, `day`, `week`, `month`. Defaults to `all`. - Cannot be used when video id(s) are passed - sort: :class:`str` - Sort orders of the videos. Valid values are `time`, `trending`, `views`, Defaults to `time`. - Cannot be used when video id(s) are passed - type: Optional[:class:`str`] - Type of the videos to fetch. Valid values are `upload`, `archive`, `highlight`. Defaults to `all`. - Cannot be used when video id(s) are passed - language: Optional[:class:`str`] - Language of the videos to fetch. Must be an `ISO-639-1 `_ two letter code. - Cannot be used when video id(s) are passed - - Returns - -------- - List[:class:`twitchio.Video`] - """ - from .models import Video - - data = await self._http.get_videos( - ids, - user_id=user_id, - game_id=game_id, - period=period, - sort=sort, - type=type, - language=language, - ) - return [Video(self._http, x) for x in data] - - async def fetch_cheermotes(self, user_id: int = None): - """|coro| - - - Fetches cheermotes from the twitch API - - Parameters - ----------- - user_id: Optional[:class:`int`] - The channel id to fetch from. - - Returns - -------- - List[:class:`twitchio.CheerEmote`] - """ - data = await self._http.get_cheermotes(str(user_id) if user_id else None) - return [models.CheerEmote(self._http, x) for x in data] - - async def fetch_global_emotes(self): - """|coro| - - Fetches global emotes from the twitch API - - Returns - -------- - List[:class:`twitchio.GlobalEmote`] - """ - from .models import GlobalEmote - - data = await self._http.get_global_emotes() - return [GlobalEmote(self._http, x) for x in data] - - async def fetch_top_games(self) -> List[models.Game]: - """|coro| - - Fetches the top games from the api - - Returns - -------- - List[:class:`twitchio.Game`] - """ - data = await self._http.get_top_games() - return [models.Game(d) for d in data] - - async def fetch_games( - self, ids: Optional[List[int]] = None, names: Optional[List[str]] = None, igdb_ids: Optional[List[int]] = None - ) -> List[models.Game]: - """|coro| - - Fetches games by id or name. - At least one id or name must be provided - - Parameters - ----------- - ids: Optional[List[:class:`int`]] - An optional list of game ids - names: Optional[List[:class:`str`]] - An optional list of game names - igdb_ids: Optional[List[:class:`int`]] - An optional list of IGDB game ids - - Returns - -------- - List[:class:`twitchio.Game`] - """ - - data = await self._http.get_games(ids, names, igdb_ids) - return [models.Game(d) for d in data] - - async def fetch_tags(self, ids: Optional[List[str]] = None): - """|coro| - - Fetches stream tags. - - Parameters - ----------- - ids: Optional[List[:class:`str`]] - The ids of the tags to fetch - - Returns - -------- - List[:class:`twitchio.Tag`] - """ - data = await self._http.get_stream_tags(ids) - return [models.Tag(x) for x in data] - - async def fetch_streams( - self, - user_ids: Optional[List[int]] = None, - game_ids: Optional[List[int]] = None, - user_logins: Optional[List[str]] = None, - languages: Optional[List[str]] = None, - token: Optional[str] = None, - type: Literal["all", "live"] = "all", - ): - """|coro| - - Fetches live streams from the helix API - - Parameters - ----------- - user_ids: Optional[List[:class:`int`]] - user ids of people whose streams to fetch - game_ids: Optional[List[:class:`int`]] - game ids of streams to fetch - user_logins: Optional[List[:class:`str`]] - user login names of people whose streams to fetch - languages: Optional[List[:class:`str`]] - language for the stream(s). ISO 639-1 or two letter code for supported stream language - token: Optional[:class:`str`] - An optional OAuth token to use instead of the bot OAuth token - type: Literal["all", "live"] - One of ``"all"`` or ``"live"``. Defaults to ``"all"``. Specifies what type of stream to fetch. - - Returns - -------- - List[:class:`twitchio.Stream`] - """ - from .models import Stream - - data = await self._http.get_streams( - game_ids=game_ids, - user_ids=user_ids, - user_logins=user_logins, - languages=languages, - type_=type, - token=token, - ) - return [Stream(self._http, x) for x in data] - - async def fetch_teams( - self, - team_name: Optional[str] = None, - team_id: Optional[str] = None, - ): - """|coro| - - Fetches information for a specific Twitch Team. - - Parameters - ----------- - name: Optional[:class:`str`] - Team name to fetch - id: Optional[:class:`str`] - Team id to fetch - - Returns - -------- - List[:class:`twitchio.Team`] - """ - from .models import Team - - assert team_name or team_id - data = await self._http.get_teams( - team_name=team_name, - team_id=team_id, - ) - - return Team(self._http, data[0]) - - async def search_categories(self, query: str): - """|coro| - - Searches twitches categories - - Parameters - ----------- - query: :class:`str` - The query to search for - - Returns - -------- - List[:class:`twitchio.Game`] - """ - data = await self._http.get_search_categories(query) - return [models.Game(x) for x in data] - - async def search_channels(self, query: str, *, live_only=False): - """|coro| - - Searches channels for the given query - - Parameters - ----------- - query: :class:`str` - The query to search for - live_only: :class:`bool` - Only search live channels. Defaults to False - - Returns - -------- - List[:class:`twitchio.SearchUser`] - """ - data = await self._http.get_search_channels(query, live=live_only) - return [SearchUser(self._http, x) for x in data] - - async def delete_videos(self, token: str, ids: List[int]) -> List[int]: - """|coro| - - Delete videos from the api. Returns the video ids that were successfully deleted. - - Parameters - ----------- - token: :class:`str` - An oauth token with the ``channel:manage:videos`` scope - ids: List[:class:`int`] - A list of video ids from the channel of the oauth token to delete - - Returns - -------- - List[:class:`int`] - """ - resp = [] - for chunk in [ids[x : x + 3] for x in range(0, len(ids), 3)]: - resp.append(await self._http.delete_videos(token, chunk)) - - return resp - - async def fetch_chatters_colors(self, user_ids: List[int], token: Optional[str] = None): - """|coro| - - Fetches the color of a chatter. - - Parameters - ----------- - user_ids: List[:class:`int`] - List of user ids to fetch the colors for - token: Optional[:class:`str`] - An optional user oauth token - - Returns - -------- - List[:class:`twitchio.ChatterColor`] - """ - data = await self._http.get_user_chat_color(user_ids, token) - return [models.ChatterColor(self._http, x) for x in data] - - async def update_chatter_color(self, token: str, user_id: int, color: str): - """|coro| - - Updates the color of the specified user in the specified channel/broadcaster's chat. - - Parameters - ----------- - token: :class:`str` - An oauth token with the ``user:manage:chat_color`` scope. - user_id: :class:`int` - The ID of the user whose color is being updated, this must match the user ID in the token. - color: :class:`str` - Turbo and Prime users may specify a named color or a Hex color code like #9146FF. - Please see the Twitch documentation for more information. - - Returns - -------- - None - """ - await self._http.put_user_chat_color(token=token, user_id=str(user_id), color=color) - - async def fetch_global_chat_badges(self): - """|coro| - - Fetches Twitch's list of chat badges, which users may use in any channel's chat room. - - Returns - -------- - List[:class:`twitchio.ChatBadge`] - """ - - data = await self._http.get_global_chat_badges() - return [models.ChatBadge(x) for x in data] - - async def fetch_content_classification_labels(self, locale: Optional[str] = None): - """|coro| - - Fetches information about Twitch content classification labels. - - Parameters - ----------- - locale: Optional[:class:`str`] - Locale for the Content Classification Labels. - You may specify a maximum of 1 locale. Default: “en-US” - - Returns - -------- - List[:class:`twitchio.ContentClassificationLabel`] - """ - locale = "en-US" if locale is None else locale - data = await self._http.get_content_classification_labels(locale) - return [models.ContentClassificationLabel(x) for x in data] - - async def get_webhook_subscriptions(self): - """|coro| - - Fetches your current webhook subscriptions. Requires your bot to be logged in with an app access token. - - Returns - -------- - List[:class:`twitchio.WebhookSubscription`] - """ - data = await self._http.get_webhook_subs() - return [models.WebhookSubscription(x) for x in data] - - async def event_token_expired(self): - """|coro| - - - A special event called when the oauth token expires. This is a hook into the http system, it will call this - when a call to the api fails due to a token expiry. This function should return either a new token, or `None`. - Returning `None` will cause the client to attempt an automatic token generation. - - .. note:: - This event is a callback hook. It is not a dispatched event. Any errors raised will be passed to the - :func:`~event_error` event. - """ - return None - - async def event_mode(self, channel: Channel, user: User, status: str): - """|coro| - - - Event called when a MODE is received from Twitch. - - Parameters - ------------ - channel: :class:`.Channel` - Channel object relevant to the MODE event. - user: :class:`.User` - User object containing relevant information to the MODE. - status: str - The JTV status received by Twitch. Could be either o+ or o-. - Indicates a moderation promotion/demotion to the :class:`.User` - """ - pass - - async def event_userstate(self, user: User): - """|coro| - - - Event called when a USERSTATE is received from Twitch. - - Parameters - ------------ - user: :class:`.User` - User object containing relevant information to the USERSTATE. - """ - pass - - async def event_raw_usernotice(self, channel: Channel, tags: dict): - """|coro| - - - Event called when a USERNOTICE is received from Twitch. - Since USERNOTICE's can be fairly complex and vary, the following sub-events are available: - - :meth:`event_usernotice_subscription` : - Called when a USERNOTICE Subscription or Re-subscription event is received. - - .. tip:: - - For more information on how to handle USERNOTICE's visit: - https://dev.twitch.tv/docs/irc/tags/#usernotice-twitch-tags - - - Parameters - ------------ - channel: :class:`.Channel` - Channel object relevant to the USERNOTICE event. - tags : dict - A dictionary with the relevant information associated with the USERNOTICE. - This could vary depending on the event. - """ - pass - - async def event_usernotice_subscription(self, metadata): - """|coro| - - - Event called when a USERNOTICE subscription or re-subscription event is received from Twitch. - - Parameters - ------------ - metadata: :class:`NoticeSubscription` - The object containing various metadata about the subscription event. - For ease of use, this contains a :class:`User` and :class:`Channel`. - - """ - pass - - async def event_part(self, user: User): - """|coro| - - - Event called when a PART is received from Twitch. - - Parameters - ------------ - user: :class:`.User` - User object containing relevant information to the PART. - """ - pass - - async def event_join(self, channel: Channel, user: User): - """|coro| - - - Event called when a JOIN is received from Twitch. - - Parameters - ------------ - channel: :class:`.Channel` - The channel associated with the JOIN. - user: :class:`.User` - User object containing relevant information to the JOIN. - """ - pass - - async def event_message(self, message: Message): - """|coro| - - - Event called when a PRIVMSG is received from Twitch. - - Parameters - ------------ - message: :class:`.Message` - Message object containing relevant information. - """ - pass - - async def event_error(self, error: Exception, data: str = None): - """|coro| - - - Event called when an error occurs while processing data. - - Parameters - ------------ - error: Exception - The exception raised. - data: str - The raw data received from Twitch. Depending on how this is called, this could be None. - - Example - --------- - .. code:: py - - @bot.event() - async def event_error(error, data): - traceback.print_exception(type(error), error, error.__traceback__, file=sys.stderr) - """ - traceback.print_exception(type(error), error, error.__traceback__, file=sys.stderr) - - async def event_ready(self): - """|coro| - - - Event called when the Bot has logged in and is ready. - - Example - --------- - .. code:: py - - @bot.event() - async def event_ready(): - print(f'Logged into Twitch | {bot.nick}') - """ - pass - - async def event_reconnect(self): - """|coro| - - Event called when twitch sends a RECONNECT notice. - The library will automatically handle reconnecting when such an event is received - """ - - async def event_raw_data(self, data: str): - """|coro| - - - Event called with the raw data received by Twitch. - - Parameters - ------------ - data: str - The raw data received from Twitch. - - Example - --------- - .. code:: py - - @bot.event() - async def event_raw_data(data): - print(data) - """ - pass - - async def event_channel_joined(self, channel: Channel): - """|coro| - - Event called when the bot joins a channel. - - Parameters - ---------- - channel: :class:`.Channel` - The channel that was joined. - """ - pass - - async def event_channel_join_failure(self, channel: str): - """|coro| - - Event called when the bot fails to join a channel. - - Parameters - ---------- - channel: `str` - The channel name that was attempted to be joined. - """ - logger.error(f'The channel "{channel}" was unable to be joined. Check the channel is valid.') - - async def event_raw_notice(self, data: str): - """|coro| - - - Event called with the raw NOTICE data received by Twitch. - - Parameters - ------------ - data: str - The raw NOTICE data received from Twitch. - - Example - --------- - .. code:: py - - @bot.event() - async def event_raw_notice(data): - print(data) - """ - pass - - async def event_notice(self, message: str, msg_id: Optional[str], channel: Optional[Channel]): - """|coro| - - - Event called with the NOTICE data received by Twitch. - - .. tip:: - - For more information on NOTICE msg_ids visit: - https://dev.twitch.tv/docs/irc/msg-id/ - - Parameters - ------------ - message: :class:`str` - The message of the NOTICE. - msg_id: Optional[:class:`str`] - The msg_id that indicates what the NOTICE type. - channel: Optional[:class:`~twitchio.Channel`] - The channel the NOTICE message originated from. - - Example - --------- - .. code:: py - - @bot.event() - async def event_notice(message, msg_id, channel): - print(message) - """ - pass diff --git a/twitchio/cooldowns.py b/twitchio/cooldowns.py deleted file mode 100644 index 9bbabef9..00000000 --- a/twitchio/cooldowns.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -import asyncio -import time - - -class RateBucket: - HTTPLIMIT = 800 - IRCLIMIT = 20 - MODLIMIT = 100 - - HTTP = 60 - IRC = 30 - - def __init__(self, *, method: str): - self.method = method - - if method == "irc": - self.reset_time = self.IRC - self.limit = self.IRCLIMIT - elif method == "mod": - self.reset_time = self.IRC - self.limit = self.MODLIMIT - else: - self.reset_time = self.HTTP - self.limit = self.HTTPLIMIT - - self.tokens = 0 - self._reset = time.time() + self.reset_time - self._event = asyncio.Event() - self._event.set() - - @property - def limited(self): - return self.tokens >= self.limit - - def reset(self): - self.tokens = 0 - self._reset = time.time() + self.reset_time - - def limit_until(self, t): - """ - artificially causes a limit until t - """ - self.tokens = self.limit - self._reset = t - - def update(self, *, reset=None, remaining=None): - now = time.time() - - if self._reset <= now: - self.reset() - - if reset: - self._reset = int(reset) - - if remaining: - self.tokens = self.limit - int(remaining) - else: - self.tokens += 1 - - async def wait_reset(self): - await self._wait() - - def __await__(self): - return self._wait() - - async def _wait(self): - if self.tokens < self.limit: - if self._event.is_set(): - self._event.clear() - - return - - if not self._event.is_set(): - await self._event.wait() - return - else: - now = time.time() - await asyncio.sleep(self._reset - now) - self.reset() - self._event.set() diff --git a/twitchio/enums.py b/twitchio/enums.py deleted file mode 100644 index 4978adc3..00000000 --- a/twitchio/enums.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -import enum - - -__all__ = ("PredictionEnum", "BroadcasterTypeEnum", "UserTypeEnum", "ModEventEnum") - - -class PredictionEnum(enum.Enum): - blue_1 = "blue-1" - pink_2 = "pink-2" - - -class BroadcasterTypeEnum(enum.Enum): - partner = "partner" - affiliate = "affiliate" - none = "" - - -class UserTypeEnum(enum.Enum): - staff = "staff" - admin = "admin" - global_mod = "global_mod" - none = "" - - -class ModEventEnum(enum.Enum): - moderator_remove = "moderation.moderator.remove" - moderator_add = "moderation.moderator.add" diff --git a/twitchio/errors.py b/twitchio/errors.py deleted file mode 100644 index 3d0aabab..00000000 --- a/twitchio/errors.py +++ /dev/null @@ -1,81 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" -from typing import Any, Optional - - -__all__ = ( - "TwitchIOException", - "AuthenticationError", - "InvalidContent", - "IRCCooldownError", - "EchoMessageWarning", - "NoClientID", - "NoToken", - "HTTPException", - "Unauthorized", -) - - -class TwitchIOException(Exception): - pass - - -class AuthenticationError(TwitchIOException): - pass - - -class InvalidContent(TwitchIOException): - pass - - -class IRCCooldownError(TwitchIOException): - pass - - -class EchoMessageWarning(TwitchIOException): - pass - - -class NoClientID(TwitchIOException): - pass - - -class NoToken(TwitchIOException): - pass - - -class HTTPException(TwitchIOException): - def __init__( - self, message: str, *, reason: Optional[str] = None, status: Optional[int] = None, extra: Optional[Any] = None - ): - self.message = f"{status}: {message}: {reason}" - self.reason = reason - self.status = status - self.extra = extra - - super().__init__(self.message) - - -class Unauthorized(HTTPException): - pass diff --git a/twitchio/ext/commands/__init__.py b/twitchio/ext/commands/__init__.py deleted file mode 100644 index 40235e9f..00000000 --- a/twitchio/ext/commands/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from .bot import Bot -from .core import * -from .errors import * -from .cooldowns import * -from .meta import Cog diff --git a/twitchio/ext/commands/bot.py b/twitchio/ext/commands/bot.py deleted file mode 100644 index 9eda058c..00000000 --- a/twitchio/ext/commands/bot.py +++ /dev/null @@ -1,614 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from __future__ import annotations -import asyncio -import importlib -import inspect -import sys -import traceback -import types -import warnings -from functools import partial -from typing import Callable, Optional, Union, Coroutine, Dict, List, TYPE_CHECKING, Mapping, Awaitable - -from twitchio.client import Client -from twitchio.http import TwitchHTTP -from twitchio.websocket import WSConnection -from .core import Command, Group, Context -from .errors import * -from .meta import Cog -from .stringparser import StringParser -from .utils import _CaseInsensitiveDict - -if TYPE_CHECKING: - from twitchio import Message - - -class Bot(Client): - def __init__( - self, - token: str, - *, - prefix: Union[str, list, tuple, set, Callable, Coroutine], - client_secret: str = None, - initial_channels: Union[list, tuple, Callable] = None, - heartbeat: Optional[float] = 30.0, - retain_cache: Optional[bool] = True, - **kwargs, - ): - super().__init__( - token=token, - client_secret=client_secret, - initial_channels=initial_channels, - heartbeat=heartbeat, - retain_cache=retain_cache, - ) - - self._prefix = prefix - - if kwargs.get("case_insensitive", False): - self._commands: Union[dict, _CaseInsensitiveDict] = _CaseInsensitiveDict() - self._command_aliases: Union[dict, _CaseInsensitiveDict] = _CaseInsensitiveDict() - else: - self._commands = {} - self._command_aliases = {} - self._modules: Dict[str, types.ModuleType] = {} - self._cogs: Dict[str, Cog] = {} - self._checks: List[Callable[[Context], Union[bool, Awaitable[bool]]]] = [] - - self.__init__commands__() - - @classmethod - def from_client_credentials( - cls, - client_id: str, - client_secret: str, - *, - loop: asyncio.AbstractEventLoop = None, - heartbeat: Optional[float] = 30.0, - prefix: Union[str, list, tuple, set, Callable, Coroutine] = "!", - ) -> Bot: - """ - creates a client application token from your client credentials. - - .. warning: - - This method generates a token that is not suitable for logging in to IRC. - This is not recommended for Bot objects, as it renders the commands system inoperable. - - .. note: - - This classmethod skips :meth:`~.__init__` - - Parameters - ------------ - client_id: :class:`str` - Your application's Client ID. - client_secret: :class:`str` - An application Client Secret used to generate Access Tokens automatically. - loop: Optional[:class:`asyncio.AbstractEventLoop`] - The event loop the client will use to run. - heartbeat: Optional[:class:`float`] - The heartbeat interval. Defaults to 30. - prefix: Union[:class:`str`, :class:`list`, :class:`tuple`, :class:`set`, Callable, Coroutine] - The bots prefix. Defaults to "!". - - Returns - -------- - A new :class:`Bot` instance - """ - warnings.warn(DeprecationWarning("from_client_credentials is not suitable for Bots.")) - self = cls.__new__(cls) - self.loop = loop or asyncio.get_event_loop() - self._http = TwitchHTTP(self, client_id=client_id, client_secret=client_secret) - self._heartbeat = heartbeat - self._connection = WSConnection( - client=self, - loop=self.loop, - initial_channels=None, - heartbeat=self._heartbeat, - ) # The only reason we're even creating this is to avoid attribute errors - self._events = {} - self._waiting = [] - self._modules = {} - self._prefix = prefix - self._cogs = {} - self._commands = {} - self._command_aliases = {} - self._checks = [] - self.registered_callbacks = {} - - return self - - def __init__commands__(self): - commands = inspect.getmembers(self) - - for _, obj in commands: - if not isinstance(obj, Command): - continue - obj._instance = self - - try: - self.add_command(obj) - except TwitchCommandError: - traceback.print_exc() - continue - - async def __get_prefixes__(self, message): - ret = self._prefix - - if callable(self._prefix): - if inspect.iscoroutinefunction(self._prefix): - ret = await self._prefix(self, message) - else: - ret = self._prefix(self, message) - if not isinstance(ret, (list, tuple, set, str)): - raise TypeError(f"Prefix must be of either class not <{type(ret)}>") - return ret - - async def get_prefix(self, message): - # TODO Docs - prefixes = await self.__get_prefixes__(message) - message_content = message.content - if "reply-parent-msg-id" in message.tags: - message_content = " ".join(message.content.split(" ")[1:]) - else: - message_content = message.content - if not isinstance(prefixes, str): - for prefix in prefixes: - if message_content.startswith(prefix): - return prefix - elif message_content.startswith(prefixes): - return prefixes - else: - return None - - def add_command(self, command: Command): - """Method which registers a command for use by the bot. - - Parameters - ------------ - command: :class:`.Command` - The command to register. - """ - if not isinstance(command, Command): - raise TypeError("Commands passed must be a subclass of Command.") - elif command.name in self.commands: - raise TwitchCommandError( - f"Failed to load command <{command.name}>, a command with that name already exists." - ) - elif not inspect.iscoroutinefunction(command._callback): - raise TwitchCommandError(f"Failed to load command <{command.name}>. Commands must be coroutines.") - self.commands[command.name] = command - - if not command.aliases: - return - for alias in command.aliases: - if alias in self.commands: - del self.commands[command.name] - raise TwitchCommandError( - f"Failed to load command <{command.name}>, a command with that name/alias already exists." - ) - self._command_aliases[alias] = command.name - - def get_command(self, name: str) -> Optional[Command]: - """Method which retrieves a registered command. - - Parameters - ------------ - name: :class:`str` - The name or alias of the command to retrieve. - - Returns - --------- - Optional[:class:`.Command`] - """ - name = self._command_aliases.get(name, name) - - return self._commands.get(name, None) - - def remove_command(self, name: str): - """ - Method which removes a registered command - - Parameters - ----------- - name: :class:`str` - the name or alias of the command to delete. - - Returns - -------- - None - - Raises - ------- - :class:`.CommandNotFound` The command was not found - """ - name = self._command_aliases.pop(name, name) - - for alias in list(self._command_aliases.keys()): - if self._command_aliases[alias] == name: - del self._command_aliases[alias] - try: - del self._commands[name] - except KeyError: - raise CommandNotFound(f"The command '{name}` was not found") - - def get_cog(self, name: str) -> Optional[Cog]: - """Retrieve a Cog from the bots loaded Cogs. - - Could be None if the Cog was not found. - - Returns - --------- - Optional[:class:`.Cog`] - """ - return self.cogs.get(name, None) - - async def get_context(self, message, *, cls=None): - """Get a Context object from a message. - - Parameters - ---------- - message: :class:`.Message` - The message object to get context for. - cls - The class to return. Defaults to Context. Its constructor must take message, prefix, valid, and bot - as arguments. - - Returns - --------- - An instance of cls. - - Raises - --------- - :class:`.CommandNotFound` No valid command was passed - """ - if not cls: - cls = Context - prefix = await self.get_prefix(message) - if not prefix: - return cls(message=message, prefix=prefix, valid=False, bot=self) - content = message.content - if "reply-parent-msg-id" in message.tags: # Remove @username from reply message - content = content.split(" ", 1)[1] - content = content[len(prefix) : :].lstrip() # Strip prefix and remainder whitespace - view = StringParser() - parsed = view.process_string(content) # Return the string as a dict view - - try: - command_ = parsed.pop(0) - except KeyError: - context = cls(message=message, bot=self, prefix=prefix, command=None, valid=False, view=view) - error = CommandNotFound("No valid command was passed.", "") - - self.run_event("command_error", context, error) - return context - try: - command_ = self._command_aliases[command_] - except KeyError: - pass - if command_ in self.commands: - command_ = self.commands[command_] - else: - context = cls(message=message, bot=self, prefix=prefix, command=None, valid=False, view=view) - error = CommandNotFound(f'No command "{command_}" was found.', command_) - - self.run_event("command_error", context, error) - return context - context = cls(message=message, bot=self, prefix=prefix, command=command_, valid=True, view=view) - - return context - - async def handle_commands(self, message): - """|coro| - - This method handles commands sent from chat and invokes them. - - By default, this coroutine is called within the :func:`Bot.event_message` event. - If you choose to override :func:`Bot.event_message` then you need to invoke this coroutine in order to handle commands. - - Parameters - ---------- - message: :class:`.Message` - The message object to get content of and context for. - - """ - context = await self.get_context(message) - await self.invoke(context) - - async def invoke(self, context): - # TODO Docs - if not context.prefix or not context.is_valid: - return - self.run_event("command_invoke", context) - await context.command(context) - - def load_module(self, name: str) -> None: - """Method which loads a module and it's cogs. - - Parameters - ------------ - name: str - The name of the module to load in dot.path format. - """ - if name in self._modules: - raise ValueError(f"Module <{name}> is already loaded") - module = importlib.import_module(name) - - if hasattr(module, "prepare"): - module.prepare(self) # type: ignore - else: - del module - del sys.modules[name] - raise ImportError(f"Module <{name}> is missing a prepare method") - self._modules[name] = module - - def unload_module(self, name: str) -> None: - """Method which unloads a module and it's cogs. - - Parameters - ---------- - name: str - The name of the module to unload in dot.path format. - """ - if name not in self._modules: - raise ValueError(f"Module <{name}> is not loaded") - module = self._modules.pop(name) - - if hasattr(module, "breakdown"): - try: - module.breakdown(self) # type: ignore - except: - pass - to_delete = [cog_name for cog_name, cog in self._cogs.items() if cog.__module__ == module.__name__] - for name in to_delete: - self.remove_cog(name) - to_delete = [name for name, cmd in self._commands.items() if cmd._callback.__module__ == module.__name__] - for name in to_delete: - self.remove_command(name) - to_delete = [ - x - for y in self._events.items() - for x in y[1] - if isinstance(x, partial) and x.func.__module__ == module.__name__ - ] - for event in to_delete: - self.remove_event(event) - for m in list(sys.modules.keys()): - if m == module.__name__ or m.startswith(module.__name__ + "."): - del sys.modules[m] - - def reload_module(self, name: str): - """Method which reloads a module and it's cogs. - - Parameters - ---------- - name: str - The name of the module to unload in dot.path format. - - - .. note:: - - This is roughly equivalent to `bot.unload_module(...)` then `bot.load_module(...)`. - """ - if name not in self._modules: - raise ValueError(f"Module <{name}> is not loaded") - module = self._modules[name] - - modules = { - name: m - for name, m in sys.modules.items() - if name == module.__name__ or name.startswith(module.__name__ + ".") - } - - try: - self.unload_module(name) - self.load_module(name) - except Exception as e: - sys.modules.update(modules) - module.prepare(self) # type: ignore - self._modules[name] = module - raise - - def add_cog(self, cog: Cog): - """Method which adds a cog to the bot. - - Parameters - ---------- - cog: :class:`Cog` - The cog instance to add to the bot. - - - .. warning:: - - This must be an instance of :class:`Cog`. - """ - if not isinstance(cog, Cog): - raise InvalidCog('Cogs must derive from "commands.Cog".') - if cog.name in self._cogs: - raise InvalidCog(f'Cog "{cog.name}" has already been loaded.') - cog._load_methods(self) - self._cogs[cog.name] = cog - - def remove_cog(self, cog_name: str): - """Method which removes a cog from the bot. - Parameters - ---------- - cog_name: str - The name of the cog to remove. - """ - if cog_name not in self._cogs: - raise InvalidCog(f"Cog '{cog_name}' not found") - cog = self._cogs.pop(cog_name) - cog._unload_methods(self) - - async def global_before_invoke(self, ctx): - """|coro| - - Method which is called before any command is about to be invoked. - - This method is useful for setting up things before command invocation. E.g Database connections or - retrieving tokens for use in the command. - - Parameters - ------------ - ctx: - The context used for command invocation. - - Examples - ---------- - .. code:: py - - async def global_before_invoke(self, ctx): - # Make a database query for example to retrieve a specific token. - token = db_query() - - ctx.token = token - - async def my_command(self, ctx): - data = await self.create_clip(ctx.token, ...) - - Note - ------ - The global_before_invoke is called before any other command specific hooks. - """ - pass - - async def global_after_invoke(self, ctx: Context) -> None: - """|coro| - - Method which is called after any command is invoked regardless if it failed or not. - - This method is useful for cleaning up things after command invocation. E.g Database connections. - - Parameters - ------------ - ctx: - The context used for command invocation. - - Note - ------ - The global_after_invoke is called only after the command successfully invokes. - """ - pass - - @property - def commands(self): - """The currently loaded commands.""" - return self._commands - - @property - def cogs(self) -> Mapping[str, Cog]: - """The currently loaded cogs.""" - return self._cogs - - async def event_command_error(self, context: Context, error: Exception) -> None: - """|coro| - - Event called when an error occurs during command invocation. - - Parameters - ------------ - context: :class:`.Context` - The command context. - error: :class:`.Exception` - The exception raised while trying to invoke the command. - """ - print(f"Ignoring exception in command: {error}:", file=sys.stderr) - traceback.print_exception(type(error), error, error.__traceback__, file=sys.stderr) - - async def event_message(self, message: Message) -> None: - """|coro| - - Event called when a PRIVMSG is received from Twitch. - - Parameters - ------------ - message: :class:`.Message` - Message object containing relevant information. - """ - if message.echo: - return - await self.handle_commands(message) - - def command( - self, *, name: str = None, aliases: Union[list, tuple] = None, cls=Command, no_global_checks=False - ) -> Callable[[Callable], Command]: - """Decorator which registers a command with the bot. - - Commands must be a coroutine. - - Parameters - ------------ - name: str [Optional] - The name of the command. By default if this is not supplied, the function name will be used. - aliases: Optional[Union[list, tuple]] - The command aliases. This must be a list or tuple. - cls: class [Optional] - The custom command class to override the default class. This must be similar to :class:`.Command`. - no_global_checks : Optional[bool] - Whether or not the command should abide by global checks. Defaults to False, which checks global checks. - - Raises - -------- - TypeError - cls is not type class. - """ - - if not inspect.isclass(cls): - raise TypeError(f"cls must be of type not <{type(cls)}>") - - def decorator(func: Callable): - cmd_name = name or func.__name__ - - cmd = cls(name=cmd_name, func=func, aliases=aliases, instance=None, no_global_checks=no_global_checks) - self.add_command(cmd) - - return cmd - - return decorator - - def group( - self, *, name: str = None, aliases: Union[list, tuple] = None, cls=Group, no_global_checks=False - ) -> Callable[[Callable], Group]: - if not inspect.isclass(cls): - raise TypeError(f"cls must be of type not <{type(cls)}>") - - def decorator(func: Callable): - cmd_name = name or func.__name__ - - cmd = cls(name=cmd_name, func=func, aliases=aliases, instance=None, no_global_checks=no_global_checks) - self.add_command(cmd) - - return cmd - - return decorator - - def check(self, func: Callable[[Context], bool]) -> Callable: - if func in self._checks: - raise ValueError("The function is already registered as a bot check") - self._checks.append(func) - return func diff --git a/twitchio/ext/commands/builtin_converter.py b/twitchio/ext/commands/builtin_converter.py deleted file mode 100644 index 773c9812..00000000 --- a/twitchio/ext/commands/builtin_converter.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from __future__ import annotations -import re -from typing import TYPE_CHECKING - -from twitchio import User, PartialUser, Chatter, PartialChatter, Channel, Clip -from .errors import BadArgument - -if TYPE_CHECKING: - from .core import Context - - -__all__ = ( - "convert_Chatter", - "convert_Clip", - "convert_Channel", - "convert_PartialChatter", - "convert_PartialUser", - "convert_User", -) - - -async def convert_Chatter(ctx: Context, arg: str) -> Chatter: - """ - Converts the argument into a chatter in the chat. If the chatter is not found, BadArgument is raised. - """ - arg = arg.lstrip("@") - resp = [x for x in filter(lambda c: c.name == arg, ctx.chatters or tuple())] - if not resp: - raise BadArgument(f"The user '{arg}' was not found in {ctx.channel.name}'s chat.") - - return resp[0] - - -async def convert_PartialChatter(ctx: Context, arg: str) -> PartialChatter: - """ - Converts the argument into a chatter in the chat. As opposed to Chatter converter, this will return a PartialChatter regardless of the cache state. - """ - return PartialChatter(ctx._ws, name=arg.lstrip("@"), channel=ctx.channel, message=None) - - -async def convert_Clip(ctx: Context, arg: str) -> Clip: - finder = re.search(r"(https://clips.twitch.tv/)?(?P.*)", arg) - if not finder: - raise RuntimeError( - "regex failed to match" - ) # this should never ever raise, but its here to make type checkers happy - - slug = finder.group("slug") - clips = await ctx.bot.fetch_clips([slug]) - if not clips: - raise BadArgument(f"Clip '{slug}' was not found") - - return clips[0] - - -async def convert_User(ctx: Context, arg: str) -> User: - """ - Similar to convert_Chatter, but fetches from the twitch API instead, - returning a :class:`twitchio.User` instead of a :class:`twitchio.Chatter`. - To use this, you most have a valid client id and API token or client secret - """ - arg = arg.lstrip("@") - user = await ctx.bot.fetch_users(names=[arg]) - if not user: - raise BadArgument(f"User '{arg}' was not found.") - return user[0] - - -async def convert_PartialUser(ctx: Context, arg: str) -> User: - """ - This is simply a shorthand to :ref:`~convert_User`, as fetching from the api will return a full user model - """ - return await convert_User(ctx, arg) - - -async def convert_Channel(ctx: Context, arg: str) -> Channel: - if arg not in ctx.bot._connection._cache: - raise BadArgument(f"Not connected to channel '{arg}'") - - return ctx.bot.get_channel(arg) - - -_mapping = { - User: convert_User, - PartialUser: convert_PartialUser, - Channel: convert_Channel, - Chatter: convert_Chatter, - PartialChatter: convert_PartialChatter, - Clip: convert_Clip, -} diff --git a/twitchio/ext/commands/cooldowns.py b/twitchio/ext/commands/cooldowns.py deleted file mode 100644 index ded01efc..00000000 --- a/twitchio/ext/commands/cooldowns.py +++ /dev/null @@ -1,179 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from __future__ import annotations -import enum -import time - -from .errors import * - - -__all__ = ( - "Bucket", - "Cooldown", -) - - -class Bucket(enum.Enum): - """ - Enum values for the different cooldown buckets. - - Parameters - ------------ - default: :class:`enum.Enum` - The default bucket. - channel: :class:`enum.Enum` - Cooldown is shared amongst all chatters per channel. - member: :class:`enum.Enum` - Cooldown operates on a per channel basis per user. - user: :class:`enum.Enum` - Cooldown operates on a user basis across all channels. - subscriber: :class:`enum.Enum` - Cooldown for subscribers. - mod: :class:`enum.Enum` - Cooldown for mods. - """ - - default = 0 - channel = 1 - member = 2 - user = 3 - subscriber = 4 - mod = 5 - - -class Cooldown: - """ - Cooldown decorator values. - - Parameters - ------------ - rate: :class:`int` - How many times the command can be invoked before triggering a cooldown inside a time frame. - per: :class:`float` - The amount of time in seconds to wait for a cooldown when triggered. - bucket: :class:`Bucket` - The bucket that the cooldown is in. - - Examples - ---------- - - .. code:: py - - # Restrict a command to once every 10 seconds on a per channel basis. - @commands.cooldown(rate=1, per=10, bucket=commands.Bucket.channel) - @commands.command() - async def my_command(self, ctx: commands.Context): - pass - - # Restrict a command to once every 30 seconds for each individual channel a user is in. - @commands.cooldown(rate=1, per=30, bucket=commands.Bucket.member) - @commands.command() - async def my_command(self, ctx: commands.Context): - pass - - # Restrict a command to 5 times every 60 seconds globally for a user. - @commands.cooldown(rate=5, per=60, bucket=commands.Bucket.user) - @commands.command() - async def my_command(self, ctx: commands.Context): - pass - """ - - __slots__ = ("_rate", "_per", "bucket", "_window", "_tokens", "_cache") - - def __init__(self, rate: int, per: float, bucket: Bucket): - self._rate = rate - self._per = per - self.bucket = bucket - - self._cache = {} - - def update_bucket(self, ctx): - now = time.time() - - bucket_keys = self._bucket_keys(ctx) - buckets = [] - - for bucket in bucket_keys: - (tokens, window) = self._cache[bucket] - - if tokens == self._rate: - retry = self._per - (now - window) - raise CommandOnCooldown(command=ctx.command, retry_after=retry) - - tokens += 1 - - if tokens == self._rate: - window = now - - self._cache[bucket] = (tokens, window) - - def reset(self): - self._cache = {} - - def _bucket_keys(self, ctx): - buckets = [] - - for bucket in ctx.command._cooldowns: - if bucket.bucket == Bucket.default: - buckets.append("default") - - if bucket.bucket == Bucket.channel: - buckets.append(ctx.channel.name) - - if bucket.bucket == Bucket.member: - buckets.append((ctx.channel.name, ctx.author.id)) - if bucket.bucket == Bucket.user: - buckets.append(ctx.author.id) - - if bucket.bucket == Bucket.subscriber: - buckets.append((ctx.channel.name, ctx.author.id, 0)) - if bucket.bucket == Bucket.mod: - buckets.append((ctx.channel.name, ctx.author.id, 1)) - - return buckets - - def _update_cache(self, now=None): - now = now or time.time() - dead = [key for key, cooldown in self._cache.items() if now > cooldown[1] + self._per] - - for bucket in dead: - del self._cache[bucket] - - def get_buckets(self, ctx): - now = time.time() - - self._update_cache(now) - - bucket_keys = self._bucket_keys(ctx) - buckets = [] - - for index, bucket in enumerate(bucket_keys): - buckets.append(ctx.command._cooldowns[index]) - if bucket not in self._cache: - self._cache[bucket] = (0, now) - - return buckets diff --git a/twitchio/ext/commands/core.py b/twitchio/ext/commands/core.py deleted file mode 100644 index ff7c9c7e..00000000 --- a/twitchio/ext/commands/core.py +++ /dev/null @@ -1,695 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from __future__ import annotations -import inspect - -import itertools -import copy -import types -from typing import Any, Union, Optional, Callable, Awaitable, Tuple, TYPE_CHECKING, List, Type, Set, TypeVar -from typing_extensions import Literal - -from twitchio.abcs import Messageable -from .cooldowns import * -from .errors import * -from . import builtin_converter - -if TYPE_CHECKING: - import sys - - from twitchio import Message, Chatter, PartialChatter, Channel, User, PartialUser - from . import Cog, Bot - from .stringparser import StringParser - - if sys.version_info >= (3, 10): - UnionT = Union[types.UnionType, Union] - else: - UnionT = Union - - -__all__ = ("Command", "command", "Group", "Context", "cooldown") - - -class EmptyArgumentSentinel: - def __repr__(self) -> str: - return "" - - def __eq__(self, __value: object) -> bool: - return False - - -EMPTY = EmptyArgumentSentinel() - - -def _boolconverter(_, param: str): - param = param.lower() - if param in {"yes", "y", "1", "true", "on"}: - return True - elif param in {"no", "n", "0", "false", "off"}: - return False - raise BadArgument(f"Expected a boolean value, got {param}") - - -class Command: - """A class for implementing bot commands. - - Parameters - ------------ - name: :class:`str` - The name of the command. - func: :class:`Callable` - The coroutine that executes when the command is invoked. - - Attributes - ------------ - name: :class:`str` - The name of the command. - cog: :class:`~twitchio.ext.commands.Cog` - The cog this command belongs to. - aliases: Optional[Union[:class:`list`, :class:`tuple`]] - Aliases that can be used to also invoke the command. - """ - - def __init__(self, name: str, func: Callable, **attrs) -> None: - if not inspect.iscoroutinefunction(func): - raise TypeError("Command callback must be a coroutine.") - self._callback = func - self._checks = [] - self._cooldowns = [] - self._name = name - - self._instance = None - self.cog = None - self.parent: Optional[Group] = attrs.get("parent") - - try: - self._checks.extend(func.__checks__) # type: ignore - except AttributeError: - pass - try: - self._cooldowns.extend(func.__cooldowns__) # type: ignore - except AttributeError: - pass - self.aliases = attrs.get("aliases", None) - sig = inspect.signature(func) - self.params = sig.parameters.copy() # type: ignore - - self.event_error = None - self._before_invoke = None - self._after_invoke = None - self.no_global_checks = attrs.get("no_global_checks", False) - - for key, value in self.params.items(): - if isinstance(value.annotation, str): - self.params[key] = value.replace(annotation=eval(value.annotation, func.__globals__)) # type: ignore - - @property - def name(self) -> str: - return self._name - - @property - def full_name(self) -> str: - if not self.parent: - return self._name - return f"{self.parent.full_name} {self._name}" - - def _is_optional_argument(self, converter: Any): - return (getattr(converter, "__origin__", None) is Union or isinstance(converter, types.UnionType)) and type( - None - ) in converter.__args__ - - def resolve_union_callback(self, name: str, converter: UnionT) -> Callable[[Context, str], Any]: - # print(type(converter), converter.__args__) - - args = converter.__args__ # type: ignore # pyright doesnt like this - - async def _resolve(context: Context, arg: str) -> Any: - t = EMPTY - - for original in args: - underlying = self._resolve_converter(name, original, context) - - try: - t: Any = underlying(context, arg) - if inspect.iscoroutine(t): - t = await t - - break - except Exception as l: - t = EMPTY # thisll get changed when t is a coroutine, but is still invalid, so roll it back - continue - - if t is EMPTY: - raise UnionArgumentParsingFailed(name, args) - - return t - - return _resolve - - def resolve_optional_callback(self, name: str, converter: Any, context: Context) -> Callable[[Context, str], Any]: - underlying = self._resolve_converter(name, converter.__args__[0], context) - - async def _resolve(context: Context, arg: str) -> Any: - try: - t: Any = underlying(context, arg) - if inspect.iscoroutine(t): - t = await t - - except Exception: - return EMPTY # instruct the parser to roll back and ignore this argument - - return t - - return _resolve - - def _resolve_converter( - self, name: str, converter: Union[Callable, Awaitable, type], ctx: Context - ) -> Callable[..., Any]: - if ( - isinstance(converter, type) - and converter.__module__.startswith("twitchio") - and converter in builtin_converter._mapping - ): - return self._convert_builtin_type(name, converter, builtin_converter._mapping[converter]) - - elif converter is bool: - converter = self._convert_builtin_type(name, bool, _boolconverter) - - elif converter in (str, int): - original: type[str | int] = converter # type: ignore - converter = self._convert_builtin_type(name, original, lambda _, arg: original(arg)) - - elif self._is_optional_argument(converter): - return self.resolve_optional_callback(name, converter, ctx) - - elif isinstance(converter, types.UnionType) or getattr(converter, "__origin__", None) is Union: - return self.resolve_union_callback(name, converter) # type: ignore - - elif hasattr(converter, "__metadata__"): # Annotated - annotated = converter.__metadata__ # type: ignore - return self._resolve_converter(name, annotated[0], ctx) - - return converter # type: ignore - - def _convert_builtin_type( - self, - arg_name: str, - original: type, - converter: Union[Callable[[Context, str], Any], Callable[[Context, str], Awaitable[Any]]], - ) -> Callable[[Context, str], Awaitable[Any]]: - async def resolve(ctx, arg: str) -> Any: - try: - t = converter(ctx, arg) - - if inspect.iscoroutine(t): - t = await t - - return t - except Exception as e: - raise ArgumentParsingFailed( - f"Failed to convert `{arg}` to expected type {original.__name__} for argument `{arg_name}`", - original=e, - argname=arg_name, - expected=original, - ) from e - - return resolve - - async def _convert_types(self, context: Context, param: inspect.Parameter, parsed: str) -> Any: - converter = param.annotation - - if converter is param.empty: - if param.default in (param.empty, None): - converter = str - else: - converter = type(param.default) - - true_converter = self._resolve_converter(param.name, converter, context) - - try: - argument = true_converter(context, parsed) - if inspect.iscoroutine(argument): - argument = await argument - except BadArgument as e: - if e.name is None: - e.name = param.name - - raise - except Exception as e: - raise ArgumentParsingFailed( - f"Failed to parse `{parsed}` for argument {param.name}", original=e, argname=param.name, expected=None - ) from e - return argument - - async def parse_args(self, context: Context, instance: Optional[Cog], parsed: dict, index=0) -> Tuple[list, dict]: - if isinstance(self, Group): - parsed = parsed.copy() - iterator = iter(self.params.items()) - args = [] - kwargs = {} - - try: - next(iterator) - if instance: - next(iterator) - except StopIteration: - raise TwitchCommandError("self or ctx is a required argument which is missing.") - for _, param in iterator: - index += 1 - if param.kind == param.POSITIONAL_OR_KEYWORD: - try: - argument = parsed.pop(index) - except (KeyError, IndexError): - if self._is_optional_argument(param.annotation): # parameter is optional and at the end. - args.append(param.default if param.default is not param.empty else None) - continue - - if param.default is param.empty: - raise MissingRequiredArgument(argname=param.name) - - args.append(param.default) - else: - _parsed_arg = await self._convert_types(context, param, argument) - - if _parsed_arg is EMPTY: - parsed[index] = argument - index -= 1 - args.append(param.default if param.default is not param.empty else None) - - continue - else: - args.append(_parsed_arg) - - elif param.kind == param.KEYWORD_ONLY: - rest = " ".join(parsed.values()) - if rest.startswith(" "): - rest = rest.lstrip(" ") - if rest: - rest = await self._convert_types(context, param, rest) - elif param.default is param.empty: - raise MissingRequiredArgument(argname=param.name) - else: - rest = param.default - kwargs[param.name] = rest - parsed.clear() - break - elif param.kind == param.VAR_POSITIONAL: - args.extend([await self._convert_types(context, param, argument) for argument in parsed.values()]) - parsed.clear() - break - if parsed: - pass # TODO Raise Too Many Arguments. - return args, kwargs - - async def invoke(self, context: Context, *, index=0) -> None: - # TODO Docs - if not context.view: - return - - async def try_run(func, *, to_command=False): - try: - await func - except Exception as _e: - if not to_command: - context.bot.run_event("error", _e) - else: - context.bot.run_event("command_error", context, _e) - - try: - args, kwargs = await self.parse_args(context, self._instance, context.view.words, index=index) - except (MissingRequiredArgument, BadArgument) as e: - if self.event_error: - args_ = [self._instance, context] if self._instance else [context] - await try_run(self.event_error(*args_, e)) - - context.bot.run_event("command_error", context, e) - return - - context.args, context.kwargs = args, kwargs - check_result = await self.handle_checks(context) - - if check_result is not True: - context.bot.run_event("command_error", context, check_result) - return - limited = self._run_cooldowns(context) - - if limited: - context.bot.run_event("command_error", context, limited[0]) - return - instance = self._instance - args = [instance, context] if instance else [context] - await try_run(context.bot.global_before_invoke(context)) - - if self._before_invoke: - await try_run(self._before_invoke(*args), to_command=True) - try: - await self._callback(*args, *context.args, **context.kwargs) - except Exception as e: - if self.event_error: - await try_run(self.event_error(*args, e)) - context.bot.run_event("command_error", context, e) - else: - context.bot.run_event("command_complete", context) - # Invoke our after command hooks - if self._after_invoke: - await try_run(self._after_invoke(*args), to_command=True) - await try_run(context.bot.global_after_invoke(context)) - - def _run_cooldowns(self, context: Context) -> Optional[List[CommandOnCooldown]]: - try: - buckets = self._cooldowns[0].get_buckets(context) - except IndexError: - return None - expired = [] - - try: - for bucket in buckets: - bucket.update_bucket(context) - except CommandOnCooldown as e: - expired.append(e) - return expired - - async def handle_checks(self, context: Context) -> Union[Literal[True], Exception]: - # TODO Docs - - if not self.no_global_checks: - checks = [predicate for predicate in itertools.chain(context.bot._checks, self._checks)] - else: - checks = self._checks - try: - for predicate in checks: - result = predicate(context) - - if inspect.isawaitable(result): - result = await result # type: ignore - if not result: - raise CheckFailure(f"The check {predicate} for command {self.name} failed.") - if self.cog and not await self.cog.cog_check(context): - raise CheckFailure(f"The cog check for command <{self.name}> failed.") - return True - except Exception as e: - return e - - async def __call__(self, context: Context, *, index=0) -> None: - await self.invoke(context, index=index) - - -class Group(Command): - def __init__(self, *args, invoke_with_subcommand=False, **kwargs) -> None: - super(Group, self).__init__(*args, **kwargs) - self._sub_commands = {} - self._invoke_with_subcommand = invoke_with_subcommand - - async def __call__(self, context: Context, *, index=0) -> None: - if not context.view: - return - if not context.view.words: - return await self.invoke(context, index=index) - arg: Tuple[int, str] = list(context.view.words.items())[0] # type: ignore - if arg[1] in self._sub_commands: - _ctx = copy.copy(context) - _ctx.view = _ctx.view.copy() - _ctx.view.words.pop(arg[0]) - await self._sub_commands[arg[1]](_ctx, index=arg[0]) - - if self._invoke_with_subcommand: - await self.invoke(context, index=index) - else: - await self.invoke(context, index=index) - - def command( - self, *, name: str = None, aliases: Union[list, tuple] = None, cls=Command, no_global_checks=False - ) -> Callable[[Callable], Command]: - if cls and not inspect.isclass(cls): - raise TypeError(f"cls must be of type not <{type(cls)}>") - - def decorator(func: Callable): - fname = name or func.__name__ - cmd = cls(name=fname, func=func, aliases=aliases, no_global_checks=no_global_checks, parent=self) - self._sub_commands[cmd.name] = cmd - if cmd.aliases: - for a in cmd.aliases: - self._sub_commands[a] = cmd - return cmd - - return decorator - - def group( - self, - *, - name: str = None, - aliases: Union[list, tuple] = None, - cls: Type[Group] = None, - no_global_checks=False, - invoke_with_subcommand=False, - ) -> Callable[[Callable], Group]: - cls = cls or Group - if cls and not inspect.isclass(cls): - raise TypeError(f"cls must be of type not <{type(cls)}>") - - def decorator(func: Callable): - fname = name or func.__name__ - cmd = cls( - name=fname, - func=func, - aliases=aliases, - no_global_checks=no_global_checks, - parent=self, - invoke_with_subcommand=invoke_with_subcommand, - ) - self._sub_commands[cmd.name] = cmd - if cmd.aliases: - for a in cmd.aliases: - self._sub_commands[a] = cmd - return cmd - - return decorator - - -class Context(Messageable): - """ - A class that represents the context in which a command is being invoked under. - - This class contains the meta data to help you understand more about the invocation context. - This class is not created manually and is instead passed around to commands as the first parameter. - - Attributes - ----------- - message: :class:`~twitchio.Message` - The message that triggered the command being executed. - channel: :class:`~twitchio.Channel` - The channel the command was invoked in. - author: Union[:class:`~twitchio.PartialChatter`, :class:`~twitchio.Chatter`] - The Chatter object of the user in chat that invoked the command. - prefix: Optional[:class:`str`] - The prefix that was used to invoke the command. - command: Optional[:class:`~twitchio.ext.commands.Command`] - The command that was invoked - cog: Optional[:class:`~twitchio.ext.commands.Cog`] - The cog that contains the command that was invoked. - args: Optional[List[:class:`Any`]] - List of arguments that were passed to the command. - kwargs: Optional[Dict[:class:`str`, :class:`Any`]] - List of kwargs that were passed to the command. - view: Optional[:class:`~twitchio.ext.commmands.StringParser`] - StringParser object that breaks down the command string received. - bot: :class:`~twitchio.ext.commands.Bot` - The bot that contains the command that was invoked. - """ - - __messageable_channel__ = True - - def __init__(self, message: Message, bot: Bot, **attrs) -> None: - self.message: Message = message - self.channel: Channel = message.channel - self.author: Union[Chatter, PartialChatter] = message.author - - self.prefix: Optional[str] = attrs.get("prefix") - - self.command: Optional[Command] = attrs.get("command") - if self.command: - self.cog: Optional[Cog] = self.command.cog - self.args: Optional[list] = attrs.get("args") - self.kwargs: Optional[dict] = attrs.get("kwargs") - - self.view: Optional[StringParser] = attrs.get("view") - self.is_valid: bool = attrs.get("valid") - - self.bot: Bot = bot - self._ws = self.author._ws - - def _fetch_channel(self) -> Messageable: - return self.channel or self.author # Abstract method - - def _fetch_websocket(self): - return self._ws # Abstract method - - def _fetch_message(self): - return self.message # Abstract method - - def _bot_is_mod(self) -> bool: - if not self.channel: - return False - cache = self._ws._cache[self.channel._name] - for user in cache: - if user.name == self._ws.nick: - try: - mod = user.is_mod - except AttributeError: - return False - return mod - - @property - def chatters(self) -> Optional[Set[Chatter]]: - """The channels current chatters.""" - try: - users = self._ws._cache[self.channel._name] - except (KeyError, AttributeError): - return None - return users - - @property - def users(self) -> Optional[Set[Chatter]]: # Alias to chatters - """Alias to chatters.""" - return self.chatters - - def get_user(self, name: str) -> Optional[Union[PartialUser, User]]: - """Retrieve a user from the channels user cache. - - Parameters - ----------- - name: str - The user's name to try and retrieve. - - Returns - -------- - Union[:class:`twitchio.user.User`, :class:`twitchio.user.PartialUser`] - Could be a :class:`twitchio.user.PartialUser` depending on how the user joined the channel. - Returns None if no user was found. - """ - name = name.lower() - - if not self.channel: - return None - cache = self._ws._cache[self.channel._name] - for user in cache: - if user.name == name: - return user - return None - - async def reply(self, content: str): - """|coro| - - - Send a message in reply to the user who sent a message in the destination - associated with the dataclass. - - Destination will be the context of which the message/command was sent. - - Parameters - ------------ - content: str - The content you wish to send as a message. The content must be a string. - - Raises - -------- - InvalidContent - Invalid content. - """ - entity = self._fetch_channel() - ws = self._fetch_websocket() - message = self._fetch_message() - - self.check_content(content) - self.check_bucket(channel=entity.name) - - try: - name = entity.channel.name - except AttributeError: - name = entity.name - if entity.__messageable_channel__: - await ws.reply(message.id, f"PRIVMSG #{name} :{content}\r\n") - else: - await ws.send(f"PRIVMSG #jtv :/w {name} {content}\r\n") - - -C = TypeVar("C", bound="Command") -G = TypeVar("G", bound="Group") - - -def command( - *, name: str = None, aliases: Union[list, tuple] = None, cls: type[C] = Command, no_global_checks=False -) -> Callable[[Callable], C]: - if cls and not inspect.isclass(cls): - raise TypeError(f"cls must be of type not <{type(cls)}>") - - def decorator(func: Callable) -> C: - fname = name or func.__name__ - return cls( - name=fname, - func=func, - aliases=aliases, - no_global_checks=no_global_checks, - ) - - return decorator - - -def group( - *, - name: str = None, - aliases: Union[list, tuple] = None, - cls: G = Group, - no_global_checks=False, - invoke_with_subcommand=False, -) -> Callable[[Callable], G]: - if cls and not inspect.isclass(cls): - raise TypeError(f"cls must be of type not <{type(cls)}>") - - def decorator(func: Callable) -> G: - fname = name or func.__name__ - return cls( - name=fname, - func=func, - aliases=aliases, - no_global_checks=no_global_checks, - invoke_with_subcommand=invoke_with_subcommand, - ) - - return decorator - - -FN = TypeVar("FN") - - -def cooldown(rate, per, bucket=Bucket.default): - def decorator(func: FN) -> FN: - if isinstance(func, Command): - func._cooldowns.append(Cooldown(rate, per, bucket)) - else: - func.__cooldowns__ = [Cooldown(rate, per, bucket)] - return func - - return decorator diff --git a/twitchio/ext/commands/errors.py b/twitchio/ext/commands/errors.py deleted file mode 100644 index eeaa2229..00000000 --- a/twitchio/ext/commands/errors.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" -from __future__ import annotations - -from typing import Optional, TYPE_CHECKING - -if TYPE_CHECKING: - from .core import Command - - -class TwitchCommandError(Exception): - """Base TwitchIO Command Error. All command errors derive from this error.""" - - pass - - -class InvalidCogMethod(TwitchCommandError): - pass - - -class InvalidCog(TwitchCommandError): - pass - - -class MissingRequiredArgument(TwitchCommandError): - def __init__(self, *args, argname: Optional[str] = None) -> None: - self.name: str = argname or "unknown" - - if args: - super().__init__(*args) - else: - super().__init__(f"Missing required argument `{self.name}`") - - -class BadArgument(TwitchCommandError): - def __init__(self, message: str, argname: Optional[str] = None): - self.name: str = argname # type: ignore # this'll get fixed in the parser handler - self.message = message - super().__init__(message) - - -class ArgumentParsingFailed(BadArgument): - def __init__( - self, message: str, original: Exception, argname: Optional[str] = None, expected: Optional[type] = None - ): - self.original: Exception = original - self.name: str = argname # type: ignore # in theory this'll never be None but if someone is creating this themselves itll be none. - self.expected_type: Optional[type] = expected - - Exception.__init__(self, message) # bypass badArgument - - -class UnionArgumentParsingFailed(ArgumentParsingFailed): - def __init__(self, argname: str, expected: tuple[type, ...]): - self.name: str = argname - self.expected_type: tuple[type, ...] = expected - - self.message = f"Failed to convert argument `{self.name}` to any of the valid options" - Exception.__init__(self, self.message) - - -class CommandNotFound(TwitchCommandError): - def __init__(self, message: str, name: str) -> None: - self.name: str = name - super().__init__(message) - - -class CommandOnCooldown(TwitchCommandError): - def __init__(self, command: Command, retry_after: float): - self.command: Command = command - self.retry_after: float = retry_after - super().__init__(f"Command <{command.name}> is on cooldown. Try again in ({retry_after:.2f})s") - - -class CheckFailure(TwitchCommandError): - pass diff --git a/twitchio/ext/commands/meta.py b/twitchio/ext/commands/meta.py deleted file mode 100644 index 48e59e46..00000000 --- a/twitchio/ext/commands/meta.py +++ /dev/null @@ -1,216 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from __future__ import annotations -import inspect -import types -from functools import partial -from typing import Callable, Dict, List - -from .core import Command, Context - - -__all__ = ("Cog",) - - -class CogEvent: - def __init__(self, *, name: str, func: Callable, module: str): - self.name = name - self.func = func - self.module = module - - -class CogMeta(type): - def __new__(mcs, *args, **kwargs): - name, bases, attrs = args - attrs["__cogname__"] = kwargs.pop("name", name) - - self = super().__new__(mcs, name, bases, attrs, **kwargs) - self._events = {} - self._commands = {} - - for name, mem in inspect.getmembers(self): - if isinstance(mem, (CogEvent, Command)) and name.startswith(("cog_", "bot_")): # Invalid method prefixes - raise RuntimeError(f'The event or command "{name}" starts with an invalid prefix (cog_ or bot_).') - - if isinstance(mem, CogEvent): - try: - self._events[mem.name].append(mem.func) - except KeyError: - self._events[mem.name] = [mem.func] - - return self - - -class Cog(metaclass=CogMeta): - """Class used for creating a TwitchIO Cog. - - Cogs help organise code and provide powerful features for creating bots. - Cogs can contain commands, events and special cog specific methods to help with checks, - before and after command invocation hooks, and cog error handlers. - - To use a cog simply subclass Cog and add it. Once added, cogs can be un-added and re-added live. - - Examples - ---------- - - .. code:: py - - # In modules/test.py - - from twitchio.ext import commands - - - class MyCog(commands.Cog): - - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - async def hello(self, ctx: commands.Context): - await ctx.send(f"Hello, {ctx.author.name}!") - - @commands.Cog.event() - async def event_message(self, message): - # An event inside a cog! - if message.echo: - return - - print(message.content) - - - def prepare(bot: commands.Bot): - # Load our cog with this module... - bot.add_cog(MyCog(bot)) - """ - - _commands: Dict[str, Command] - _events: Dict[str, List[Callable]] - - def _load_methods(self, bot) -> None: - for name, method in inspect.getmembers(self): - if isinstance(method, Command): - method._instance = self - method.cog = self - - self._commands[method.name] = method - bot.add_command(method) - - events = self._events.copy() - self._events = {} - - for event, callbacks in events.items(): - for callback in callbacks: - callback = partial(callback, self) - bot.add_event(callback=callback, name=event) - - def _unload_methods(self, bot) -> None: - for name in self._commands: - bot.remove_command(name) - - for event, callbacks in self._events.items(): - for callback in callbacks: - bot.remove_event(callback=callback) - - self._events = {} - - try: - self.cog_unload() - except Exception: - pass - - @classmethod - def event(cls, event: str = None) -> Callable[[types.FunctionType], CogEvent]: - """Add an event listener to this Cog. - - Examples - ---------- - - .. code:: py - - class MyCog(commands.Cog): - - def __init__(...): - ... - - @commands.Cog.event() - async def event_message(self, message: twitchio.Message): - print(message.content) - - @commands.Cog.event("event_ready") - async def bot_is_ready(self): - print('Bot is ready!') - """ - - def decorator(func) -> CogEvent: - event_name = event or func.__name__ - - return CogEvent(name=event_name, func=func, module=cls.__module__) - - return decorator - - @property - def name(self) -> str: - """This cogs name.""" - return self.__cogname__ # type: ignore - - @property - def commands(self) -> dict: - """The commands associated with this cog as a mapping.""" - return self._commands # type: ignore - - async def cog_error(self, exception: Exception) -> None: - pass - - async def cog_command_error(self, ctx: Context, exception: Exception) -> None: - """Method invoked when an error is raised in one of this cogs commands. - - Parameters - ------------- - ctx: :class:`Context` - The context around the invoked command. - exception: Exception - The exception raised. - """ - pass - - async def cog_check(self, ctx: Context) -> bool: - """A cog-wide check which is ran everytime a command from this Cog is invoked. - - Parameters - ------------ - ctx: :class:`Context` - The context used to try and invoke this command. - - Notes - ------- - .. note:: - - This method must return True/False or raise. If this check returns False or raises, it will fail - and an exception will be propagated to error handlers. - """ - return True - - def cog_unload(self) -> None: - pass diff --git a/twitchio/ext/commands/stringparser.py b/twitchio/ext/commands/stringparser.py deleted file mode 100644 index 61adabd2..00000000 --- a/twitchio/ext/commands/stringparser.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" -from __future__ import annotations -from typing import Dict - - -class StringParser: - def __init__(self): - self.count = 0 - self.index = 0 - self.eof = 0 - self.start = 0 - self.words: Dict[int, str] = {} - self.ignore = False - - def process_string(self, msg: str) -> Dict[int, str]: - while True: - try: - loc = msg[self.count] - except IndexError: - self.eof = self.count - word = msg[self.start : self.eof] - if not word: - break - self.words[self.index] = msg[self.start : self.eof] - break - - if loc.isspace() and not self.ignore: - self.words[self.index] = msg[self.start : self.count].replace(" ", "", 1) - self.index += 1 - self.start = self.count + 1 - - elif loc == '"': - if not self.ignore: - if self.start == self.count: # only tokenize if they're a new word - self.start = self.count + 1 - self.ignore = True - else: - self.words[self.index] = msg[self.start : self.count] - self.index += 1 - self.count += 1 - self.start = self.count - self.ignore = False - - self.count += 1 - return self.words - - def copy(self) -> StringParser: - new = self.__class__() - new.count = self.count - new.start = self.start - new.words = self.words.copy() - new.index = self.index - new.ignore = self.ignore - return new diff --git a/twitchio/ext/commands/utils.py b/twitchio/ext/commands/utils.py deleted file mode 100644 index f6d38987..00000000 --- a/twitchio/ext/commands/utils.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from typing import Any, TypeVar, Optional - -K = TypeVar("K", bound=str) -V = TypeVar("V") - - -class _CaseInsensitiveDict(dict): - def __getitem__(self, key: K) -> V: - return super().__getitem__(key.lower()) - - def __setitem__(self, key: K, value: V) -> None: - super().__setitem__(key.lower(), value) - - def __delitem__(self, key: K) -> None: - return super().__delitem__(key.lower()) - - def __contains__(self, key: K) -> bool: # type: ignore - return super().__contains__(key.lower()) - - def get(self, key: K, default: Any = None) -> Optional[V]: - return super().get(key, default) - - def pop(self, key: K, default: Any = None) -> V: - return super().pop(key, default) diff --git a/twitchio/ext/eventsub/__init__.py b/twitchio/ext/eventsub/__init__.py deleted file mode 100644 index 563f55fe..00000000 --- a/twitchio/ext/eventsub/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-2021 TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from .server import EventSubClient -from .websocket import EventSubWSClient, Websocket -from .models import * diff --git a/twitchio/ext/eventsub/http.py b/twitchio/ext/eventsub/http.py deleted file mode 100644 index e7b92a2f..00000000 --- a/twitchio/ext/eventsub/http.py +++ /dev/null @@ -1,80 +0,0 @@ -from __future__ import annotations -from typing import TYPE_CHECKING, Tuple, Dict, Type, Union, Optional -from ...http import Route - -from . import models - -if TYPE_CHECKING: - from .server import EventSubClient - from .websocket import EventSubWSClient - from .models import EventData, Subscription - -__all__ = ("EventSubHTTP",) - - -class EventSubHTTP: - def __init__(self, client: Union[EventSubClient, EventSubWSClient], token: Optional[str]): - self._client = client - self._http = client.client._http - self._token = token - - async def create_webhook_subscription( - self, event_type: Tuple[str, int, Type[EventData]], condition: Dict[str, str] - ): - payload = { - "type": event_type[0], - "version": str(event_type[1]), - "condition": condition, - "transport": {"method": "webhook", "callback": self._client.route, "secret": self._client.secret}, - } - route = Route("POST", "eventsub/subscriptions", body=payload, token=self._token) - return await self._http.request(route, paginate=False, force_app_token=True) - - async def create_websocket_subscription( - self, event_type: Tuple[str, int, Type[EventData]], condition: Dict[str, str], session_id: str, token: str - ) -> dict: - payload = { - "type": event_type[0], - "version": str(event_type[1]), - "condition": condition, - "transport": {"method": "websocket", "session_id": session_id}, - } - route = Route("POST", "eventsub/subscriptions", body=payload, token=token) - return await self._http.request(route, paginate=False, full_body=True) # type: ignore - - async def delete_subscription(self, subscription: Union[str, Subscription]): - if isinstance(subscription, models.Subscription): - return await self._http.request( - Route("DELETE", "eventsub/subscriptions", query=[("id", subscription.id)]), paginate=False - ) - return await self._http.request( - Route("DELETE", "eventsub/subscriptions", query=[("id", subscription)]), paginate=False - ) - - async def get_subscriptions( - self, status: Optional[str] = None, sub_type: Optional[str] = None, user_id: Optional[int] = None - ): - qs = [] - if status: - qs.append(("status", status)) - if sub_type: - qs.append(("type", sub_type)) - if user_id: - qs.append(("user_id", str(user_id))) - if len(qs) > 1: - raise ValueError("You cannot specify more than one filter.") - - return [ - models.Subscription(d) - for d in await self._http.request(Route("GET", "eventsub/subscriptions", query=qs), paginate=False) - ] - - async def get_status(self, status: str = None): - qs = [] - if status: - qs.append(("status", status)) - - v = await self._http.request(Route("GET", "eventsub/subscriptions", query=qs), paginate=False, full_body=True) - del v["data"] - del v["pagination"] - return v diff --git a/twitchio/ext/eventsub/models.py b/twitchio/ext/eventsub/models.py deleted file mode 100644 index 8e22334a..00000000 --- a/twitchio/ext/eventsub/models.py +++ /dev/null @@ -1,1736 +0,0 @@ -from __future__ import annotations -import datetime -import hmac -import hashlib -import logging -from enum import Enum -from typing import Dict, TYPE_CHECKING, Optional, Type, Union, Tuple, List, overload -from typing_extensions import Literal - -from aiohttp import web - -from twitchio import PartialUser, parse_timestamp as _parse_datetime - -if TYPE_CHECKING: - from .server import EventSubClient - from .websocket import EventSubWSClient - -try: - import ujson as json - - def _loads(s: str) -> dict: - return json.loads(s) - -except ModuleNotFoundError: - import json - - def _loads(s: str) -> dict: - return json.loads(s) - - -logger = logging.getLogger("twitchio.ext.eventsub") - - -class EmptyObject: - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -class Subscription: - __slots__ = "id", "status", "type", "version", "cost", "condition", "transport", "transport_method", "created_at" - - def __init__(self, data: dict): - self.id: str = data["id"] - self.status: str = data["status"] - self.type: str = data["type"] - self.version = int(data["version"]) - self.cost: int = data["cost"] - self.condition: Dict[str, str] = data["condition"] - self.created_at = _parse_datetime(data["created_at"]) - self.transport = EmptyObject() - self.transport_method: TransportType = getattr(TransportType, data["transport"]["method"]) - self.transport.method: str = data["transport"]["method"] # type: ignore - - if self.transport_method is TransportType.webhook: - self.transport.callback: str = data["transport"]["callback"] # type: ignore - else: - self.transport.callback: str = "" # type: ignore # compatibility - self.transport.session_id: str = data["transport"]["session_id"] # type: ignore - - -class Headers: - """ - The headers of the inbound EventSub message - - Attributes - ----------- - message_id: :class:`str` - The unique ID of the message - message_retry: :class:`int` - Unknown - signature: :class:`str` - The signature associated with the message - subscription_type: :class:`str` - The type of the subscription on the inbound message - subscription_version: :class:`str` - The version of the subscription. - timestamp: :class:`datetime.datetime` - The timestamp the message was sent at - """ - - def __init__(self, request: web.Request): - self.message_id: str = request.headers["Twitch-Eventsub-Message-Id"] - self.message_retry: int = int(request.headers["Twitch-Eventsub-Message-Retry"]) - self.message_type: str = request.headers["Twitch-Eventsub-Message-Type"] - self.signature: str = request.headers["Twitch-Eventsub-Message-Signature"] - self.subscription_type: str = request.headers["Twitch-Eventsub-Subscription-Type"] - self.subscription_version: str = request.headers["Twitch-Eventsub-Subscription-Version"] - self.timestamp = _parse_datetime(request.headers["Twitch-Eventsub-Message-Timestamp"]) - self._raw_timestamp = request.headers["Twitch-Eventsub-Message-Timestamp"] - - -class WebsocketHeaders: - """ - The headers of the inbound Websocket EventSub message - - Attributes - ----------- - message_id: :class:`str` - The unique ID of the message - message_type: :class:`str` - The type of the message coming through - message_retry: :class:`int` - Kept for compatibility with :class:`Headers` - signature: :class:`str` - Kept for compatibility with :class:`Headers` - subscription_type: :class:`str` - The type of the subscription on the inbound message - subscription_version: :class:`str` - The version of the subscription. - timestamp: :class:`datetime.datetime` - The timestamp the message was sent at - """ - - def __init__(self, frame: dict): - meta = frame["metadata"] - self.message_id: str = meta["message_id"] - self.timestamp = _parse_datetime(meta["message_timestamp"]) - self.message_type: Literal["notification", "revocation", "reconnect", "session_keepalive"] = meta[ - "message_type" - ] - self.message_retry: int = 0 # don't make breaking changes with the Header class - self.signature: str = "" - self.subscription_type: Optional[str] - self.subscription_version: Optional[str] - if frame["payload"]: - self.subscription_type = frame["payload"]["subscription"]["type"] - self.subscription_version = frame["payload"]["subscription"]["version"] - else: - self.subscription_type = None - self.subscription_version = None - - -class BaseEvent: - """ - The base of all the event classes - - Attributes - ----------- - subscription: Optional[:class:`Subscription`] - The subscription attached to the message. This is only optional when using the websocket eventsub transport - headers: :class`Headers` - The headers received with the message - """ - - __slots__ = ("_client", "_raw_data", "subscription", "headers") - - @overload - def __init__(self, client: EventSubClient, _data: str, request: web.Request): - ... - - @overload - def __init__(self, client: EventSubWSClient, _data: dict, request: None): - ... - - def __init__( - self, client: Union[EventSubClient, EventSubWSClient], _data: Union[str, dict], request: Optional[web.Request] - ): - self._client = client - self._raw_data = _data - - if isinstance(_data, str): - data: dict = _loads(_data) - else: - data = _data - - self.headers: Union[Headers, WebsocketHeaders] - self.subscription: Optional[Subscription] - - if request: - data: dict = _loads(_data) - self.headers = Headers(request) - self.subscription = Subscription(data["subscription"]) - self.setup(data) - else: - self.headers = WebsocketHeaders(data) - if data["payload"]: - self.subscription = Subscription(data["payload"]["subscription"]) - else: - self.subscription = None - self.setup(data["payload"]) - - def setup(self, data: dict): - pass - - def verify(self): - """ - Only used in webhook transport types. Verifies the message is valid - """ - hmac_message = (self.headers.message_id + self.headers._raw_timestamp + self._raw_data).encode("utf-8") # type: ignore - secret = self._client.secret.encode("utf-8") - digest = hmac.new(secret, msg=hmac_message, digestmod=hashlib.sha256).hexdigest() - - if not hmac.compare_digest(digest, self.headers.signature[7:]): - logger.warning(f"Recieved a message with an invalid signature, discarding.") - return web.Response(status=400) - - return web.Response(status=200) - - -class RevokationEvent(BaseEvent): - pass - - -class ChallengeEvent(BaseEvent): - """ - A challenge event. - - .. note:: - These are only dispatched when using :class:`~twitchio.ext.eventsub.EventSubClient` - - Attributes - ----------- - challenge: :class`str` - The challenge received from twitch - """ - - __slots__ = ("challenge",) - - def setup(self, data: dict): - self.challenge: str = data["challenge"] - - def verify(self): - hmac_message = (self.headers.message_id + self.headers._raw_timestamp + self._raw_data).encode("utf-8") # type: ignore - secret = self._client.secret.encode("utf-8") - digest = hmac.new(secret, msg=hmac_message, digestmod=hashlib.sha256).hexdigest() - - if not hmac.compare_digest(digest, self.headers.signature[7:]): - logger.warning(f"Recieved a message with an invalid signature, discarding.") - return web.Response(status=400) - - return web.Response(status=200, text=self.challenge) - - -class ReconnectEvent(BaseEvent): - """ - A reconnect event. Called by twitch when the websocket needs to be disconnected for maintenance or other reasons - - .. note:: - These are only dispatched when using :class:`~twitchio.ext.eventsub.EventSubWSClient` - - Attributes - ----------- - reconnect_url: :class:`str` - The URL to reconnect to - connected_at: :class:`datetime.datetime` - When the original websocket connected - """ - - __slots__ = ("reconnect_url", "connected_at") - - def __init__( - self, client: Union[EventSubClient, EventSubWSClient], _data: Union[str, dict], request: Optional[web.Request] - ): - # we skip the super init here because reconnect events dont have headers or subscription information - - self._client = client - self._raw_data = _data - - if isinstance(_data, str): - data: dict = _loads(_data) - else: - data = _data - - self.setup(data["payload"]) - - def setup(self, data: dict): - self.reconnect_url: str = data["session"]["reconnect_url"] - self.connected_at: datetime.datetime = _parse_datetime(data["session"]["connected_at"]) - - -class KeepAliveEvent(BaseEvent): - """ - A keep-alive event. Called by twitch when no message has been sent for more than ``keepalive_timeout`` - - .. note:: - These are only dispatched when using :class:`~twitchio.ext.eventsub.EventSubWSClient` - - """ - - pass - - -class NotificationEvent(BaseEvent): - """ - A notification event - - Attributes - ----------- - data: :class:`models._DataType` - The data associated with this event - """ - - __slots__ = ("data",) - - def setup(self, _data: dict): - data: dict = _data["event"] - typ = self.subscription.type - if typ not in SubscriptionTypes._type_map: - raise ValueError(f"Unexpected subscription type '{typ}'") - - self.data: _DataType = SubscriptionTypes._type_map[typ](self._client, data) - - -def _transform_user(client: EventSubClient, data: dict, field: str) -> PartialUser: - return client.client.create_user(int(data[field + "_id"]), data[field + "_name"]) - - -class EventData: - __slots__ = () - - -class ChannelBanData(EventData): - """ - A Ban event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user that was banned - broadcaster: :class:`twitchio.PartialUser` - The broadcaster who's channel the ban occurred in - moderator: :class:`twitchio.PartialUser` - The moderator responsible for the ban - reason: :class:`str` - The reason for the ban - ends_at: Optional[:class:`datetime.datetime`] - When the ban ends at. Could be ``None`` - permanant: :class:`bool` - A typo of ``permanent`` Kept for backwards compatibility - permanent: :class:`bool` - Whether the ban is permanent - """ - - __slots__ = "user", "broadcaster", "moderator", "reason", "ends_at", "permenant", "permanent" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.moderator = _transform_user(client, data, "moderator_user") - self.reason: str = data["reason"] - self.ends_at: Optional[datetime.datetime] = data["ends_at"] and _parse_datetime(data["ends_at"]) - self.permenant: bool = data["is_permanent"] - self.permanent = self.permenant # fix the spelling while keeping backwards compat - - -class ChannelSubscribeData(EventData): - """ - A Subscription event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user who subscribed - broadcaster: :class:`twitchio.PartialUser` - The channel that was subscribed to - tier: :class:`int` - The tier of the subscription - is_gift: :class:`bool` - Whether the subscription was a gift or not - """ - - __slots__ = "user", "broadcaster", "tier", "is_gift" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.tier = int(data["tier"]) - self.is_gift: bool = data["is_gift"] - - -class ChannelSubscriptionEndData(EventData): - """ - A Subscription End event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user who subscribed - broadcaster: :class:`twitchio.PartialUser` - The channel that was subscribed to - tier: :class:`int` - The tier of the subscription - is_gift: :class:`bool` - Whether the subscription was a gift or not - """ - - __slots__ = "user", "broadcaster", "tier", "is_gift" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.tier = int(data["tier"]) - self.is_gift: bool = data["is_gift"] - - -class ChannelSubscriptionGiftData(EventData): - """ - A Subscription Gift event - Explicitly, the act of giving another user a Subscription. - Receiving a gift-subscription uses ChannelSubscribeData above, with is_gift is ``True`` - - Attributes - ----------- - is_anonymous: :class:`bool` - Whether the gift sub was anonymous - user: Optional[:class:`twitchio.PartialUser`] - The user that gifted subs. Will be ``None`` if ``is_anonymous`` is ``True`` - broadcaster: :class:`twitchio.PartialUser` - The channel that was subscribed to - tier: :class:`int` - The tier of the subscription - total: :class:`int` - The total number of subs gifted by a user at once - cumulative_total: Optional[:class:`int`] - The total number of subs gifted by a user overall. Will be ``None`` if ``is_anonymous`` is ``True`` - """ - - __slots__ = "is_anonymous", "user", "broadcaster", "tier", "total", "cumulative_total" - - def __init__(self, client: EventSubClient, data: dict): - self.is_anonymous: bool = data["is_anonymous"] - self.user: Optional[PartialUser] = None if self.is_anonymous else _transform_user(client, data, "user") - self.broadcaster: Optional[PartialUser] = _transform_user(client, data, "broadcaster_user") - self.tier = int(data["tier"]) - self.total = int(data["total"]) - self.cumulative_total: Optional[int] = None if self.is_anonymous else int(data["cumulative_total"]) - - -class ChannelSubscriptionMessageData(EventData): - """ - A Subscription Message event. - A combination of resubscriptions + the messages users type as part of the resub. - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user who subscribed - broadcaster: :class:`twitchio.PartialUser` - The channel that was subscribed to - tier: :class:`int` - The tier of the subscription - message: :class:`str` - The user's resubscription message - emote_data: :class:`list` - emote data within the user's resubscription message. Not the emotes themselves - cumulative_months: :class:`int` - The total number of months a user has subscribed to the channel - streak: Optional[:class:`int`] - The total number of months subscribed in a row. ``None`` if the user declines to share it. - duration: :class:`int` - The length of the subscription. Typically 1, but some users may buy subscriptions for several months. - """ - - __slots__ = "user", "broadcaster", "tier", "message", "emote_data", "cumulative_months", "streak", "duration" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.tier = int(data["tier"]) - self.message: str = data["message"]["text"] - self.emote_data: List[Dict] = data["message"].get("emotes", []) - self.cumulative_months: int = data["cumulative_months"] - self.streak: Optional[int] = data["streak_months"] - self.duration: int = data["duration_months"] - - -class ChannelCheerData(EventData): - """ - A Cheer event - - Attributes - ---------- - is_anonymous: :class:`bool` - Whether the cheer was anonymous - user: Optional[:class:`twitchio.PartialUser`] - The user that cheered. Will be ``None`` if ``is_anonymous`` is ``True`` - broadcaster: :class:`twitchio.PartialUser` - The channel the cheer happened on - message: :class:`str` - The message sent along with the bits - bits: :class:`int` - The amount of bits sent - """ - - __slots__ = "user", "broadcaster", "is_anonymous", "message", "bits" - - def __init__(self, client: EventSubClient, data: dict): - self.is_anonymous: bool = data["is_anonymous"] - self.user: Optional[PartialUser] = _transform_user(client, data, "user") if not self.is_anonymous else None - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.message: str = data["message"] - self.bits = int(data["bits"]) - - -class ChannelUpdateData(EventData): - """ - A Channel Update event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel that was updated - title: :class:`str` - The title of the stream - language: :class:`str` - The language of the channel - category_id: :class:`str` - The category the stream is in - category_name: :class:`str` - The category the stream is in - is_mature: :class:`bool` - Whether the channel is marked as mature by the broadcaster - """ - - __slots__ = "broadcaster", "title", "language", "category_id", "category_name", "is_mature" - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.title: str = data["title"] - self.language: str = data["language"] - self.category_id: str = data["category_id"] - self.category_name: str = data["category_name"] - self.is_mature: bool = data["is_mature"] == "true" - - -class ChannelUnbanData(EventData): - """ - A Channel Unban event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user that was unbanned - broadcaster: :class:`twitchio.PartialUser` - The channel the unban occurred in - moderator: :class`twitchio.PartialUser` - The moderator that preformed the unban - """ - - __slots__ = "user", "broadcaster", "moderator" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.moderator = _transform_user(client, data, "moderator_user") - - -class ChannelFollowData(EventData): - """ - A Follow event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user that followed - broadcaster: :class:`twitchio.PartialUser` - The channel that was followed - followed_at: :class:`datetime.datetime` - When the follow occurred - """ - - __slots__ = "user", "broadcaster", "followed_at" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.followed_at = _parse_datetime(data["followed_at"]) - - -class ChannelRaidData(EventData): - """ - A Raid event - - Attributes - ----------- - raider: :class:`twitchio.PartialUser` - The person initiating the raid - reciever: :class:`twitchio.PartialUser` - The person recieving the raid - viewer_count: :class:`int` - The amount of people raiding - """ - - __slots__ = "raider", "reciever", "viewer_count" - - def __init__(self, client: EventSubClient, data: dict): - self.raider = _transform_user(client, data, "from_broadcaster_user") - self.reciever = _transform_user(client, data, "to_broadcaster_user") - self.viewer_count: int = data["viewers"] - - -class ChannelModeratorAddRemoveData(EventData): - """ - A Moderator Add/Remove event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user being added or removed from the moderator status - broadcaster: :class:`twitchio.PartialUser` - The channel that is having a moderator added/removed - """ - - __slots__ = "broadcaster", "user" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.broadcaster = _transform_user(client, data, "broadcaster_user") - - -class CustomReward: - """ - A Custom Reward - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel that has this reward - id: :class:`str` - The ID of the reward - title: :class:`str` - The title of the reward - cost: :class:`int` - The cost of the reward in Channel Points - prompt: :class:`str` - The prompt of the reward - enabled: Optional[:class:`bool`] - Whether or not the reward is enabled. Will be `None` for Redemption events. - paused: Optional[:class:`bool`] - Whether or not the reward is paused. Will be `None` for Redemption events. - in_stock: Optional[:class:`bool`] - Whether or not the reward is in stock. Will be `None` for Redemption events. - cooldown_until: Optional[:class:`datetime.datetime`] - How long until the reward is off cooldown and can be redeemed again. Will be `None` for Redemption events. - input_required: Optional[:class:`bool`] - Whether or not the reward requires an input. Will be `None` for Redemption events. - redemptions_skip_queue: Optional[:class:`bool`] - Whether or not redemptions for this reward skips the queue. Will be `None` for Redemption events. - redemptions_current_stream: Optional[:class:`int`] - How many redemptions of this reward have been redeemed for this stream. Will be `None` for Redemption events. - max_per_stream: Tuple[:class:`bool`, :class:`int`] - Whether or not a per-stream redemption limit is in place, and if so, the maximum number of redemptions allowed - per stream. Will be `None` for Redemption events. - max_per_user_per_stream: Tuple[:class:`bool`, :class:`int`] - Whether or not a per-user-per-stream redemption limit is in place, and if so, the maximum number of redemptions - allowed per user per stream. Will be `None` for Redemption events. - cooldown: Tuple[:class:`bool`, :class:`int`] - Whether or not a global cooldown is in place, and if so, the number of seconds until the reward can be redeemed - again. Will be `None` for Redemption events. - background_color: Optional[:class:`str`] - Hexadecimal color code for the background of the reward. - image: Optional[:class:`str`] - Image URL for the reward. - """ - - __slots__ = ( - "broadcaster", - "id", - "title", - "cost", - "prompt", - "enabled", - "paused", - "in_stock", - "cooldown_until", - "input_required", - "redemptions_skip_queue", - "redemptions_current_stream", - "max_per_stream", - "max_per_user_stream", - "cooldown", - "background_color", - "image", - ) - - def __init__(self, data, broadcaster): - self.broadcaster: PartialUser = broadcaster - - self.id: str = data["id"] - - self.title: str = data["title"] - self.cost: int = data["cost"] - self.prompt: str = data["prompt"] - - self.enabled: Optional[bool] = data.get("is_enabled", None) - self.paused: Optional[bool] = data.get("is_paused", None) - self.in_stock: Optional[bool] = data.get("is_in_stock", None) - - self.cooldown_until: Optional[datetime.datetime] = ( - _parse_datetime(data["cooldown_expires_at"]) if data.get("cooldown_expires_at", None) else None - ) - - self.input_required: Optional[bool] = data.get("is_user_input_required", None) - self.redemptions_skip_queue: Optional[bool] = data.get("should_redemptions_skip_request_queue", None) - self.redemptions_current_stream: Optional[bool] = data.get("redemptions_redeemed_current_stream", None) - - self.max_per_stream: Tuple[Optional[bool], Optional[int]] = ( - data.get("max_per_stream", {}).get("is_enabled"), - data.get("max_per_stream", {}).get("value"), - ) - self.max_per_user_stream: Tuple[Optional[bool], Optional[int]] = ( - data.get("max_per_user_per_stream", {}).get("is_enabled"), - data.get("max_per_user_per_stream", {}).get("value"), - ) - self.cooldown: Tuple[Optional[bool], Optional[int]] = ( - data.get("global_cooldown", {}).get("is_enabled"), - data.get("global_cooldown", {}).get("seconds"), - ) - - self.background_color: Optional[str] = data.get("background_color", None) - self.image: Optional[str] = data.get("image", data.get("default_image", {})).get("url_1x", None) - - -class CustomRewardAddUpdateRemoveData(EventData): - """ - A Custom Reward Add/Update/Remove event - - Attributes - ----------- - id: :class:`str` - The ID of the custom reward - broadcaster: :class:`twitchio.PartialUser` - The channel the custom reward was modified in - reward: :class:`CustomReward` - The reward object - """ - - __slots__ = "reward", "broadcaster", "id" - - def __init__(self, client: EventSubClient, data: dict): - self.id: str = data["id"] - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.reward = CustomReward(data, self.broadcaster) - - -class CustomRewardRedemptionAddUpdateData(EventData): - """ - A Custom Reward Redemption event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel the redemption occurred in - user: :class:`twitchio.PartialUser` - The user that redeemed the reward - id: :class:`str` - The ID of the redemption - input: :class:`str` - The user input, if present. This will be an empty string if it is not present - status: :class:`str` - One of "unknown", "unfulfilled", "fulfilled", or "cancelled" - redeemed_at: :class:`datetime.datetime` - When the reward was redeemed at - reward: :class:`CustomReward` - The reward object - """ - - __slots__ = "broadcaster", "id", "user", "input", "status", "reward", "redeemed_at" - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.user = _transform_user(client, data, "user") - self.id: str = data["id"] - self.input: str = data["user_input"] - self.status: Literal["unknown", "unfulfilled", "fulfilled", "cancelled"] = data["status"] - self.redeemed_at = _parse_datetime(data["redeemed_at"]) - self.reward = CustomReward(data["reward"], self.broadcaster) - - -class HypeTrainContributor: - """ - A Contributor to a Hype Train - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user - type: :class:`str` - One of "bits, "subscription" or "other". The way they contributed to the hype train - total: :class:`int` - How many points they've contributed to the Hype Train - """ - - __slots__ = "user", "type", "total" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.type: Literal["bits", "subscription", "other"] = data["type"] # one of bits, subscription - self.total: int = data["total"] - - -class HypeTrainBeginProgressData(EventData): - """ - A Hype Train Begin/Progress event - - Attributes - ----------- - - broadcaster: :class:`twitchio.PartialUser` - The channel the Hype Train occurred in - total_points: :class:`int` - The total amounts of points in the Hype Train - progress: :class:`int` - The progress of the Hype Train towards the next level - goal: :class:`int` - The goal to reach the next level - started: :class:`datetime.datetime` - When the Hype Train started - expires: :class:`datetime.datetime` - When the Hype Train ends - top_contributions: List[:class:`HypeTrainContributor`] - The top contributions of the Hype Train - last_contribution: :class:`HypeTrainContributor` - The last contributor to the Hype Train - level: :class:`int` - The current level of the Hype Train - """ - - __slots__ = ( - "broadcaster", - "total_points", - "progress", - "goal", - "top_contributions", - "last_contribution", - "started", - "expires", - "level", - ) - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.total_points: int = data["total"] - self.progress: int = data["progress"] - self.goal: int = data["goal"] - self.started = _parse_datetime(data["started_at"]) - self.expires = _parse_datetime(data["expires_at"]) - self.top_contributions = [HypeTrainContributor(client, d) for d in data["top_contributions"]] - self.last_contribution = HypeTrainContributor(client, data["last_contribution"]) - self.level: int = data["level"] - - -class HypeTrainEndData(EventData): - """ - A Hype Train End event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel the Hype Train occurred in - total_points: :class:`int` - The total amounts of points in the Hype Train - level: :class:`int` - The level the hype train reached - started: :class:`datetime.datetime` - When the Hype Train started - top_contributions: List[:class:`HypeTrainContributor`] - The top contributions of the Hype Train - cooldown_ends_at: :class:`datetime.datetime` - When another Hype Train can begin - """ - - __slots__ = "broadcaster", "level", "total_points", "top_contributions", "started", "ended", "cooldown_ends_at" - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.total_points: int = data["total"] - self.level: int = data["level"] - self.started = _parse_datetime(data["started_at"]) - self.ended = _parse_datetime(data["ended_at"]) - self.cooldown_ends_at = _parse_datetime(data["cooldown_ends_at"]) - self.top_contributions = [HypeTrainContributor(client, d) for d in data["top_contributions"]] - - -class PollChoice: - """ - A Poll Choice - - Attributes - ----------- - choice_id: :class:`str` - The ID of the choice - title: :class:`str` - The title of the choice - bits_votes: :class:`int` - How many votes were cast using Bits - - .. warning:: - - Twitch have removed support for voting with bits. - This will return as 0 - - channel_points_votes: :class:`int` - How many votes were cast using Channel Points - votes: :class:`int` - The total number of votes, including votes cast using Bits and Channel Points - """ - - __slots__ = "choice_id", "title", "bits_votes", "channel_points_votes", "votes" - - def __init__(self, data): - self.choice_id: str = data["id"] - self.title: str = data["title"] - self.bits_votes: int = data.get("bits_votes", 0) - self.channel_points_votes: int = data.get("channel_points_votes", 0) - self.votes: int = data.get("votes", 0) - - -class BitsVoting: - """ - Information on voting on a poll with Bits - - Attributes - ----------- - is_enabled: :class:`bool` - Whether users can use Bits to vote on the poll - amount_per_vote: :class:`int` - How many Bits are required to cast an extra vote - - .. warning:: - - Twitch have removed support for voting with bits. - This will return as False and 0 respectively - - """ - - __slots__ = "is_enabled", "amount_per_vote" - - def __init__(self, data): - self.is_enabled: bool = data["is_enabled"] - self.amount_per_vote: int = data["amount_per_vote"] - - -class ChannelPointsVoting: - """ - Information on voting on a poll with Channel Points - - Attributes - ----------- - is_enabled: :class:`bool` - Whether users can use Channel Points to vote on the poll - amount_per_vote: :class:`int` - How many Channel Points are required to cast an extra vote - """ - - __slots__ = "is_enabled", "amount_per_vote" - - def __init__(self, data): - self.is_enabled: bool = data["is_enabled"] - self.amount_per_vote: int = data["amount_per_vote"] - - -class PollStatus(Enum): - """ - The status of a poll. - - ACTIVE: Poll is currently in progress. - COMPLETED: Poll has reached its `ended_at` time. - TERMINATED: Poll has been manually terminated before its `ended_at` time. - ARCHIVED: Poll is no longer visible on the channel. - MODERATED: Poll is no longer visible to any user on Twitch. - INVALID: Something went wrong determining the state. - """ - - ACTIVE = "active" - COMPLETED = "completed" - TERMINATED = "terminated" - ARCHIVED = "archived" - MODERATED = "moderated" - INVALID = "invalid" - - -class PollBeginProgressData(EventData): - """ - A Poll Begin/Progress event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel the poll occured in - poll_id: :class:`str` - The ID of the poll - title: :class:`str` - The title of the poll - choices: List[:class:`PollChoice`] - The choices in the poll - bits_voting: :class:`BitsVoting` - Information on voting on the poll with Bits - - .. warning:: - - Twitch have removed support for voting with bits. - - channel_points_voting: :class:`ChannelPointsVoting` - Information on voting on the poll with Channel Points - started_at: :class:`datetime.datetime` - When the poll started - ends_at: :class:`datetime.datetime` - When the poll is set to end - ... - """ - - __slots__ = ( - "broadcaster", - "poll_id", - "title", - "choices", - "bits_voting", - "channel_points_voting", - "started_at", - "ends_at", - ) - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.poll_id: str = data["id"] - self.title: str = data["title"] - self.choices = [PollChoice(c) for c in data["choices"]] - self.bits_voting = BitsVoting(data["bits_voting"]) - self.channel_points_voting = ChannelPointsVoting(data["channel_points_voting"]) - self.started_at = _parse_datetime(data["started_at"]) - self.ends_at = _parse_datetime(data["ends_at"]) - - -class PollEndData(EventData): - """ - A Poll End event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel the poll occured in - poll_id: :class:`str` - The ID of the poll - title: :class:`str` - The title of the poll - choices: List[:class:`PollChoice`] - The choices in the poll - bits_voting: :class:`BitsVoting` - Information on voting on the poll with Bits - - .. warning:: - - Twitch have removed support for voting with bits. - - channel_points_voting: :class:`ChannelPointsVoting` - Information on voting on the poll with Channel Points - status: :class:`PollStatus` - How the poll ended - started_at: :class:`datetime.datetime` - When the poll started - ended_at: :class:`datetime.datetime` - When the poll is set to end - """ - - __slots__ = ( - "broadcaster", - "poll_id", - "title", - "choices", - "bits_voting", - "channel_points_voting", - "status", - "started_at", - "ended_at", - ) - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.poll_id: str = data["id"] - self.title: str = data["title"] - self.choices = [PollChoice(c) for c in data["choices"]] - self.bits_voting = BitsVoting(data["bits_voting"]) - self.channel_points_voting = ChannelPointsVoting(data["channel_points_voting"]) - self.status = PollStatus(data["status"].lower()) - self.started_at = _parse_datetime(data["started_at"]) - self.ended_at = _parse_datetime(data["ended_at"]) - - -class Predictor: - """ - A Predictor - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user who predicted an outcome - channel_points_used: :class:`int` - How many Channel Points the user used to predict this outcome - channel_points_won: :class:`int` - How many Channel Points was distributed to the user. - Will be `None` if the Prediction is unresolved, cancelled (refunded), or the user predicted the losing outcome. - """ - - __slots__ = "user", "channel_points_used", "channel_points_won" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.channel_points_used: int = data["channel_points_used"] - self.channel_points_won: int = data["channel_points_won"] - - -class PredictionOutcome: - """ - A Prediction Outcome - - Attributes - ----------- - outcome_id: :class:`str` - The ID of the outcome - title: :class:`str` - The title of the outcome - channel_points: :class:`int` - The amount of Channel Points that have been bet for this outcome - color: :class:`str` - The color of the outcome. Can be `blue` or `pink` - users: :class:`int` - The number of users who predicted the outcome - top_predictors: List[:class:`Predictor`] - The top predictors of the outcome - """ - - __slots__ = "outcome_id", "title", "channel_points", "color", "users", "top_predictors" - - def __init__(self, client: EventSubClient, data: dict): - self.outcome_id: str = data["id"] - self.title: str = data["title"] - self.channel_points: int = data.get("channel_points", 0) - self.color: str = data["color"] - self.users: int = data.get("users", 0) - self.top_predictors = [Predictor(client, x) for x in data.get("top_predictors", [])] - - @property - def colour(self) -> str: - """The colour of the prediction. Alias to color.""" - return self.color - - -class PredictionStatus(Enum): - """ - The status of a Prediction. - - ACTIVE: Prediction is active and viewers can make predictions. - LOCKED: Prediction has been locked and viewers can no longer make predictions. - RESOLVED: A winning outcome has been chosen and the Channel Points have been distributed to the users who guessed the correct outcome. - CANCELED: Prediction has been canceled and the Channel Points have been refunded to participants. - """ - - ACTIVE = "active" - LOCKED = "locked" - RESOLVED = "resolved" - CANCELED = "canceled" - - -class PredictionBeginProgressData(EventData): - """ - A Prediction Begin/Progress event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel the prediction occured in - prediction_id: :class:`str` - The ID of the prediction - title: :class:`str` - The title of the prediction - outcomes: List[:class:`PredictionOutcome`] - The outcomes for the prediction - started_at: :class:`datetime.datetime` - When the prediction started - locks_at: :class:`datetime.datetime` - When the prediction is set to be locked - """ - - __slots__ = "broadcaster", "prediction_id", "title", "outcomes", "started_at", "locks_at" - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.prediction_id: str = data["id"] - self.title: str = data["title"] - self.outcomes = [PredictionOutcome(client, x) for x in data["outcomes"]] - self.started_at = _parse_datetime(data["started_at"]) - self.locks_at = _parse_datetime(data["locks_at"]) - - -class PredictionLockData(EventData): - """ - A Prediction Begin/Progress event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel the prediction occured in - prediction_id: :class:`str` - The ID of the prediction - title: :class:`str` - The title of the prediction - outcomes: List[:class:`PredictionOutcome`] - The outcomes for the prediction - started_at: :class:`datetime.datetime` - When the prediction started - locked_at: :class:`datetime.datetime` - When the prediction was locked - """ - - __slots__ = "broadcaster", "prediction_id", "title", "outcomes", "started_at", "locked_at" - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.prediction_id: str = data["id"] - self.title: str = data["title"] - self.outcomes = [PredictionOutcome(client, x) for x in data["outcomes"]] - self.started_at = _parse_datetime(data["started_at"]) - self.locked_at = _parse_datetime(data["locked_at"]) - - -class PredictionEndData(EventData): - """ - A Prediction Begin/Progress event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel the prediction occured in - prediction_id: :class:`str` - The ID of the prediction - title: :class:`str` - The title of the prediction - winning_outcome_id: :class:`str` - The ID of the outcome that won - outcomes: List[:class:`PredictionOutcome`] - The outcomes for the prediction - status: :class:`PredictionStatus` - How the prediction ended - started_at: :class:`datetime.datetime` - When the prediction started - ended_at: :class:`datetime.datetime` - When the prediction ended - """ - - __slots__ = ( - "broadcaster", - "prediction_id", - "title", - "winning_outcome_id", - "outcomes", - "status", - "started_at", - "ended_at", - ) - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.prediction_id: str = data["id"] - self.title: str = data["title"] - self.winning_outcome_id: str = data["winning_outcome_id"] - self.outcomes = [PredictionOutcome(client, x) for x in data["outcomes"]] - self.status = PredictionStatus(data["status"].lower()) - self.started_at = _parse_datetime(data["started_at"]) - self.ended_at = _parse_datetime(data["ended_at"]) - - -class StreamOnlineData(EventData): - """ - A Stream Start event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel that went live - id: :class:`str` - Some sort of ID for the stream - type: :class:`str` - One of "live", "playlist", "watch_party", "premier", or "rerun". The type of live event. - started_at: :class:`datetime.datetime` - """ - - __slots__ = "broadcaster", "id", "type", "started_at" - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - self.id: str = data["id"] - self.type: Literal["live", "playlist", "watch_party", "premier", "rerun"] = data["type"] - self.started_at = _parse_datetime(data["started_at"]) - - -class StreamOfflineData(EventData): - """ - A Stream End event - - Attributes - ----------- - broadcaster: :class:`twitchio.PartialUser` - The channel that stopped streaming - """ - - __slots__ = ("broadcaster",) - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster = _transform_user(client, data, "broadcaster_user") - - -class UserAuthorizationGrantedData(EventData): - """ - An Authorization Granted event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user that has granted authorization for your app - client_id: :class:`str` - The client id of the app that had its authorization granted - """ - - __slots__ = "client_id", "user" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.client_id: str = data["client_id"] - - -class UserAuthorizationRevokedData(EventData): - """ - An Authorization Revokation event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user that has revoked authorization for your app - client_id: :class:`str` - The client id of the app that had its authorization revoked - """ - - __slots__ = "client_id", "user" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.client_id: str = data["client_id"] - - -class UserUpdateData(EventData): - """ - A User Update event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user that was updated - email: Optional[:class:`str`] - The users email, if you have permission to read this information - description: :class:`str` - The channels description (displayed as ``bio``) - """ - - __slots__ = "user", "email", "description" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "user") - self.email: Optional[str] = data["email"] - self.description: str = data["description"] - - -class ChannelGoalBeginProgressData(EventData): - """ - A goal begin event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The broadcaster that started the goal - id : :class:`str` - The ID of the goal event - type: :class:`str` - The goal type - description: :class:`str` - The goal description - current_amount: :class:`int` - The goal current amount - target_amount: :class:`int` - The goal target amount - started_at: :class:`datetime.datetime` - The datetime the goal was started - """ - - __slots__ = "user", "id", "type", "description", "current_amount", "target_amount", "started_at" - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "broadcaster_user") - self.id: str = data["id"] - self.type: str = data["type"] - self.description: str = data["description"] - self.current_amount: int = data["current_amount"] - self.target_amount: int = data["target_amount"] - self.started_at: datetime.datetime = _parse_datetime(data["started_at"]) - - -class ChannelGoalEndData(EventData): - """ - A goal end event - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The broadcaster that ended the goal - id : :class:`str` - The ID of the goal event - type: :class:`str` - The goal type - description: :class:`str` - The goal description - is_achieved: :class:`bool` - Whether the goal is achieved - current_amount: :class:`int` - The goal current amount - target_amount: :class:`int` - The goal target amount - started_at: :class:`datetime.datetime` - The datetime the goal was started - ended_at: :class:`datetime.datetime` - The datetime the goal was ended - """ - - __slots__ = ( - "user", - "id", - "type", - "description", - "current_amount", - "target_amount", - "started_at", - "is_achieved", - "ended_at", - ) - - def __init__(self, client: EventSubClient, data: dict): - self.user = _transform_user(client, data, "broadcaster_user") - self.id: str = data["id"] - self.type: str = data["type"] - self.description: str = data["description"] - self.is_achieved: bool = data["is_achieved"] - self.current_amount: int = data["current_amount"] - self.target_amount: int = data["target_amount"] - self.started_at: datetime.datetime = _parse_datetime(data["started_at"]) - self.ended_at: datetime.datetime = _parse_datetime(data["ended_at"]) - - -class ChannelShieldModeBeginData(EventData): - """ - Represents a Shield Mode activation status. - - Attributes - ----------- - broadcaster: :class:`~twitchio.PartialUser` - The broadcaster whose Shield Mode status was updated. - moderator: :class:`~twitchio.PartialUser` - The moderator that updated the Shield Mode staus. - started_at: :class:`datetime.datetime` - The UTC datetime of when Shield Mode was last activated. - """ - - __slots__ = ("broadcaster", "moderator", "started_at") - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster: PartialUser = _transform_user(client, data, "broadcaster_user") - self.moderator: PartialUser = _transform_user(client, data, "moderator_user") - self.started_at: datetime.datetime = _parse_datetime(data["started_at"]) - - -class ChannelShieldModeEndData(EventData): - """ - Represents a Shield Mode activation status. - - Attributes - ----------- - broadcaster: :class:`~twitchio.PartialUser` - The broadcaster whose Shield Mode status was updated. - moderator: :class:`~twitchio.PartialUser` - The moderator that updated the Shield Mode staus. - ended_at: :class:`datetime.datetime` - The UTC datetime of when Shield Mode was last deactivated. - """ - - __slots__ = ("broadcaster", "moderator", "ended_at") - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster: PartialUser = _transform_user(client, data, "broadcaster_user") - self.moderator: PartialUser = _transform_user(client, data, "moderator_user") - self.ended_at: datetime.datetime = _parse_datetime(data["ended_at"]) - - -class ChannelShoutoutCreateData(EventData): - """ - Represents a Shoutout event being sent. - - Requires the ``moderator:read:shoutouts`` or ``moderator:manage:shoutouts`` scope. - - Attributes - ----------- - broadcaster: :class:`~twitchio.PartialUser` - The broadcaster from who sent the shoutout event. - moderator: :class:`~twitchio.PartialUser` - The moderator who sent the shoutout event. - to_broadcaster: :class:`~twitchio.PartialUser` - The broadcaster who the shoutout was sent to. - started_at: :class:`datetime.datetime` - The datetime the shoutout was sent. - viewer_count: :class:`int` - The viewer count at the time of the shoutout - cooldown_ends_at: :class:`datetime.datetime` - The datetime the broadcaster can send another shoutout. - target_cooldown_ends_at: :class:`datetime.datetime` - The datetime the broadcaster can send another shoutout to the same broadcaster. - """ - - __slots__ = ( - "broadcaster", - "moderator", - "to_broadcaster", - "started_at", - "viewer_count", - "cooldown_ends_at", - "target_cooldown_ends_at", - ) - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster: PartialUser = _transform_user(client, data, "broadcaster_user") - self.moderator: PartialUser = _transform_user(client, data, "moderator_user") - self.to_broadcaster: PartialUser = _transform_user(client, data, "to_broadcaster_user") - self.started_at: datetime.datetime = _parse_datetime(data["started_at"]) - self.viewer_count: int = data["viewer_count"] - self.cooldown_ends_at: datetime.datetime = _parse_datetime(data["cooldown_ends_at"]) - self.target_cooldown_ends_at: datetime.datetime = _parse_datetime(data["target_cooldown_ends_at"]) - - -class ChannelShoutoutReceiveData(EventData): - """ - Represents a Shoutout event being received. - - Requires the ``moderator:read:shoutouts`` or ``moderator:manage:shoutouts`` scope. - - Attributes - ----------- - broadcaster: :class:`~twitchio.PartialUser` - The broadcaster receiving shoutout event. - from_broadcaster: :class:`~twitchio.PartialUser` - The broadcaster who sent the shoutout. - started_at: :class:`datetime.datetime` - The datetime the shoutout was sent. - viewer_count: :class:`int` - The viewer count at the time of the shoutout - """ - - __slots__ = ("broadcaster", "from_broadcaster", "started_at", "viewer_count") - - def __init__(self, client: EventSubClient, data: dict): - self.broadcaster: PartialUser = _transform_user(client, data, "broadcaster_user") - self.from_broadcaster: PartialUser = _transform_user(client, data, "to_broadcaster_user") - self.started_at: datetime.datetime = _parse_datetime(data["started_at"]) - self.viewer_count: int = data["viewer_count"] - - -class ChannelCharityDonationData(EventData): - """ - Represents a donation towards a charity campaign. - - Requires the ``channel:read:charity`` scope. - - Attributes - ----------- - id: :class:`str` - The ID of the event. - campaign_id: :class:`str` - The ID of the running charity campaign. - broadcaster: :class:`~twitchio.PartialUser` - The broadcaster running the campaign. - user: :class:`~twitchio.PartialUser` - The user who donated. - charity_name: :class:`str` - The name of the charity. - charity_description: :class:`str` - The description of the charity. - charity_logo: :class:`str` - The logo of the charity. - charity_website: :class:`str` - The websiet of the charity. - donation_value: :class:`int` - The amount of money being donated. - donation_decimal_places: :class:`int` - The decimal places to put into the :attr`~.donation_amount`. - donation_currency: :class:`str` - The currency that was donated (ex. ``USD``, ``GBP``, ``EUR``) - """ - - __slots__ = ( - "id", - "campaign_id", - "broadcaster", - "user", - "charity_name", - "charity_description", - "charity_logo", - "charity_website", - "donation_value", - "donation_decimal_places", - "donation_currency", - ) - - def __init__(self, client: EventSubClient, data: dict): - self.id: str = data["id"] - self.campaign_id: str = data["campaign_id"] - self.broadcaster: PartialUser = _transform_user(client, data, "broadcaster") - self.user: PartialUser = _transform_user(client, data, "user") - self.charity_name: str = data["charity_name"] - self.charity_description: str = data["charity_description"] - self.charity_logo: str = data["charity_logo"] - self.charity_website: str = data["charity_website"] - self.donation_value: int = data["amount"]["value"] - self.donation_currency: str = data["amount"]["currency"] - self.donation_decimal_places: int = data["amount"]["decimal_places"] - - -_DataType = Union[ - ChannelBanData, - ChannelUnbanData, - ChannelSubscribeData, - ChannelSubscriptionEndData, - ChannelSubscriptionGiftData, - ChannelSubscriptionMessageData, - ChannelCheerData, - ChannelUpdateData, - ChannelFollowData, - ChannelRaidData, - ChannelModeratorAddRemoveData, - ChannelGoalBeginProgressData, - ChannelGoalEndData, - CustomRewardAddUpdateRemoveData, - CustomRewardRedemptionAddUpdateData, - HypeTrainBeginProgressData, - HypeTrainEndData, - PollBeginProgressData, - PollEndData, - PredictionBeginProgressData, - PredictionLockData, - PredictionEndData, - StreamOnlineData, - StreamOfflineData, - UserAuthorizationGrantedData, - UserAuthorizationRevokedData, - UserUpdateData, - ChannelShieldModeBeginData, - ChannelShieldModeEndData, - ChannelShoutoutCreateData, - ChannelShoutoutReceiveData, - ChannelCharityDonationData, -] - - -class _SubTypesMeta(type): - def __new__(mcs, clsname, bases, attributes): - attributes["_type_map"] = {args[0]: args[2] for name, args in attributes.items() if not name.startswith("_")} - attributes["_name_map"] = {args[0]: name for name, args in attributes.items() if not name.startswith("_")} - return super().__new__(mcs, clsname, bases, attributes) - - -class _SubscriptionTypes(metaclass=_SubTypesMeta): - _type_map: Dict[str, Type[_DataType]] - _name_map: Dict[str, str] - - follow = "channel.follow", 1, ChannelFollowData - followV2 = "channel.follow", 2, ChannelFollowData - subscription = "channel.subscribe", 1, ChannelSubscribeData - subscription_end = "channel.subscription.end", 1, ChannelSubscriptionEndData - subscription_gift = "channel.subscription.gift", 1, ChannelSubscriptionGiftData - subscription_message = "channel.subscription.message", 1, ChannelSubscriptionMessageData - cheer = "channel.cheer", 1, ChannelCheerData - raid = "channel.raid", 1, ChannelRaidData - ban = "channel.ban", 1, ChannelBanData - unban = "channel.unban", 1, ChannelUnbanData - - channel_update = "channel.update", 1, ChannelUpdateData - channel_moderator_add = "channel.moderator.add", 1, ChannelModeratorAddRemoveData - channel_moderator_remove = "channel.moderator.remove", 1, ChannelModeratorAddRemoveData - channel_reward_add = "channel.channel_points_custom_reward.add", 1, CustomRewardAddUpdateRemoveData - channel_reward_update = "channel.channel_points_custom_reward.update", 1, CustomRewardAddUpdateRemoveData - channel_reward_remove = "channel.channel_points_custom_reward.remove", 1, CustomRewardAddUpdateRemoveData - channel_reward_redeem = ( - "channel.channel_points_custom_reward_redemption.add", - 1, - CustomRewardRedemptionAddUpdateData, - ) - channel_reward_redeem_updated = ( - "channel.channel_points_custom_reward_redemption.update", - 1, - CustomRewardRedemptionAddUpdateData, - ) - - channel_goal_begin = "channel.goal.begin", 1, ChannelGoalBeginProgressData - channel_goal_progress = "channel.goal.progress", 1, ChannelGoalBeginProgressData - channel_goal_end = "channel.goal.end", 1, ChannelGoalEndData - - channel_shield_mode_begin = "channel.shield_mode.begin", 1, ChannelShieldModeBeginData - channel_shield_mode_end = "channel.shield_mode.end", 1, ChannelShieldModeEndData - - channel_shoutout_create = "channel.shoutout.create", 1, ChannelShoutoutCreateData - channel_shoutout_receive = "channel.shoutout.receive", 1, ChannelShoutoutReceiveData - - channel_charity_donate = "channel.charity_campaign.donate", 1, ChannelCharityDonationData - - hypetrain_begin = "channel.hype_train.begin", 1, HypeTrainBeginProgressData - hypetrain_progress = "channel.hype_train.progress", 1, HypeTrainBeginProgressData - hypetrain_end = "channel.hype_train.end", 1, HypeTrainEndData - - poll_begin = "channel.poll.begin", 1, PollBeginProgressData - poll_progress = "channel.poll.progress", 1, PollBeginProgressData - poll_end = "channel.poll.end", 1, PollEndData - - prediction_begin = "channel.prediction.begin", 1, PredictionBeginProgressData - prediction_progress = "channel.prediction.progress", 1, PredictionBeginProgressData - prediction_lock = "channel.prediction.lock", 1, PredictionLockData - prediction_end = "channel.prediction.end", 1, PredictionEndData - - stream_start = "stream.online", 1, StreamOnlineData - stream_end = "stream.offline", 1, StreamOfflineData - - user_authorization_grant = "user.authorization.grant", 1, UserAuthorizationGrantedData - user_authorization_revoke = "user.authorization.revoke", 1, UserAuthorizationRevokedData - - user_update = "user.update", 1, UserUpdateData - - -SubscriptionTypes = _SubscriptionTypes() - - -class TransportType(Enum): - webhook = "webhook" - websocket = "websocket" diff --git a/twitchio/ext/eventsub/server.py b/twitchio/ext/eventsub/server.py deleted file mode 100644 index 3a061bde..00000000 --- a/twitchio/ext/eventsub/server.py +++ /dev/null @@ -1,445 +0,0 @@ -import asyncio -import logging -import socket -import warnings -from typing import Union, Tuple, Type, Optional, Any -from collections.abc import Iterable - -import yarl -from aiohttp import web - -from twitchio import Client, PartialUser -from . import models, http - -try: - from ssl import SSLContext -except: - SSLContext = Any - -__all__ = ("EventSubClient",) - -logger = logging.getLogger("twitchio.ext.eventsub") - -_message_types = { - "webhook_callback_verification": models.ChallengeEvent, - "notification": models.NotificationEvent, - "revocation": models.RevokationEvent, -} - - -class EventSubClient(web.Application): - def __init__(self, client: Client, webhook_secret: str, callback_route: str, token: str = None): - self.client = client - self.secret = webhook_secret - self.route = callback_route - self._http = http.EventSubHTTP(self, token=token) - super(EventSubClient, self).__init__() - self.router.add_post(yarl.URL(self.route).path, self._callback) - self._closing = asyncio.Event() - - async def listen(self, **kwargs): - self._closing.clear() - await self.client.loop.create_task(self._run_app(**kwargs)) - - def stop(self): - self._closing.set() - - async def delete_subscription(self, subscription_id: str): - await self._http.delete_subscription(subscription_id) - - async def delete_all_active_subscriptions(self): - # A convenience method - active_subscriptions = await self.get_subscriptions("enabled") - for subscription in active_subscriptions: - await self.delete_subscription(subscription.id) - - async def get_subscriptions( - self, status: Optional[str] = None, sub_type: Optional[str] = None, user_id: Optional[int] = None - ): - # All possible statuses are: - # - # enabled: designates that the subscription is in an operable state and is valid. - # webhook_callback_verification_pending: webhook is pending verification of the callback specified in the subscription creation request. - # webhook_callback_verification_failed: webhook failed verification of the callback specified in the subscription creation request. - # notification_failures_exceeded: notification delivery failure rate was too high. - # authorization_revoked: authorization for user(s) in the condition was revoked. - # user_removed: a user in the condition of the subscription was removed. - return await self._http.get_subscriptions(status, sub_type, user_id) - - async def subscribe_user_updated(self, user: Union[PartialUser, str, int]): - if isinstance(user, PartialUser): - user = user.id - - user = str(user) - return await self._http.create_webhook_subscription(models.SubscriptionTypes.user_update, {"user_id": user}) - - async def subscribe_channel_raid( - self, from_broadcaster: Union[PartialUser, str, int] = None, to_broadcaster: Union[PartialUser, str, int] = None - ): - if (not from_broadcaster and not to_broadcaster) or (from_broadcaster and to_broadcaster): - raise ValueError("Expected 1 of from_broadcaster or to_broadcaster") - - if from_broadcaster: - who = "from_broadcaster_user_id" - broadcaster = from_broadcaster - else: - who = "to_broadcaster_user_id" - broadcaster = to_broadcaster - - if isinstance(broadcaster, PartialUser): - broadcaster = broadcaster.id - - broadcaster = str(broadcaster) - return await self._http.create_webhook_subscription(models.SubscriptionTypes.raid, {who: broadcaster}) - - async def _subscribe_channel_points_reward( - self, event, broadcaster: Union[PartialUser, str, int], reward_id: str = None - ): - if isinstance(broadcaster, PartialUser): - broadcaster = broadcaster.id - - broadcaster = str(broadcaster) - data = {"broadcaster_user_id": broadcaster} - if reward_id: - data["reward_id"] = reward_id - - return await self._http.create_webhook_subscription(event, data) - - async def _subscribe_with_broadcaster( - self, event: Tuple[str, int, Type[models._DataType]], broadcaster: Union[PartialUser, str, int] - ): - if isinstance(broadcaster, PartialUser): - broadcaster = broadcaster.id - - broadcaster = str(broadcaster) - return await self._http.create_webhook_subscription(event, {"broadcaster_user_id": broadcaster}) - - async def _subscribe_with_broadcaster_moderator( - self, - event: Tuple[str, int, Type[models._DataType]], - broadcaster: Union[PartialUser, str, int], - moderator: Union[PartialUser, str, int], - ): - if isinstance(broadcaster, PartialUser): - broadcaster = broadcaster.id - if isinstance(moderator, PartialUser): - moderator = moderator.id - - broadcaster = str(broadcaster) - moderator = str(moderator) - return await self._http.create_webhook_subscription( - event, {"broadcaster_user_id": broadcaster, "moderator_user_id": moderator} - ) - - def subscribe_channel_bans(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.ban, broadcaster) - - def subscribe_channel_unbans(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.unban, broadcaster) - - def subscribe_channel_subscriptions(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.subscription, broadcaster) - - def subscribe_channel_subscription_end(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.subscription_end, broadcaster) - - def subscribe_channel_subscription_gifts(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.subscription_gift, broadcaster) - - def subscribe_channel_subscription_messages(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.subscription_message, broadcaster) - - def subscribe_channel_cheers(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.cheer, broadcaster) - - def subscribe_channel_update(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_update, broadcaster) - - def subscribe_channel_follows(self, broadcaster: Union[PartialUser, str, int]): - """ - .. warning:: - This endpoint is deprecated, use :func:`~EventSubClient.subscribe_channel_follows_v2` - - """ - warnings.warn( - "subscribe_channel_follows is deprecated, use subscribe_channel_follows_v2 instead.", DeprecationWarning, 2 - ) - - return self._subscribe_with_broadcaster(models.SubscriptionTypes.follow, broadcaster) - - def subscribe_channel_follows_v2( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int] - ): - return self._subscribe_with_broadcaster_moderator(models.SubscriptionTypes.followV2, broadcaster, moderator) - - def subscribe_channel_moderators_add(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_moderator_add, broadcaster) - - def subscribe_channel_moderators_remove(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_moderator_remove, broadcaster) - - def subscribe_channel_goal_begin(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_goal_begin, broadcaster) - - def subscribe_channel_goal_progress(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_goal_progress, broadcaster) - - def subscribe_channel_goal_end(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_goal_end, broadcaster) - - def subscribe_channel_hypetrain_begin(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.hypetrain_begin, broadcaster) - - def subscribe_channel_hypetrain_progress(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.hypetrain_progress, broadcaster) - - def subscribe_channel_hypetrain_end(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.hypetrain_end, broadcaster) - - def subscribe_channel_stream_start(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.stream_start, broadcaster) - - def subscribe_channel_stream_end(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.stream_end, broadcaster) - - def subscribe_channel_points_reward_added(self, broadcaster: Union[PartialUser, str, int], reward_id: str): - return self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_add, broadcaster, reward_id - ) - - def subscribe_channel_points_reward_updated(self, broadcaster: Union[PartialUser, str, int], reward_id: str): - return self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_update, broadcaster, reward_id - ) - - def subscribe_channel_points_reward_removed(self, broadcaster: Union[PartialUser, str, int], reward_id: str): - return self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_remove, broadcaster, reward_id - ) - - def subscribe_channel_points_redeemed(self, broadcaster: Union[PartialUser, str, int], reward_id: str = None): - return self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_redeem, broadcaster, reward_id - ) - - def subscribe_channel_points_redeem_updated(self, broadcaster: Union[PartialUser, str, int], reward_id: str = None): - return self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_redeem_updated, broadcaster, reward_id - ) - - def subscribe_channel_poll_begin(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.poll_begin, broadcaster) - - def subscribe_channel_poll_progress(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.poll_progress, broadcaster) - - def subscribe_channel_poll_end(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.poll_end, broadcaster) - - def subscribe_channel_prediction_begin(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_begin, broadcaster) - - def subscribe_channel_prediction_progress(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_progress, broadcaster) - - def subscribe_channel_prediction_lock(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_lock, broadcaster) - - def subscribe_channel_prediction_end(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_end, broadcaster) - - def subscribe_channel_shield_mode_begin( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int] - ): - return self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.channel_shield_mode_begin, broadcaster, moderator - ) - - def subscribe_channel_shield_mode_end( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int] - ): - return self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.channel_shield_mode_end, broadcaster, moderator - ) - - def subscribe_channel_shoutout_create( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int] - ): - return self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.channel_shoutout_create, broadcaster, moderator - ) - - def subscribe_channel_shoutout_receive( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int] - ): - return self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.channel_shoutout_receive, broadcaster, moderator - ) - - def subscribe_channel_charity_donate(self, broadcaster: Union[PartialUser, str, int]): - return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_charity_donate, broadcaster) - - async def subscribe_user_authorization_granted(self): - return await self._http.create_webhook_subscription( - models.SubscriptionTypes.user_authorization_grant, {"client_id": self.client._http.client_id} - ) - - async def subscribe_user_authorization_revoked(self): - return await self._http.create_webhook_subscription( - models.SubscriptionTypes.user_authorization_revoke, {"client_id": self.client._http.client_id} - ) - - async def _callback(self, request: web.Request) -> web.Response: - payload = await request.text() - typ = request.headers.get("Twitch-Eventsub-Message-Type", "") - if not typ: - return web.Response(status=404) - - if typ not in _message_types: - logger.warning(f"Unexpected message type: {typ}") - return web.Response(status=400) - - logger.debug(f"Recived a message type: {typ}") - event = _message_types[typ](self, payload, request) - response = event.verify() - - if response.status != 200: - return response - - if typ == "notification": - self.client.run_event( - f"eventsub_notification_{models.SubscriptionTypes._name_map[event.subscription.type]}", event - ) - elif typ == "revocation": - self.client.run_event("eventsub_revokation", event) - - return response - - async def _run_app( - self, - *, - host: Optional[Union[str, web.HostSequence]] = None, - port: Optional[int] = None, - path: Optional[str] = None, - sock: Optional[socket.socket] = None, - shutdown_timeout: float = 60.0, - ssl_context: Optional[SSLContext] = None, - backlog: int = 128, - access_log_class: Type[web.AbstractAccessLogger] = web.AccessLogger, - access_log_format: str = web.AccessLogger.LOG_FORMAT, - access_log: Optional[logging.Logger] = web.access_logger, - handle_signals: bool = True, - reuse_address: Optional[bool] = None, - reuse_port: Optional[bool] = None, - ) -> None: - # This function is pulled from aiohttp.web._run_app - app = self - - runner = web.AppRunner( - app, - handle_signals=handle_signals, - access_log_class=access_log_class, - access_log_format=access_log_format, - access_log=access_log, - ) - - await runner.setup() - - sites = [] - - try: - if host is not None: - if isinstance(host, (str, bytes, bytearray, memoryview)): - sites.append( - web.TCPSite( - runner, - host, - port, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - reuse_address=reuse_address, - reuse_port=reuse_port, - ) - ) - else: - for h in host: - sites.append( - web.TCPSite( - runner, - h, - port, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - reuse_address=reuse_address, - reuse_port=reuse_port, - ) - ) - elif path is None and sock is None or port is not None: - sites.append( - web.TCPSite( - runner, - port=port, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - reuse_address=reuse_address, - reuse_port=reuse_port, - ) - ) - - if path is not None: - if isinstance(path, (str, bytes, bytearray, memoryview)): - sites.append( - web.UnixSite( - runner, - path, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - ) - else: - for p in path: - sites.append( - web.UnixSite( - runner, - p, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - ) - - if sock is not None: - if not isinstance(sock, Iterable): - sites.append( - web.SockSite( - runner, - sock, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - ) - else: - for s in sock: - sites.append( - web.SockSite( - runner, - s, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - ) - for site in sites: - await site.start() - - names = sorted(str(s.name) for s in runner.sites) - logger.debug("Running EventSub server on {}".format(", ".join(names))) - - await self._closing.wait() - finally: - await runner.cleanup() diff --git a/twitchio/ext/eventsub/websocket.py b/twitchio/ext/eventsub/websocket.py deleted file mode 100644 index 2f982357..00000000 --- a/twitchio/ext/eventsub/websocket.py +++ /dev/null @@ -1,502 +0,0 @@ -from __future__ import annotations - -import asyncio -import logging - -import aiohttp -from typing import Optional, TYPE_CHECKING, Tuple, Type, Dict, Callable, Generic, TypeVar, Awaitable, Union, cast, List -from . import models, http -from .models import _loads -from twitchio import PartialUser, Unauthorized, HTTPException - -if TYPE_CHECKING: - from twitchio import Client - -logger = logging.getLogger("twitchio.ext.eventsub.ws") - -_message_types = { - "notification": models.NotificationEvent, - "revocation": models.RevokationEvent, - "session_reconnect": models.ReconnectEvent, - "session_keepalive": models.KeepAliveEvent, -} -_messages = Union[models.NotificationEvent, models.RevokationEvent, models.ReconnectEvent, models.KeepAliveEvent] - - -class _Subscription: - __slots__ = "event", "condition", "token", "subscription_id", "cost", "created" - - def __init__(self, event_type: Tuple[str, int, Type[models.EventData]], condition: Dict[str, str], token: str): - self.event = event_type - self.condition = condition - self.token = token - self.subscription_id: Optional[str] = None - self.cost: Optional[int] = None - self.created: asyncio.Future[Tuple[bool, int]] | None = asyncio.Future() - - -_T = TypeVar("_T") - - -class _WakeupList(list, Generic[_T]): - def __init__(self, *args): - super().__init__(*args) - self._append_waiters = [] - self._pop_waiters = [] - - def _wakeup_append(self, obj: _T) -> None: - try: - loop = asyncio.get_running_loop() - for cb in self._append_waiters: - loop.create_task(cb(obj)) - except: # don't wake the waiters if theres no loop - pass - - def _wakeup_pop(self, obj: _T) -> None: - try: - loop = asyncio.get_running_loop() - for cb in self._pop_waiters: - loop.create_task(cb(obj)) - except: # don't wake the waiters - pass - - def append(self, obj: _T) -> None: - self._wakeup_append(obj) - super().append(obj) - - def insert(self, index: int, obj: _T) -> None: - self._wakeup_append(obj) - super().insert(index, obj) - - def __delitem__(self, key: int): - self._wakeup_pop(self[key]) - super().__delitem__(key) - - def pop(self, index: int = ...) -> _T: - resp = super().pop(index) - self._wakeup_pop(resp) - return resp - - def add_append_callback(self, cb: Callable[[_T], Awaitable[None]]) -> None: - self._append_waiters.append(cb) - - def add_pop_callback(self, cb: Callable[[_T], Awaitable[None]]) -> None: - self._pop_waiters.append(cb) - - -class Websocket: - URL = "wss://eventsub.wss.twitch.tv/ws" - - def __init__(self, client: Client, http: http.EventSubHTTP): - self.client = client - self._http = http - self._subscription_pool = _WakeupList[_Subscription]() - self._subscription_pool.add_append_callback(self._wakeup_and_connect) - self._sock: Optional[aiohttp.ClientWebSocketResponse] = None - self._pump_task: Optional[asyncio.Task] = None - self._timeout: Optional[int] = None - self._session_id: Optional[str] = None - self._target_user_id: int | None = None # each websocket can only have one authenticated user on it for some bizzare reason, but this isnt documented anywhere - self.remaining_slots: int = 300 # default to 300 - - def __hash__(self) -> int: - return hash(self.session_id) - - def __eq__(self, __value: object) -> bool: - return __value is self - - @property - def session_id(self) -> Optional[str]: - return self._session_id - - @property - def is_connected(self) -> bool: - return self._sock is not None and not self._sock.closed - - async def _subscribe(self, obj: _Subscription) -> dict | None: - try: - resp = await self._http.create_websocket_subscription(obj.event, obj.condition, self._session_id, obj.token) - except HTTPException as e: - assert obj.created - obj.created.set_result((False, e.status)) # type: ignore - return None - - else: - assert obj.created - obj.created.set_result((True, None)) # type: ignore - - data = resp["data"][0] - cost = data["cost"] - self.remaining_slots = resp["max_total_cost"] - resp["total_cost"] - obj.cost = cost - - return data - - def add_subscription(self, sub: _Subscription) -> None: - self._subscription_pool.append(sub) - - async def _wakeup_and_connect(self, obj: _Subscription): - if self.is_connected: - await self._subscribe(obj) - return - - async def connect(self, reconnect_url: Optional[str] = None): - async with aiohttp.ClientSession() as session: - sock = self._sock = await session.ws_connect(reconnect_url or self.URL) - session.detach() - - welcome = await sock.receive_json(loads=_loads, timeout=3) - logger.debug("Received websocket payload: %s", welcome) - self._session_id = welcome["payload"]["session"]["id"] - self._timeout = welcome["payload"]["session"]["keepalive_timeout_seconds"] - - logger.debug("Created websocket connection with session ID: %s and timeout %s", self._session_id, self._timeout) - - self._pump_task = self.client.loop.create_task(self.pump()) - - if reconnect_url: # don't resubscribe to events - return - - for sub in self._subscription_pool: - await self._subscribe(sub) - - async def pump(self) -> None: - sock: aiohttp.ClientWebSocketResponse = cast(aiohttp.ClientWebSocketResponse, self._sock) - while self.is_connected: - try: - msg = await sock.receive_str( - timeout=self._timeout + 1 - ) # extra jitter on the timeout in case of network lag - if not msg: - logger.warning("Received empty payload ") - - logger.debug("Received websocket payload: %s", msg) - frame: _messages = self.parse_frame(_loads(msg)) - self.client.run_event("eventsub_debug", frame) - - if isinstance(frame, models.NotificationEvent): - self.client.run_event( - f"eventsub_notification_{models.SubscriptionTypes._name_map[frame.subscription.type]}", frame - ) - self.client.run_event("eventsub_notification", frame) - - elif isinstance(frame, models.RevokationEvent): - self.client.run_event("eventsub_revokation", frame) - - elif isinstance(frame, models.KeepAliveEvent): - self.client.run_event("eventsub_keepalive", frame) - - elif isinstance(frame, models.ReconnectEvent): - self.client.run_event("eventsub_reconnect", frame) - self._sock = None - await self.connect(frame.reconnect_url) - await sock.close(code=aiohttp.WSCloseCode.GOING_AWAY, message=b"reconnecting") - return - - except asyncio.TimeoutError: - logger.warning(f"Websocket timed out (timeout: {self._timeout}), reconnecting") - await cast(aiohttp.ClientWebSocketResponse, self._sock).close( - code=aiohttp.WSCloseCode.ABNORMAL_CLOSURE, message=b"timeout surpassed" - ) - await self.connect() - return - - except TypeError as e: - logger.warning(f"Received bad frame: {e.args[0]}") - - except Exception as e: - logger.error("Exception in the pump function!", exc_info=e) - raise - - def parse_frame(self, frame: dict) -> _messages: - type_: str = frame["metadata"]["message_type"] - return _message_types[type_](self, frame, None) - - -class EventSubWSClient: - def __init__(self, client: Client): - self.client = client - self._http: http.EventSubHTTP = http.EventSubHTTP(self, token=None) - - self._sockets: List[Websocket] = [] - self._ready_to_subscribe: List[_Subscription] = [] - - async def _assign_subscription(self, sub: _Subscription) -> None: - if not self._sockets: - w = Websocket(self.client, self._http) - await w.connect() - - self._sockets.append(w) - - success = False - bad_sockets: set[Websocket] | None = None # dont allocate unless we need it - - while not success: - s: Websocket | None = None # really it'll never be none after this point, but ok pyright - - if bad_sockets is not None: - socks = filter(lambda sock: sock not in bad_sockets, self._sockets) # type: ignore - else: - socks = self._sockets - - for s in socks: - if s.remaining_slots > 0: - s.add_subscription(sub) - break - - else: # there are no sockets, create one and break - s = Websocket(self.client, self._http) - await s.connect() - - s.add_subscription(sub) - return - - assert sub.created is not None # go away pyright - - success, status = await sub.created - - if not success and status == 400: - # can't be on that socket due to someone else being on it, try again on a different one - if bad_sockets is None: - bad_sockets = set() - - bad_sockets.add(s) - sub.created = asyncio.Future() - continue - - elif not success and status in (401, 403): - raise Unauthorized("You are not authorized to make this subscription", status=status) - - elif not success: - raise RuntimeError(f"Subscription failed, reason unknown. Status: {status}") - - else: - sub.created = None # don't need that future to sit in memory - break - - async def subscribe_user_updated(self, user: Union[PartialUser, str, int], token: str): - if isinstance(user, PartialUser): - user = user.id - - user = str(user) - sub = _Subscription(models.SubscriptionTypes.user_update, {"user_id": user}, token) - await self._assign_subscription(sub) - - async def subscribe_channel_raid( - self, - token: str, - from_broadcaster: Union[PartialUser, str, int] = None, - to_broadcaster: Union[PartialUser, str, int] = None, - ): - if (not from_broadcaster and not to_broadcaster) or (from_broadcaster and to_broadcaster): - raise ValueError("Expected 1 of from_broadcaster or to_broadcaster") - - if from_broadcaster: - who = "from_broadcaster_user_id" - broadcaster = from_broadcaster - else: - who = "to_broadcaster_user_id" - broadcaster = to_broadcaster - - if isinstance(broadcaster, PartialUser): - broadcaster = broadcaster.id - - broadcaster = str(broadcaster) - sub = _Subscription(models.SubscriptionTypes.raid, {who: broadcaster}, token) - await self._assign_subscription(sub) - - async def _subscribe_channel_points_reward( - self, - event: Tuple[str, int, Type[models._DataType]], - broadcaster: Union[PartialUser, str, int], - token: str, - reward_id: str = None, - ): - if isinstance(broadcaster, PartialUser): - broadcaster = broadcaster.id - - broadcaster = str(broadcaster) - data = {"broadcaster_user_id": broadcaster} - if reward_id: - data["reward_id"] = reward_id - - sub = _Subscription(event, data, token) - await self._assign_subscription(sub) - - async def _subscribe_with_broadcaster( - self, event: Tuple[str, int, Type[models._DataType]], broadcaster: Union[PartialUser, str, int], token: str - ): - if isinstance(broadcaster, PartialUser): - broadcaster = broadcaster.id - - broadcaster = str(broadcaster) - sub = _Subscription(event, {"broadcaster_user_id": broadcaster}, token) - await self._assign_subscription(sub) - - async def _subscribe_with_broadcaster_moderator( - self, - event: Tuple[str, int, Type[models._DataType]], - broadcaster: Union[PartialUser, str, int], - moderator: Union[PartialUser, str, int], - token: str, - ): - if isinstance(broadcaster, PartialUser): - broadcaster = broadcaster.id - if isinstance(moderator, PartialUser): - moderator = moderator.id - - broadcaster = str(broadcaster) - moderator = str(moderator) - sub = _Subscription(event, {"broadcaster_user_id": broadcaster, "moderator_user_id": moderator}, token) - await self._assign_subscription(sub) - - async def subscribe_channel_bans(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.ban, broadcaster, token) - - async def subscribe_channel_unbans(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.unban, broadcaster, token) - - async def subscribe_channel_subscriptions(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.subscription, broadcaster, token) - - async def subscribe_channel_subscription_end(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.subscription_end, broadcaster, token) - - async def subscribe_channel_subscription_gifts(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.subscription_gift, broadcaster, token) - - async def subscribe_channel_subscription_messages(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.subscription_message, broadcaster, token) - - async def subscribe_channel_cheers(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.cheer, broadcaster, token) - - async def subscribe_channel_update(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_update, broadcaster, token) - - async def subscribe_channel_follows(self, broadcaster: Union[PartialUser, str, int], token: str): - raise RuntimeError("This subscription has been removed by twitch, please use subscribe_channel_follows_v2") - - async def subscribe_channel_follows_v2( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str - ): - await self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.followV2, broadcaster, moderator, token - ) - - async def subscribe_channel_moderators_add(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_moderator_add, broadcaster, token) - - async def subscribe_channel_moderators_remove(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_moderator_remove, broadcaster, token) - - async def subscribe_channel_goal_begin(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_goal_begin, broadcaster, token) - - async def subscribe_channel_goal_progress(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_goal_progress, broadcaster, token) - - async def subscribe_channel_goal_end(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_goal_end, broadcaster, token) - - async def subscribe_channel_hypetrain_begin(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.hypetrain_begin, broadcaster, token) - - async def subscribe_channel_hypetrain_progress(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.hypetrain_progress, broadcaster, token) - - async def subscribe_channel_hypetrain_end(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.hypetrain_end, broadcaster, token) - - async def subscribe_channel_stream_start(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.stream_start, broadcaster, token) - - async def subscribe_channel_stream_end(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.stream_end, broadcaster, token) - - async def subscribe_channel_points_reward_added( - self, broadcaster: Union[PartialUser, str, int], reward_id: str, token: str - ): - await self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_add, broadcaster, token, reward_id - ) - - async def subscribe_channel_points_reward_updated( - self, broadcaster: Union[PartialUser, str, int], reward_id: str, token: str - ): - await self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_update, broadcaster, token, reward_id - ) - - async def subscribe_channel_points_reward_removed( - self, broadcaster: Union[PartialUser, str, int], reward_id: str, token: str - ): - await self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_remove, broadcaster, token, reward_id - ) - - async def subscribe_channel_points_redeemed( - self, broadcaster: Union[PartialUser, str, int], token: str, reward_id: str = None - ): - await self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_redeem, broadcaster, token, reward_id - ) - - async def subscribe_channel_points_redeem_updated( - self, broadcaster: Union[PartialUser, str, int], token: str, reward_id: str = None - ): - await self._subscribe_channel_points_reward( - models.SubscriptionTypes.channel_reward_redeem_updated, broadcaster, token, reward_id - ) - - async def subscribe_channel_poll_begin(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.poll_begin, broadcaster, token) - - async def subscribe_channel_poll_progress(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.poll_progress, broadcaster, token) - - async def subscribe_channel_poll_end(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.poll_end, broadcaster, token) - - async def subscribe_channel_prediction_begin(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_begin, broadcaster, token) - - async def subscribe_channel_prediction_progress(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_progress, broadcaster, token) - - async def subscribe_channel_prediction_lock(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_lock, broadcaster, token) - - async def subscribe_channel_prediction_end(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_end, broadcaster, token) - - async def subscribe_channel_shield_mode_begin( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str - ): - await self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.channel_shield_mode_begin, broadcaster, moderator, token - ) - - async def subscribe_channel_shield_mode_end( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str - ): - await self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.channel_shield_mode_end, broadcaster, moderator, token - ) - - async def subscribe_channel_shoutout_create( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str - ): - await self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.channel_shoutout_create, broadcaster, moderator, token - ) - - async def subscribe_channel_shoutout_receive( - self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str - ): - await self._subscribe_with_broadcaster_moderator( - models.SubscriptionTypes.channel_shoutout_receive, broadcaster, moderator, token - ) - - async def subscribe_channel_charity_donate(self, broadcaster: Union[PartialUser, str, int], token: str): - await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_charity_donate, broadcaster, token) diff --git a/twitchio/ext/pubsub/__init__.py b/twitchio/ext/pubsub/__init__.py deleted file mode 100644 index 3926e387..00000000 --- a/twitchio/ext/pubsub/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - -from .topics import * -from .websocket import * -from .pool import * -from .models import * diff --git a/twitchio/ext/pubsub/models.py b/twitchio/ext/pubsub/models.py deleted file mode 100644 index f11c6f39..00000000 --- a/twitchio/ext/pubsub/models.py +++ /dev/null @@ -1,504 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" - - -from typing import List, Optional - -from twitchio import PartialUser, Client, Channel, CustomReward, parse_timestamp - - -__all__ = ( - "PoolError", - "PoolFull", - "PubSubMessage", - "PubSubBitsMessage", - "PubSubBitsBadgeMessage", - "PubSubChatMessage", - "PubSubBadgeEntitlement", - "PubSubChannelPointsMessage", - "PubSubModerationAction", - "PubSubModerationActionModeratorAdd", - "PubSubModerationActionBanRequest", - "PubSubModerationActionChannelTerms", - "PubSubChannelSubscribe", -) - - -class PubSubError(Exception): - pass - - -class ConnectionFailure(PubSubError): - pass - - -class PoolError(PubSubError): - pass - - -class PoolFull(PoolError): - pass - - -class PubSubChatMessage: - """ - A message received from twitch. - - Attributes - ----------- - content: :class:`str` - The content received - id: :class:`str` - The id of the payload - type: :class:`str` - The payload type - """ - - __slots__ = "content", "id", "type" - - def __init__(self, content: str, id: str, type: str): - self.content = content - self.id = id - self.type = type - - -class PubSubBadgeEntitlement: - """ - A badge entitlement - - Attributes - ----------- - new: :class:`int` - The new badge - old: :class:`int` - The old badge - """ - - __slots__ = "new", "old" - - def __init__(self, new: int, old: int): - self.new = new - self.old = old - - -class PubSubMessage: - """ - A message from the pubsub websocket - - Attributes - ----------- - topic: :class:`str` - The topic subscribed to - """ - - __slots__ = "topic", "_data" - - def __init__(self, client: Client, topic: Optional[str], data: dict): - self.topic = topic - self._data = data - - -class PubSubBitsMessage(PubSubMessage): - """ - A Bits message - - Attributes - ----------- - message: :class:`PubSubChatMessage` - The message sent along with the bits. - badge_entitlement: Optional[:class:`PubSubBadgeEntitlement`] - The badges received, if any. - bits_used: :class:`int` - The amount of bits used. - channel_id: :class:`int` - The channel the bits were given to. - user: Optional[:class:`twitchio.PartialUser`] - The user giving the bits. Can be None if anonymous. - version: :class:`str` - The event version. - """ - - __slots__ = "badge_entitlement", "bits_used", "channel_id", "context", "anonymous", "message", "user", "version" - - def __init__(self, client: Client, topic: str, data: dict): - super().__init__(client, topic, data) - - data = data["message"] - self.message = PubSubChatMessage(data["data"]["chat_message"], data["message_id"], data["message_type"]) - self.badge_entitlement = ( - PubSubBadgeEntitlement( - data["data"]["badge_entitlement"]["new_version"], data["data"]["badge_entitlement"]["old_version"] - ) - if data["data"]["badge_entitlement"] - else None - ) - self.bits_used: int = data["data"]["bits_used"] - self.channel_id: int = int(data["data"]["channel_id"]) - self.user = ( - PartialUser(client._http, data["data"]["user_id"], data["data"]["user_name"]) - if data["data"]["user_id"] - else None - ) - self.version: str = data["version"] - - -class PubSubBitsBadgeMessage(PubSubMessage): - """ - A Badge message - - Attributes - ----------- - user: :class:`twitchio.PartialUser` - The user receiving the badge. - channel: :class:`twitchio.Channel` - The channel the user received the badge on. - badge_tier: :class:`int` - The tier of the badge - message: :class:`str` - The message sent in chat. - timestamp: :class:`datetime.datetime` - The time the event happened - """ - - __slots__ = "user", "channel", "badge_tier", "message", "timestamp" - - def __init__(self, client: Client, topic: str, data: dict): - super().__init__(client, topic, data) - data = data["message"] - self.user = PartialUser(client._http, data["user_id"], data["user_name"]) - self.channel: Channel = client.get_channel(data["channel_name"]) or Channel( - name=data["channel_name"], websocket=client._connection - ) - self.badge_tier: int = data["badge_tier"] - self.message: str = data["chat_message"] - self.timestamp = parse_timestamp(data["time"]) - - -class PubSubChannelPointsMessage(PubSubMessage): - """ - A Channel points redemption - - Attributes - ----------- - timestamp: :class:`datetime.datetime` - The timestamp the event happened. - channel_id: :class:`int` - The channel the reward was redeemed on. - id: :class:`str` - The id of the reward redemption. - user: :class:`twitchio.PartialUser` - The user redeeming the reward. - reward: :class:`twitchio.CustomReward` - The reward being redeemed. - input: Optional[:class:`str`] - The input the user gave, if any. - status: :class:`str` - The status of the reward. - """ - - __slots__ = "timestamp", "channel_id", "user", "id", "reward", "input", "status" - - def __init__(self, client: Client, topic: str, data: dict): - super().__init__(client, topic, data) - - redemption = data["message"]["data"]["redemption"] - - self.timestamp = parse_timestamp(redemption["redeemed_at"]) - self.channel_id: int = int(redemption["channel_id"]) - self.id: str = redemption["id"] - self.user = PartialUser(client._http, redemption["user"]["id"], redemption["user"]["display_name"]) - self.reward = CustomReward(client._http, redemption["reward"], PartialUser(client._http, self.channel_id, None)) - self.input: Optional[str] = redemption.get("user_input") - self.status: str = redemption["status"] - - -class PubSubModerationAction(PubSubMessage): - """ - A basic moderation action. - - Attributes - ----------- - action: :class:`str` - The action taken. - args: List[:class:`str`] - The arguments given to the command. - created_by: :class:`twitchio.PartialUser` - The user that created the action. - message_id: Optional[:class:`str`] - The id of the message that created this action. - target: :class:`twitchio.PartialUser` - The target of this action. - from_automod: :class:`bool` - Whether this action was done automatically or not. - """ - - __slots__ = "action", "args", "created_by", "message_id", "target", "from_automod" - - def __init__(self, client: Client, topic: str, data: dict): - super().__init__(client, topic, data) - self.action: str = data["message"]["data"]["moderation_action"] - self.args: List[str] = data["message"]["data"]["args"] - self.created_by = PartialUser( - client._http, data["message"]["data"]["created_by_user_id"], data["message"]["data"]["created_by"] - ) - self.message_id: Optional[str] = data["message"]["data"].get("msg_id") - self.target = ( - PartialUser( - client._http, data["message"]["data"]["target_user_id"], data["message"]["data"]["target_user_login"] - ) - if data["message"]["data"]["target_user_id"] - else None - ) - self.from_automod: bool = data["message"]["data"].get("from_automod", False) - - -class PubSubModerationActionBanRequest(PubSubMessage): - """ - A Ban/Unban event - - Attributes - ----------- - action: :class:`str` - The action taken. - args: List[:class:`str`] - The arguments given to the command. - created_by: :class:`twitchio.PartialUser` - The user that created the action. - target: :class:`twitchio.PartialUser` - The target of this action. - """ - - __slots__ = "action", "args", "created_by", "message_id", "target" - - def __init__(self, client: Client, topic: str, data: dict): - super().__init__(client, topic, data) - self.action: str = data["message"]["data"]["moderation_action"] - self.args: List[str] = data["message"]["data"]["moderator_message"] - self.created_by = PartialUser( - client._http, data["message"]["data"]["created_by_id"], data["message"]["data"]["created_by_login"] - ) - self.target = ( - PartialUser( - client._http, data["message"]["data"]["target_user_id"], data["message"]["data"]["target_user_login"] - ) - if data["message"]["data"]["target_user_id"] - else None - ) - - -class PubSubModerationActionChannelTerms(PubSubMessage): - """ - A channel Terms update. - - Attributes - ----------- - type: :class:`str` - The type of action taken. - channel_id: :class:`int` - The channel id the action occurred on. - id: :class:`str` - The id of the Term. - text: :class:`str` - The text of the modified Term. - requester: :class:`twitchio.PartialUser` - The requester of this Term. - """ - - __slots__ = "type", "channel_id", "id", "text", "requester", "expires_at", "updated_at" - - def __init__(self, client: Client, topic: str, data: dict): - super().__init__(client, topic, data) - self.type: str = data["message"]["data"]["type"] - self.channel_id = int(data["message"]["data"]["channel_id"]) - self.id: str = data["message"]["data"]["id"] - self.text: str = data["message"]["data"]["text"] - self.requester = PartialUser( - client._http, data["message"]["data"]["requester_id"], data["message"]["data"]["requester_login"] - ) - - self.expires_at = ( - parse_timestamp(data["message"]["data"]["expires_at"]) if data["message"]["data"]["expires_at"] else None - ) - self.updated_at = ( - parse_timestamp(data["message"]["data"]["updated_at"]) if data["message"]["data"]["updated_at"] else None - ) - - -class PubSubChannelSubscribe(PubSubMessage): - """ - Channel subscription - - Attributes - ----------- - channel: :class:`twitchio.Channel` - Channel that has been subscribed or subgifted. - context: :class:`str` - Event type associated with the subscription product. - user: Optional[:class:`twitchio.PartialUser`] - The person who subscribed or sent a gift subscription. Can be None if anonymous. - message: :class:`str` - Message sent with the sub/resub. - emotes: Optional[List[:class:`dict`]] - Emotes sent with the sub/resub. - is_gift: :class:`bool` - If this sub message was caused by a gift subscription. - recipient: Optional[:class:`twitchio.PartialUser`] - The person the who received the gift subscription. - sub_plan: :class:`str` - Subscription Plan ID. - sub_plan_name: :class:`str` - Channel Specific Subscription Plan Name. - time: :class:`datetime.datetime` - Time when the subscription or gift was completed. RFC 3339 format. - cumulative_months: :class:`int` - Cumulative number of tenure months of the subscription. - streak_months: Optional[:class:`int`] - Denotes the user's most recent (and contiguous) subscription tenure streak in the channel. - multi_month_duration: Optional[:class:`int`] - Number of months gifted as part of a single, multi-month gift OR number of months purchased as part of a multi-month subscription. - """ - - __slots__ = ( - "channel", - "context", - "user", - "message", - "emotes", - "is_gift", - "recipient", - "sub_plan", - "sub_plan_name", - "time", - "cumulative_months", - "streak_months", - "multi_month_duration", - ) - - def __init__(self, client: Client, topic: str, data: dict): - super().__init__(client, topic, data) - - subscription = data["message"] - - self.channel: Channel = client.get_channel(subscription["channel_name"]) or Channel( - name=subscription["channel_name"], websocket=client._connection - ) - self.context: str = subscription["context"] - try: - self.user = PartialUser(client._http, int(subscription["user_id"]), subscription["user_name"]) - except KeyError: - self.user = None - - self.message: str = subscription["sub_message"]["message"] - try: - self.emotes = subscription["sub_message"]["emotes"] - except KeyError: - self.emotes = None - - self.is_gift: bool = subscription["is_gift"] - try: - self.recipient = PartialUser( - client._http, int(subscription["recipient_id"]), subscription["recipient_user_name"] - ) - except KeyError: - self.recipient = None - - self.sub_plan: str = subscription["sub_plan"] - self.sub_plan_name: str = subscription["sub_plan_name"] - self.time = parse_timestamp(subscription["time"]) - try: - self.cumulative_months = int(subscription["cumulative_months"]) - except KeyError: - self.cumulative_months = None - try: - self.streak_months = int(subscription["streak_months"]) - except KeyError: - self.streak_months = None - try: - self.multi_month_duration = int(subscription["multi_month_duration"]) - except KeyError: - self.multi_month_duration = None - - -class PubSubModerationActionModeratorAdd(PubSubMessage): - """ - A moderator add event. - - Attributes - ----------- - channel_id: :class:`int` - The channel id the moderator was added to. - moderation_action: :class:`str` - Redundant. - target: :class:`twitchio.PartialUser` - The person who was added as a mod. - created_by: :class:`twitchio.PartialUser` - The person who added the mod. - """ - - __slots__ = "channel_id", "target", "moderation_action", "created_by" - - def __init__(self, client: Client, topic: str, data: dict): - super().__init__(client, topic, data) - self.channel_id = int(data["message"]["data"]["channel_id"]) - self.moderation_action: str = data["message"]["data"]["moderation_action"] - self.target = PartialUser( - client._http, data["message"]["data"]["target_user_id"], data["message"]["data"]["target_user_login"] - ) - self.created_by = PartialUser( - client._http, data["message"]["data"]["created_by_user_id"], data["message"]["data"]["created_by"] - ) - - -_mod_actions = { - "approve_unban_request": PubSubModerationActionBanRequest, - "deny_unban_request": PubSubModerationActionBanRequest, - "channel_terms_action": PubSubModerationActionChannelTerms, - "moderator_added": PubSubModerationActionModeratorAdd, - "moderation_action": PubSubModerationAction, -} - - -def _find_mod_action(client: Client, topic: str, data: dict): - typ = data["message"]["type"] - if typ in _mod_actions: - return _mod_actions[typ](client, topic, data) - - else: - raise ValueError(f"unknown pubsub moderation action '{typ}'") - - -_mapping = { - "channel-bits-events-v2": ("pubsub_bits", PubSubBitsMessage), - "channel-bits-badge-unlocks": ("pubsub_bits_badge", PubSubBitsBadgeMessage), - "channel-subscribe-events-v1": ("pubsub_subscription", PubSubChannelSubscribe), - "chat_moderator_actions": ("pubsub_moderation", _find_mod_action), - "channel-points-channel-v1": ("pubsub_channel_points", PubSubChannelPointsMessage), - "whispers": ("pubsub_whisper", None), -} - - -def create_message(client, msg: dict): - topic = msg["data"]["topic"].split(".")[0] - r = _mapping[topic] - return r[0], r[1](client, topic, msg["data"]) diff --git a/twitchio/ext/pubsub/pool.py b/twitchio/ext/pubsub/pool.py deleted file mode 100644 index 3ce82f3c..00000000 --- a/twitchio/ext/pubsub/pool.py +++ /dev/null @@ -1,185 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" -import copy -import itertools -import logging -from typing import List, Optional - -from twitchio import Client -from .websocket import PubSubWebsocket -from .topics import Topic -from . import models - - -__all__ = ("PubSubPool",) - -logger = logging.getLogger("twitchio.ext.eventsub.pool") - - -class PubSubPool: - """ - The pool that manages connections to the pubsub server, and handles distributing topics across the connections. - - Attributes - ----------- - client: :class:`twitchio.Client` - The client that the pool will dispatch events to. - """ - - def __init__(self, client: Client, *, max_pool_size=10, max_connection_topics=50, mode="group"): - self.client = client - self._pool: List[PubSubWebsocket] = [] - self._topics = {} - self._mode = mode - self._max_size = max_pool_size - self._max_connection_topics = max_connection_topics - - async def subscribe_topics(self, topics: List[Topic]): - """|coro| - Subscribes to a list of topics. - - Parameters - ----------- - topics: List[:class:`Topic`] - The topics to subscribe to - - """ - node = self._find_node(topics) - if node is None: - node = PubSubWebsocket(self.client, pool=self, max_topics=self._max_connection_topics) - await node.connect() - self._pool.append(node) - - await node.subscribe_topics(topics) - self._topics.update({t: node for t in topics}) - - async def unsubscribe_topics(self, topics: List[Topic]): - """|coro| - Unsubscribes from a list of topics. - - Parameters - ----------- - topics: List[:class:`Topic`] - The topics to unsubscribe from - - """ - for node, vals in itertools.groupby(topics, lambda t: self._topics[t]): - await node.unsubscribe_topic(list(vals)) - if not node.topics: - await node.disconnect() - self._pool.remove(node) - - async def _process_auth_fail(self, nonce: str, node: PubSubWebsocket) -> None: - topics = [topic for topic in self._topics if topic._nonce == nonce] - - for topic in topics: - topic._nonce = None - del self._topics[topic] - node.topics.remove(topic) - - try: - await self.auth_fail_hook(topics) - except Exception as e: - logger.error("Error occurred while calling auth_fail_hook.", exc_info=e) - - async def auth_fail_hook(self, topics: List[Topic]): - """|coro| - This is a hook that can be overridden in a subclass. - From this hook, you can refresh expired tokens (or prompt a user for new ones), and resubscribe to the events. - - .. note:: - - The topics will not be automatically resubscribed to. You must do it yourself by calling :meth:`~PubSubPool.subscribe_topics` with the topics after obtaining new tokens. - - An example of what this method should do: - - .. code:: python - - class MyPubSubPool(pubsub.PubSubPool): - async def auth_fail_hook(self, topics: List[pubsub.Topic]): - token = topics[0].token - new_token = await some_imaginary_function_that_refreshes_tokens(token) - - for topic in topics: - topic.token = new_token - - await self.subscribe_topics(topics) - - Parameters - ---------- - topics: List[:class:`Topic`] - The topics that have been deauthorized. Typically these will all contain the same token. - """ - - async def _process_reconnect_hook(self, node: PubSubWebsocket) -> None: - topics = copy.copy(node.topics) - - for topic in topics: - self._topics.pop(topic, None) - - try: - new_topics = await self.reconnect_hook(node, topics) - except Exception as e: - new_topics = node.topics - logger.error("Error occurred while calling reconnect_hook.", exc_info=e) - - for topic in new_topics: - self._topics[topic] = node - - node.topics = new_topics - - async def reconnect_hook(self, node: PubSubWebsocket, topics: List[Topic]) -> List[Topic]: - """ - This is a low-level hook that can be overridden in a subclass. - it is called whenever a node has to reconnect for any reason, from the twitch edge lagging out to being told to by twitch. - This hook allows you to modify the topics, potentially updating tokens or removing topics altogether. - - Parameters - ---------- - node: :class:`PubSubWebsocket` - The node that is reconnecting. - topics: List[:class:`Topic`] - The topics that this node has. - - Returns - ------- - List[:class:`Topic`] - The list of topics this node should have. Any additions, modifications, or removals will be respected. - """ - return topics - - def _find_node(self, topics: List[Topic]) -> Optional[PubSubWebsocket]: - if self._mode != "group": - raise ValueError("group is the only supported mode.") - - for p in self._pool: - if p.max_topics + len(topics) <= p.max_topics: - return p - - if len(self._pool) < self._max_size: - return None - else: - raise models.PoolFull( - f"The pubsub pool has reached maximum topics. Unable to allocate a group of {len(topics)} topics." - ) diff --git a/twitchio/ext/pubsub/topics.py b/twitchio/ext/pubsub/topics.py deleted file mode 100644 index 7fa7e2b4..00000000 --- a/twitchio/ext/pubsub/topics.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" -import uuid -from typing import Optional, List, Type - - -__all__ = ( - "Topic", - "bits", - "bits_badge", - "channel_points", - "channel_subscriptions", - "moderation_user_action", - "whispers", -) - - -class _topic: - __slots__ = "__topic__", "__args__" - - def __init__(self, topic: str, args: List[Type]): - self.__topic__ = topic - self.__args__ = args - - def __call__(self, token: str): - cls = Topic(self.__topic__, self.__args__) - cls.token = token - return cls - - def copy(self): - return self.__class__(self.__topic__, self.__args__) - - -class Topic(_topic): - """ - Represents a PubSub Topic. This should not be created manually, - use the provided methods to create these. - - Attributes - ----------- - token: :class:`str` - The token to use to authorize this topic - args: List[Union[:class:`int`, Any]] - The arguments to substitute in to the topic string - """ - - __slots__ = "token", "args", "_nonce" - - def __init__(self, topic, args): - super().__init__(topic, args) - self.token = None - self._nonce = None - self.args = [] - - def __getitem__(self, item): - assert len(self.args) < len(self.__args__), ValueError("Too many arguments") - assert isinstance(item, self.__args__[len(self.args)]), ValueError( - f"Got {item!r}, excepted {self.__args__[len(self.args)]}" - ) # noqa - self.args.append(item) - return self - - @property - def present(self) -> Optional[str]: - """ - Returns a websocket-ready topic string, if all the arguments needed have been provided. - Otherwise returns ``None`` - """ - try: - return self.__topic__.format(*self.args) - except: - return None - - def _present_set_nonce(self, nonce: str) -> Optional[str]: - self._nonce = nonce - return self.present - - def __eq__(self, other): - return other is self or (isinstance(other, Topic) and other.present == self.present) - - def __hash__(self): - return hash(self.present) - - def __repr__(self): - return f"" - - -bits = _topic("channel-bits-events-v2.{0}", [int]) -bits_badge = _topic("channel-bits-badge-unlocks.{0}", [int]) -channel_points = _topic("channel-points-channel-v1.{0}", [int]) -channel_subscriptions = _topic("channel-subscribe-events-v1.{0}", [int]) -moderation_user_action = _topic("chat_moderator_actions.{0}.{1}", [int, int]) -whispers = _topic("whispers.{0}", [int]) diff --git a/twitchio/ext/pubsub/websocket.py b/twitchio/ext/pubsub/websocket.py deleted file mode 100644 index 322e4b58..00000000 --- a/twitchio/ext/pubsub/websocket.py +++ /dev/null @@ -1,221 +0,0 @@ -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" -from __future__ import annotations - -import asyncio -import logging -import time -import uuid -from itertools import groupby -from typing import Optional, List, TYPE_CHECKING - -import aiohttp - -from twitchio import Client -from .topics import Topic -from . import models - -if TYPE_CHECKING: - from .pool import PubSubPool - -try: - import ujson as json -except: - import json - - -logger = logging.getLogger("twitchio.ext.pubsub.websocket") - - -__all__ = ("PubSubWebsocket",) - - -class PubSubWebsocket: - __slots__ = ( - "session", - "topics", - "pool", - "client", - "connection", - "_latency", - "timeout", - "_task", - "_poll", - "max_topics", - "_closing", - ) - - ENDPOINT = "wss://pubsub-edge.twitch.tv" - - def __init__(self, client: Client, pool: PubSubPool, *, max_topics=50): - self.max_topics = max_topics - self.session = None - self.connection: Optional[aiohttp.ClientWebSocketResponse] = None - self.topics: List[Topic] = [] - self.pool = pool - self.client = client - self._latency = None - self._closing = False - self.timeout = asyncio.Event() - - @property - def latency(self) -> Optional[float]: - return self._latency - - async def connect(self): - self.connection = None - if self.session is None: - self.session = aiohttp.ClientSession() - - logger.debug(f"Websocket connecting to {self.ENDPOINT}") - backoff = 2 - for attempt in range(5): - try: - self.connection = await self.session.ws_connect(self.ENDPOINT) - break - except aiohttp.ClientConnectionError: - logger.warning(f"Failed to connect to pubsub edge. Retrying in {backoff} seconds (attempt {attempt}/5)") - await asyncio.sleep(backoff) - backoff **= 2 - - if not self.connection: - raise models.ConnectionFailure("Failed to connect to pubsub edge") - - self._task = self.client.loop.create_task(self.ping_pong()) - self._poll = self.client.loop.create_task(self.poll()) - await self._send_initial_topics() - - async def disconnect(self): - if not self.session or not self.connection or self.connection.closed: - return - - await self.connection.close(code=1000) - self._task.cancel() - self._poll.cancel() - - async def reconnect(self): - await self.disconnect() - await self.pool._process_reconnect_hook(self) - await self.connect() - - async def _send_initial_topics(self): - await self._send_topics(self.topics) - - async def _send_topics(self, topics: List[Topic], type="LISTEN"): - for tok, _topics in groupby(topics, key=lambda val: val.token): - nonce = ("%032x" % uuid.uuid4().int)[:8] - - payload = { - "type": type, - "nonce": nonce, - "data": {"topics": [x._present_set_nonce(nonce) for x in _topics], "auth_token": tok}, - } - logger.debug(f"Sending {type} payload with nonce '{nonce}': {payload}") - await self.send(payload) - - async def subscribe_topics(self, topics: List[Topic]): - if len(self.topics) + len(topics) > self.max_topics: - raise ValueError(f"Cannot have more than {self.max_topics} topics on one websocket") - - self.topics += topics - if not self.connection or self.connection.closed: - return - - await self._send_topics(topics) - - async def unsubscribe_topic(self, topics: List[Topic]): - if any(t not in self.topics for t in topics): - raise ValueError("Topics were given that have not been subscribed to") - - await self._send_topics(topics, type="UNLISTEN") - for t in topics: - self.topics.remove(t) - - async def poll(self): - while not self.connection.closed: - data = await self.connection.receive_json(loads=json.loads) - - handle = getattr(self, "handle_" + data["type"].lower().replace("-", "_"), None) - if handle: - self.client.loop.create_task(handle(data), name=f"pubsub-handle-event: {data['type']}") - else: - print(data) - logger.debug(f"Pubsub event referencing unknown event '{data['type']}'. Discarding") - - if not self._closing: - logger.warning("Unexpected disconnect from pubsub edge! Attempting to reconnect") - self._task.cancel() - await self.connect() - - async def ping_pong(self): - while self.connection and not self.connection.closed: - await asyncio.sleep(240) - self.timeout.clear() - await self.send({"type": "PING"}) - t = time.time() - try: - await asyncio.wait_for(self.timeout.wait(), 10) - except asyncio.TimeoutError: - await asyncio.shield(self.reconnect()) # we're going to get cancelled, so shield the coro - else: - self._latency = time.time() - t - - async def send(self, data: dict): - data = json.dumps(data) - await self.connection.send_str(data) - - async def handle_pong(self, _): - self.timeout.set() - self.client.run_event("pubsub_pong") - - async def handle_message(self, message: dict): - message["data"]["message"] = json.loads(message["data"]["message"]) - msg = models.PubSubMessage(self.client, message["data"]["topic"], message["data"]["message"]) - self.client.run_event("pubsub_message", msg) # generic one - - self.client.run_event(*models.create_message(self.client, message)) - - async def handle_reward_redeem(self, message: dict): - msg = models.PubSubChannelPointsMessage(self.client, message["data"]) - self.client.run_event("pubsub_message", msg) # generic one - self.client.run_event("pubsub_channel_points", msg) - - async def handle_response(self, message: dict): - if message["error"]: - logger.error(f"Received errored response for nonce {message['nonce']}: {message['error']}") - self.client.run_event("pubsub_error", message) - if message["error"] == "ERR_BADAUTH": - nonce = message["nonce"] - await self.pool._process_auth_fail(nonce, self) - - elif message["type"] == "RECONNECT": - logger.warning("Received RECONNECT response from pubsub edge. Reconnecting") - await asyncio.shield(self.reconnect()) - elif message["nonce"]: - logger.debug(f"Received OK response for nonce {message['nonce']}") - self.client.run_event("pubsub_nonce", message) - - async def handle_reconnect(self, message: dict): - logger.warning("Received RECONNECT response from pubsub edge. Reconnecting") - await asyncio.shield(self.reconnect()) diff --git a/twitchio/ext/routines/__init__.py b/twitchio/ext/routines/__init__.py deleted file mode 100644 index 89d4867c..00000000 --- a/twitchio/ext/routines/__init__.py +++ /dev/null @@ -1,480 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -The MIT License (MIT) - -Copyright (c) 2017-present TwitchIO - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -""" -import asyncio -import datetime -import sys -import traceback -from typing import Callable, Optional - - -__all__ = ("Routine", "routine") - - -def compute_timedelta(dt: datetime.datetime) -> float: - if dt.tzinfo is None: - dt = dt.astimezone() - - now = datetime.datetime.now(datetime.timezone.utc) - return max((dt - now).total_seconds(), 0) - - -class Routine: - """The main routine class which helps run async background tasks on a schedule. - - Examples - -------- - .. code:: py - - @routine(seconds=5, iterations=3) - async def test(arg): - print(f'Hello {arg}') - - test.start('World!') - - - .. warning:: - - This class should not be instantiated manually. Use the decorator :func:`routine` instead. - """ - - def __init__( - self, - *, - coro: Callable, - loop: Optional[asyncio.AbstractEventLoop] = None, - iterations: Optional[int] = None, - time: Optional[datetime.datetime] = None, - delta: Optional[float] = None, - wait_first: Optional[bool] = False, - ): - self._coro = coro - self._loop = loop or asyncio.get_event_loop() - self._task: asyncio.Task = None # type: ignore - - self._time = time - self._delta = delta - - self._start_time: datetime.datetime = None # type: ignore - - self._completed_loops = 0 - - iterations = iterations if iterations != 0 else None - self._iterations = iterations - self._remaining_iterations = iterations - - self._before = None - self._after = None - self._error = None - - self._stop_set = False - self._restarting = False - self._wait_first = wait_first - - self._stop_on_error = True - - self._instance = None - - self._args: tuple | None = None - self._kwargs: dict | None = None - - def __get__(self, instance, owner): - if instance is None: - return self - - copy = Routine( - coro=self._coro, - loop=self._loop, - iterations=self._iterations, - time=self._time, - delta=self._delta, - wait_first=self._wait_first, - ) - - copy._instance = instance - copy._before = self._before - copy._after = self._after - copy._error = self._error - setattr(instance, self._coro.__name__, copy) - - return copy - - def start(self, *args, **kwargs) -> asyncio.Task: - """Start the routine and return the created task. - - Parameters - ---------- - stop_on_error: Optional[bool] - Whether or not to stop and cancel the routine on error. Defaults to True. - \*args - The args to pass to the routine. - \*\*kwargs - The kwargs to pass to the routine. - - Returns - ------- - :class:`asyncio.Task` - The created internal asyncio task. - - Raises - ------ - RuntimeError - Raised when this routine is already running when start is called. - """ - if self._task is not None and not self._task.done() and not self._restarting: - raise RuntimeError(f"Routine {self._coro.__name__!r} is already running and is not done.") - - self._args, self._kwargs = args, kwargs - - self._restarting = False - self._task = self._loop.create_task(self._routine(*args, **kwargs)) - - if not self._error: - self._error = self.on_error - - return self._task - - def stop(self) -> None: - """Stop the routine gracefully. - - .. note:: - - This allows the current iteration to complete before the routine is cancelled. - If immediate cancellation is desired consider using :meth:`cancel` instead. - """ - self._stop_set = True - - def cancel(self) -> None: - """Cancel the routine effective immediately and non-gracefully. - - .. note:: - - Consider using :meth:`stop` if a graceful stop, which will complete the current iteration, is desired. - """ - if self._can_be_cancelled(): - self._task.cancel() - - if not self._restarting: - self._task = None - - def restart(self, *args, **kwargs) -> None: - """Restart the currently running routine. - - Parameters - ---------- - stop_on_error: Optional[bool] - Whether or not to stop and cancel the routine on error. Defaults to True. - force: Optional[bool] - If True the restart will cancel the currently running routine effective immediately and restart. - If False a graceful stop will occur, which allows the routine to finish it's current iteration. - Defaults to True. - \*args - The args to pass to the routine. - \*\*kwargs - The kwargs to pass to the routine. - - - .. note:: - - This does not return the internal task unlike :meth:`start`. - """ - force = kwargs.pop("force", True) - self._restarting = True - - self._remaining_iterations = self._iterations - - def restart_when_over(fut, *, args=args, kwargs=kwargs): - self._task.remove_done_callback(restart_when_over) - self.start(*args, **kwargs) - - if self._can_be_cancelled(): - self._task.add_done_callback(restart_when_over) - - if force: - self._task.cancel() - else: - self.stop() - - def before_routine(self, coro: Callable) -> None: - """A decorator to assign a coroutine to run before the routine starts.""" - if not asyncio.iscoroutinefunction(coro): - raise TypeError(f"Expected coroutine function not type, {type(coro).__name__!r}.") - - self._before = coro - - def after_routine(self, coro: Callable) -> None: - """A decorator to assign a coroutine to run after the routine has ended.""" - if not asyncio.iscoroutinefunction(coro): - raise TypeError(f"Expected coroutine function not type, {type(coro).__name__!r}.") - - self._after = coro - - def change_interval( - self, - *, - seconds: Optional[float] = 0, - minutes: Optional[float] = 0, - hours: Optional[float] = 0, - time: Optional[datetime.datetime] = None, - wait_first: Optional[bool] = False, - ) -> None: - """Method which schedules the running interval of the task to change. - - Parameters - ---------- - seconds: Optional[float] - The seconds to wait before the next iteration of the routine. - minutes: Optional[float] - The minutes to wait before the next iteration of the routine. - hours: Optional[float] - The hours to wait before the next iteration of the routine. - time: Optional[datetime.datetime] - A specific time to run this routine at. If a naive datetime is passed, your system local time will be used. - wait_first: Optional[bool] - Whether to wait the specified time before running the first iteration at the new interval. - Defaults to False. - - Raises - ------ - RuntimeError - Raised when the time argument and any hours, minutes or seconds is passed together. - - - .. warning:: - - The time argument can not be passed in conjunction with hours, minutes or seconds. - This behaviour is intended as it allows the time to be exact every day. - """ - time_ = time - - if any((seconds, minutes, hours)) and time_: - raise RuntimeError( - "Argument