diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..7d90e76 --- /dev/null +++ b/.env.sample @@ -0,0 +1,3 @@ +token=Th1sIsN0tT0k3n.k0r3hat0k3nd3hanaidesu.Th1sIsN0tT0k3nk0r3hat0k3nd3hanaidesu +test_token=Th1sIsN0tT0k3n.k0r3hat0k3nd3hanaidesu.Th1sIsN0tT0k3nk0r3hat0k3nd3hanaidesu +test_mode = "y or n" \ No newline at end of file diff --git "a/.github/ISSUE_TEMPLATE/\343\203\220\343\202\260\345\240\261\345\221\212.md" "b/.github/ISSUE_TEMPLATE/\343\203\220\343\202\260\345\240\261\345\221\212.md" index 12bbaf9..06eeacc 100644 --- "a/.github/ISSUE_TEMPLATE/\343\203\220\343\202\260\345\240\261\345\221\212.md" +++ "b/.github/ISSUE_TEMPLATE/\343\203\220\343\202\260\345\240\261\345\221\212.md" @@ -1,10 +1,9 @@ --- name: バグ報告 about: バグを報告するためのIssue -title: 'bug: ○○が動作しない' +title: "bug: ○○が動作しない" labels: bug -assignees: '' - +assignees: "" --- **バグについて説明する** @@ -19,7 +18,7 @@ assignees: '' **スクリーンショット** 問題を説明するためのスクリーンショットを貼り付けて下さい。 -**Discordの何版で発生しますか?** -(例) Android版 +**Discord の何版で発生しますか?** +(例) Android 版 **追加情報** diff --git "a/.github/ISSUE_TEMPLATE/\346\251\237\350\203\275\343\203\252\343\202\257\343\202\250\343\202\271\343\203\210.md" "b/.github/ISSUE_TEMPLATE/\346\251\237\350\203\275\343\203\252\343\202\257\343\202\250\343\202\271\343\203\210.md" index 6bf03c8..5c70c34 100644 --- "a/.github/ISSUE_TEMPLATE/\346\251\237\350\203\275\343\203\252\343\202\257\343\202\250\343\202\271\343\203\210.md" +++ "b/.github/ISSUE_TEMPLATE/\346\251\237\350\203\275\343\203\252\343\202\257\343\202\250\343\202\271\343\203\210.md" @@ -1,10 +1,9 @@ --- name: 機能リクエスト about: EightBotに機能を提案する -title: 'Feature Request: ○○を追加してほしい' +title: "Feature Request: ○○を追加してほしい" labels: enhancement -assignees: '' - +assignees: "" --- **ご希望の内容** diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ac6621f..ada2f09 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,11 +1,9 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - +# Set a time for checks version: 2 updates: - - package-ecosystem: "" # See documentation for possible values - directory: "/" # Location of package manifests + - package-ecosystem: "npm" + directory: "/" schedule: - interval: "weekly" + interval: "daily" + time: "09:00" + timezone: "Asia/Tokyo" diff --git a/.github/workflows/Prettier.yml b/.github/workflows/Prettier.yml new file mode 100644 index 0000000..60fcc35 --- /dev/null +++ b/.github/workflows/Prettier.yml @@ -0,0 +1,25 @@ +name: Prettier + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +jobs: + prettier: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18.x + - name: Install dependencies + run: | + yarn + - name: Run Prettier + run: | + npx prettier --write . + - uses: stefanzweifel/git-auto-commit-action@v4.16.0 + with: + commit_message: Apply Prettier Change diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index 33b7a50..0000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,74 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ "main" ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ "main" ] - schedule: - - cron: '36 8 * * 1' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'python' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - with: - category: "/language:${{matrix.language}}" diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 21cc655..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,33 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a single version of Python -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - -name: Flake8 Lint - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.8 - uses: actions/setup-python@v4 - with: - python-version: "3.8" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 - - name: Lint with flake8 - run: | - flake8 . --count --ignore=E501,E722,C901 --select=E9,F63,F7,F82 --show-source --statistics - flake8 . --count --ignore=E501,E722,C901 --exit-zero --max-complexity=10 --max-line-length=127 --statistics diff --git a/.gitignore b/.gitignore index 44555c8..27b82cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,132 +1,6 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot -.vscode/ -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments +# node_modules folder +node_modules/ +# env .env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# test -test.json \ No newline at end of file +# sqlite file +db.sqlite diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index dc63861..21dd59e 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -17,23 +17,23 @@ diverse, inclusive, and healthy community. Examples of behavior that contributes to a positive environment for our community include: -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience -* Focusing on what is best not just for us as individuals, but for the +- Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: -* The use of sexualized language or imagery, and sexual attention or +- The use of sexualized language or imagery, and sexual attention or advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities @@ -106,7 +106,7 @@ Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an +standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within diff --git a/LICENSE b/LICENCE similarity index 99% rename from LICENSE rename to LICENCE index bd908fe..a31e0ad 100644 --- a/LICENSE +++ b/LICENCE @@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. \ No newline at end of file diff --git a/README.md b/README.md index 86bd3e3..a53fb35 100644 --- a/README.md +++ b/README.md @@ -1 +1,6 @@ -# EightBot \ No newline at end of file +# EightBot + + + + +
diff --git a/cogs/2022.py b/cogs/2022.py deleted file mode 100644 index a2ef215..0000000 --- a/cogs/2022.py +++ /dev/null @@ -1,27 +0,0 @@ -import discord -from discord.ext import commands -from discord import app_commands -import time - - -class count_down(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.command(name="2022年が終わるまであとどのくらい") - async def count( - self, - i: discord.Interaction, - ): - """2022年が終わるまであとどのくらい""" - c = 1672498800 - int(time.time()) - await i.response.send_message( - f"2022年が終わるまであと{c}秒です。" - + f"\n2022年が終わるまであと約{int(c /60 )}分です。" - + f"\n2022年が終わるまであと約{int(c /3600 )}時間です。" - + f"\n2022年が終わるまであと約{int(c /86400 )}日です。" - ) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(count_down(bot)) diff --git a/cogs/5000.py b/cogs/5000.py deleted file mode 100644 index 7ba83e3..0000000 --- a/cogs/5000.py +++ /dev/null @@ -1,71 +0,0 @@ -import discord -from discord.ext import commands -from discord import app_commands -import urllib.parse - - -class gosentyouen(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.choices( - type=[ - app_commands.Choice(name="png(お勧め)", value="png"), - app_commands.Choice(name="jpg", value="jpg"), - app_commands.Choice(name="webp", value="webp"), - ] - ) - @app_commands.choices( - hoshii=[ - app_commands.Choice(name="固定する", value="true"), - app_commands.Choice(name="固定しない", value="false"), - ] - ) - @app_commands.choices( - quality=[ - app_commands.Choice(name="低", value="30"), - app_commands.Choice(name="中", value="70"), - app_commands.Choice(name="高", value="100"), - ] - ) - @app_commands.choices( - noalpha=[ - app_commands.Choice(name="白にする", value="true"), - app_commands.Choice(name="白にしない", value="false"), - ] - ) - @app_commands.choices( - rainbow=[ - app_commands.Choice(name="虹色にする", value="true"), - app_commands.Choice(name="虹色にしない", value="false"), - ] - ) - @app_commands.describe( - hoshii="下部文字列を「欲しい!」に固定する", - noalpha="背景色を白にする", - rainbow="虹色にする", - type="画像拡張子", - quality="画質(1-100)", - bottom="下部文字列", - top="上部文字列", - ) - @app_commands.command(name="5000", description="5000兆円ほしいを生成します。") - async def gosen( - self, - i: discord.Interaction, - top: str, - bottom: str, - type: str, - quality: str, - hoshii: str, - noalpha: str, - rainbow: str, - ): - embed = discord.Embed(title="5000兆円ほしい!!", color=0x3498DB).set_image( - url=f"https://gsapi.cbrx.io/image?top={urllib.parse.quote(top)}&bottom={urllib.parse.quote(bottom)}&type={urllib.parse.quote(type)}&q={urllib.parse.quote(quality)}&hoshii={urllib.parse.quote(hoshii)}&noalpha={urllib.parse.quote(noalpha)}&rainbow={urllib.parse.quote(rainbow)}" - ) - await i.response.send_message(embed=embed) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(gosentyouen(bot)) diff --git a/cogs/afk.py b/cogs/afk.py deleted file mode 100644 index db417ab..0000000 --- a/cogs/afk.py +++ /dev/null @@ -1,78 +0,0 @@ -from discord.ext import commands -from discord import app_commands -from replit import db -import discord - - -def afk_set_db(key, data): - db[f"afk_{key}"] = data - - -def afk_get(key): - return db[f"afk_{key}"] - - -class afk(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.describe(reason="afkになる理由") - @app_commands.command(name="afk_set", description="afkをセット又は解除します。") - async def afks(self, i: discord.Interaction, reason: str): - try: - afk_set_db(int(i.user.id), reason) - await i.response.send_message( - embed=discord.Embed( - title="<:check_mark:985366958537076766> : 成功", - description="afkをセットしました。", - color=0x3498DB, - ), - ephemeral=True, - ) - except: - await i.response.send_message( - embed=discord.Embed( - title="<:error_mark:985366305156767794> : 失敗", - description="何らかのエラーが発生しました。", - color=0x3498DB, - ), - ephemeral=True, - ) - - @app_commands.command(name="afk_kaizyo", description="afkを解除します") - async def afkk(self, i: discord.Interaction): - try: - afk_set_db(int(i.user.id), False) - await i.response.send_message( - embed=discord.Embed( - title="<:check_mark:985366958537076766> : 成功", - description="afkを解除しました。", - color=0x3498DB, - ), - ephemeral=True, - ) - except: - await i.response.send_message( - embed=discord.Embed( - title="<:error_mark:985366305156767794> : 失敗", - description="何らかのエラーが発生しました。", - color=0x3498DB, - ), - ephemeral=True, - ) - - @commands.Cog.listener(name="on_message") - async def afk_msg(self, message: discord.Message): - try: - if message.mentions: - for d in message.mentions: - if afk_get[int(d.id)]: - await message.channel.send( - "このユーザーはafkです。(こののメッセージは10秒後に削除されます。)", delete_after=10 - ) - except: - pass - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(afk(bot)) diff --git a/cogs/auto-news.py b/cogs/auto-news.py deleted file mode 100644 index 8217d2d..0000000 --- a/cogs/auto-news.py +++ /dev/null @@ -1,26 +0,0 @@ -import discord -from discord.ext import commands - - -class auto_news(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @commands.Cog.listener(name="on_message") - async def msg_auto_news(self, msg: discord.Message): - if msg.channel.type == discord.ChannelType.news: - if msg.channel.topic: - if msg.channel.topic.startswith("eight-auto-news"): - await msg.publish() - await msg.add_reaction("✅") - return - else: - return - else: - return - else: - return - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(auto_news(bot)) diff --git a/cogs/ban_member.py b/cogs/ban_member.py deleted file mode 100644 index 0561a63..0000000 --- a/cogs/ban_member.py +++ /dev/null @@ -1,38 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord - - -class ban_member(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.command(name="ban_member", description="Banされたユーザー一覧を表示します。") - async def ban_members(self, i: discord.Interaction): - m = [] - async for entry in i.guild.bans(limit=999999): - m.append(f"{entry.user.name}, ") - if not len(m) == 0: - end = len(m) - 1 - m[end] = m[end].split(", ")[0] - send_content = "".join(m) - elif len(m) == 0: - send_content = "Banされたユーザーはいません。" - try: - await i.response.send_message( - embed=discord.Embed( - title="Banされたユーザー", description=send_content, color=0x3498DB - ), - ephemeral=True, - ) - except: - await i.response.send_message( - embed=discord.Embed( - title="Banされたユーザー", description="取得できませんでした。", color=0x3498DB - ), - ephemeral=True, - ) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(ban_member(bot)) diff --git a/cogs/bot_info.py b/cogs/bot_info.py deleted file mode 100644 index e2169fa..0000000 --- a/cogs/bot_info.py +++ /dev/null @@ -1,30 +0,0 @@ -import discord -from discord.ext import commands -from discord import app_commands -from replit import db - - -def bot_command_count_get(data): - return db[f"bot_command_{data}_count_db"] - - -def bot_command_all_count_db_get(): - return db[f"bot_command_all_count_db"] - - -class bot_info(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.command(name="bot_info", description="Botの情報を表示します。") - async def botinfo(self, i: discord.Interaction): - await i.response.send_message( - embed=discord.Embed(title="Botの情報", color=0x3498DB).add_field( - name="全コマンドの合計実行数", value=str(bot_command_all_count_db_get()) - ), - ephemeral=True, - ) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(bot_info(bot)) diff --git a/cogs/bot_invite.py b/cogs/bot_invite.py deleted file mode 100644 index ee5d405..0000000 --- a/cogs/bot_invite.py +++ /dev/null @@ -1,88 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord -from replit import db - - -def db_set(key, data): - db[f"bot_invite_db_id_{key}"] = data - - -def db_get(key): - return db[f"bot_invite_db_id_{key}"] - - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) - self.add_item(MySelect()) - - -class MySelect(discord.ui.Select): - def __init__(self): - super().__init__( - placeholder="招待するBotの権限を選択して下さい", - min_values=1, - custom_id="bot_invite_myview_select_menu", - max_values=1, - options=[ - discord.SelectOption( - label="管理者", - description="全ての権限を有効にしたURLを生成します。", - value="admin", - ), - discord.SelectOption( - label="権限選択式", description="全ての権限を選択式にしたURLを生成します。", value="all" - ), - discord.SelectOption( - label="権限なし", description="全ての権限をなしにしたURLを生成します。", value="none" - ), - ], - ) - - async def callback(self, i: discord.Interaction): - bot_id = db_get(i.message.id) - d = self.values[0] - if d == "admin": - await i.response.send_message( - ephemeral=True, - content=f"[Botを招待]({discord.utils.oauth_url(int(bot_id), permissions=discord.Permissions(permissions=discord.Permissions.administrator.flag))})", - ) - elif d == "all": - await i.response.send_message( - ephemeral=True, - content=f"[Botを招待]({discord.utils.oauth_url(int(bot_id), permissions=discord.Permissions(permissions=discord.Permissions.all().value))})", - ) - elif d == "none": - await i.response.send_message( - ephemeral=True, - content=f"[Botを招待]({discord.utils.oauth_url(int(bot_id))})", - ) - else: - await i.response.send_message("不明なパラメーターが選択されました。", ephemeral=True) - - -class bot_invite(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.describe(bot="招待するBot") - @app_commands.command(name="bot_invite", description="Botの招待リンクを生成します。") - async def botinvite(self, i: discord.Interaction, bot: discord.User = None): - if bot: - if bot.bot: - await i.response.send_message("セレクトメニューをクリックして選択してください") - msg = await self.bot.get_channel(i.channel.id).send(view=MyView()) - db_set(int(msg.id), int(bot.id)) - self.bot.add_view(MyView(), message_id=msg.id) - else: - await i.response.send_message("指定したものはBotではありません。") - else: - await i.response.send_message("セレクトメニューをクリックして選択してください") - msg = await self.bot.get_channel(i.channel.id).send(view=MyView()) - db_set(int(msg.id), int(self.bot.user.id)) - self.bot.add_view(MyView(), message_id=msg.id) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(bot_invite(bot)) diff --git a/cogs/bot_process.py b/cogs/bot_process.py deleted file mode 100644 index 4f3b560..0000000 --- a/cogs/bot_process.py +++ /dev/null @@ -1,44 +0,0 @@ -import discord -from discord.ext import commands -from replit import db - - -def bot_command_count_get(data): - return db[f"bot_command_{data}_count_db"] - - -def bot_command_count(data): - try: - db[f"bot_command_{data}_count_db"] = int(bot_command_count_get(data)) + 1 - except KeyError: - db[f"bot_command_{data}_count_db"] = 0 + 1 - - -def bot_command_all_count_db_get(): - return db["bot_command_all_count_db"] - - -def bot_command_count_p1(): - try: - db["bot_command_all_count_db"] = int(bot_command_all_count_db_get()) + 1 - return - except KeyError: - db["bot_command_all_count_db"] = 0 + 1 - - -class bot_process(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @commands.Cog.listener(name="on_interaction") - async def interaction(self, i: discord.Interaction): - if i.type == discord.InteractionType.application_command: - bot_command_count_p1() - if i.command: - bot_command_count(data=i.command.name) - else: - return - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(bot_process(bot)) diff --git a/cogs/embed.py b/cogs/embed.py deleted file mode 100644 index 3111957..0000000 --- a/cogs/embed.py +++ /dev/null @@ -1,118 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord -from discord import ui, TextStyle - - -class Modal(ui.Modal, title="Embed作成パネル"): - titles = ui.TextInput( - label="タイトル", - style=TextStyle.long, - placeholder="埋め込みのタイトル。256文字まで", - max_length=256, - required=False, - ) - description = ui.TextInput( - label="説明", - style=TextStyle.long, - placeholder="埋め込みの説明。4000文字まで", - max_length=4000, - required=True, - ) - set_footer_text = ui.TextInput( - label="フッターテキスト", - style=TextStyle.long, - placeholder="フッターテキスト。2048文字まで", - max_length=2048, - required=False, - ) - f_icon_url = ui.TextInput( - label="フッターアイコン", - style=TextStyle.short, - placeholder="フッターアイコンのURL。Http(s)のみ", - required=False, - ) - samuneiru = ui.TextInput( - label="サムネイル", - style=TextStyle.short, - placeholder="埋め込みコンテンツのサムネイル。Http(s)のみ", - required=False, - ) - - async def on_submit(self, interaction: discord.Interaction): - if ( - str(self.f_icon_url).startswith("http://") - or str(self.samuneiru).startswith("http://") - or str(self.f_icon_url).startswith("https://") - or str(self.samuneiru).startswith("https://") - ): - await interaction.response.send_message( - "URLはhttp(s)から始まります。", ephemeral=True - ) - return - embed = discord.Embed(title=self.titles, description=self.description) - embed.set_footer(text=self.set_footer_text, icon_url=self.f_icon_url) - embed.set_thumbnail(url=self.samuneiru) - buttonView = discord.ui.View(timeout=None) - buttonView.add_item( - discord.ui.Button( - label="Discord Color", - style=discord.ButtonStyle.primary, - custom_id="color_01", - ) - ) - buttonView.add_item( - discord.ui.Button( - label="灰色", style=discord.ButtonStyle.secondary, custom_id="color_02" - ) - ) - buttonView.add_item( - discord.ui.Button( - label="緑", style=discord.ButtonStyle.success, custom_id="color_03" - ) - ) - buttonView.add_item( - discord.ui.Button( - label="赤", style=discord.ButtonStyle.danger, custom_id="color_04" - ) - ) - await interaction.response.send_message(embed=embed, view=buttonView) - - -class embed_make(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @commands.Cog.listener(name="on_interaction") - async def color_interaction(self, i: discord.Interaction): - if i.data.get("custom_id") == "color_01": - em = i.message.embeds[0] - em.color = 0x5865F2 - await i.message.edit(embed=em) - return await i.response.send_message("完了!", ephemeral=True) - if i.data.get("custom_id") == "color_02": - em = i.message.embeds[0] - em.color = 0x4F545C - await i.message.edit(embed=em) - return await i.response.send_message("完了!", ephemeral=True) - if i.data.get("custom_id") == "color_03": - em = i.message.embeds[0] - em.color = 0x43B581 - await i.message.edit(embed=em) - return await i.response.send_message("完了!", ephemeral=True) - if i.data.get("custom_id") == "color_04": - em = i.message.embeds[0] - em.color = 0xF04747 - await i.message.edit(embed=em) - return await i.response.send_message("完了!", ephemeral=True) - - else: - return - - @app_commands.command(name="embed_make", description="Embedを作成し、送信します。") - async def embed_make(self, i: discord.Interaction): - await i.response.send_modal(Modal()) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(embed_make(bot)) diff --git a/cogs/global-chat.py b/cogs/global-chat.py deleted file mode 100644 index a37c866..0000000 --- a/cogs/global-chat.py +++ /dev/null @@ -1,92 +0,0 @@ -import discord -from discord.ext import commands - - -class global_chat_cog(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @commands.Cog.listener(name="on_message") - async def global_chat_msg_sys(self, message: discord.Message): - if message.channel.type != discord.ChannelType.text: - return - if message.channel.topic: - if not message.channel.topic.startswith("eight-global"): - return - if message.author.bot: - return - for channel in self.bot.get_all_channels(): - if channel.type != discord.ChannelType.text: - continue - if not channel.topic: - continue - if channel.topic.startswith("eight-global"): - if channel == message.channel: - continue - embed = discord.Embed(description=message.content, color=0x3498DB) - if hasattr(message.author.avatar, "key"): - embed.set_author( - name="{}#{}".format( - message.author.name, message.author.discriminator - ), - icon_url="https://media.discordapp.net/avatars/{}/{}.png?size=1024".format( - message.author.id, message.author.avatar.key - ), - ) - else: - embed.set_author( - name="{}#{}".format( - message.author.name, message.author.discriminator - ), - url=f"https://discord.com/users/{message.author.id}", - ) - if hasattr(message.guild.icon, "key"): - embed.set_footer( - text="{} / mID:{}".format(message.guild.name, message.id), - icon_url="https://media.discordapp.net/icons/{}/{}.png?size=1024".format( - message.guild.id, message.guild.icon.key - ), - ) - else: - embed.set_footer( - text="{} / mID:{}".format(message.guild.name, message.id) - ) - if message.attachments != []: - embed.set_image(url=message.attachments[0].url) - if message.stickers != []: - embed.set_thumbnail(url=message.stickers[0].url) - if message.reference: - reference_msg = await message.channel.fetch_message( - message.reference.message_id - ) - if ( - reference_msg.embeds - and reference_msg.author == self.bot.user - ): - reference_message_content = reference_msg.embeds[ - 0 - ].description - reference_message_author = reference_msg.embeds[ - 0 - ].author.name - elif reference_msg.author != self.bot.user: - reference_message_content = reference_msg.content - reference_message_author = ( - reference_msg.author.name - + "#" - + reference_msg.author.discriminator - ) - reference_content = "" - for string in reference_message_content.splitlines(): - reference_content += "> " + string + "\n" - reference_value = "**@{}**\n{}".format( - reference_message_author, reference_content - ) - embed.add_field(name="返信", value=reference_value, inline=True) - - await channel.send(embed=embed) - await message.add_reaction("✅") - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(global_chat_cog(bot)) diff --git a/cogs/help.py b/cogs/help.py deleted file mode 100644 index 6b36084..0000000 --- a/cogs/help.py +++ /dev/null @@ -1,58 +0,0 @@ -import discord -from discord.ext import commands -import Paginator -from discord import app_commands - -a = "Tips: /help コマンド名でコマンドを検索できます。" -cmd = [] - - -class Help(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - for command in self.bot.tree.walk_commands(): - cmd.append(app_commands.Choice(name=command.name, value=command.name)) - - @discord.app_commands.choices(cmd=cmd) - @app_commands.command(name="help", description="helpを表示します。") - async def help(self, i: discord.Interaction, cmd: str = None) -> None: - if not cmd: - he = discord.Embed(title="ページ2", color=0x3498DB) - he.set_footer(text=a) - ee = discord.Embed( - title="ページ1", - color=0x3498DB, - ).set_footer(text=a) - num = 0 - for command in self.bot.tree.walk_commands(): - num = num + 1 - if num > 24: - he.add_field(name=command.name, value=command.description) - else: - ee.add_field(name=command.name, value=command.description) - embeds = [ - ee, - he, - ] - return await Paginator.Simple().start(i, pages=embeds) - elif cmd: - if self.bot.tree.get_command(cmd): - return await i.response.send_message( - embed=discord.Embed( - title=self.bot.tree.get_command(cmd).name, - description=self.bot.tree.get_command(cmd).description, - color=0x3498DB, - ) - ) - else: - return await i.response.send_message( - embed=discord.Embed( - title="エラー", - description="検索した名前のコマンドは存在しません。", - color=0x3498DB, - ) - ) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(Help(bot)) diff --git a/cogs/imgcheck.py b/cogs/imgcheck.py deleted file mode 100644 index f47c277..0000000 --- a/cogs/imgcheck.py +++ /dev/null @@ -1,111 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord -import aiohttp -import urllib.parse -import asyncio - - -class imgcheck(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.command(name="img_url_check", description="URLの画像から拾い画かチェックするコマンド。") - async def img_url_check(self, i: discord.Interaction, url: str): - load_text = "拾い画チェッカーAPIに接続しています" - await i.response.send_message(load_text) - await asyncio.sleep(1) - await i.edit_original_response(content=f"{load_text}.") - await asyncio.sleep(1) - await i.edit_original_response(content=f"{load_text}..") - await asyncio.sleep(1) - await i.edit_original_response(content=f"{load_text}...") - async with aiohttp.ClientSession() as session: - async with session.get( - f"https://api.irucabot.com/imgcheck/check_url?url={urllib.parse.quote(url)}" - ) as resp: - resp_data = await resp.json() - if resp_data["status"] == "success": - if resp_data["found"]: - await i.edit_original_response( - content=None, - embed=discord.Embed( - title="これは拾い画です。", - description=f"この画像と一致している画像が{resp_data['count']}個ありました。\n[Google画像検索結果]({resp_data['resulturl']})\n[拾い画チェッカーAPIを使用しています。](https://imgcheck.irucabot.com/api-reference/check_url)", - ), - ) - elif not resp_data["found"]: - await i.edit_original_response( - content=None, - embed=discord.Embed( - title="これは拾い画ではない可能性が高いです。", - description=f"この画像と一致している画像が0個ありました。\n\n[拾い画チェッカーAPIを使用しています。](https://imgcheck.irucabot.com/api-reference/check_url)", - ), - ) - else: - await i.edit_original_response( - content=None, - embed=discord.Embed( - title="起るはずの無いことが起こりました。", - description=f"起るはずの無いことが起こったので、結果を表示できません。", - ), - ) - elif resp_data["status"] == "error": - await i.edit_original_response( - content=None, - embed=discord.Embed( - title="エラーが発生しました。", description=resp_data["message_ja"] - ), - ) - - @app_commands.command(name="img_check", description="拾い画チェッカー。") - async def imgcheck(self, i: discord.Interaction, img: discord.Attachment): - load_text = "拾い画チェッカーAPIに接続しています" - await i.response.send_message(load_text) - await asyncio.sleep(1) - await i.edit_original_response(content=f"{load_text}.") - await asyncio.sleep(1) - await i.edit_original_response(content=f"{load_text}..") - await asyncio.sleep(1) - await i.edit_original_response(content=f"{load_text}...") - async with aiohttp.ClientSession() as session: - async with session.get( - f"https://api.irucabot.com/imgcheck/check_url?url={urllib.parse.quote(img.url)}" - ) as resp: - resp_data = await resp.json() - if resp_data["status"] == "success": - if resp_data["found"]: - await i.edit_original_response( - content=None, - embed=discord.Embed( - title="これは拾い画です。", - description=f"この画像と一致している画像が{resp_data['count']}個ありました。\n[Google画像検索結果]({resp_data['resulturl']})\n[拾い画チェッカーAPIを使用しています。](https://imgcheck.irucabot.com/api-reference/check_url)", - ), - ) - elif not resp_data["found"]: - await i.edit_original_response( - content=None, - embed=discord.Embed( - title="これは拾い画ではない可能性が高いです。", - description=f"この画像と一致している画像が0個ありました。\n\n[拾い画チェッカーAPIを使用しています。](https://imgcheck.irucabot.com/api-reference/check_url)", - ), - ) - else: - await i.edit_original_response( - content=None, - embed=discord.Embed( - title="起るはずの無いことが起こりました。", - description=f"起るはずの無いことが起こったので、結果を表示できません。", - ), - ) - elif resp_data["status"] == "error": - await i.edit_original_response( - content=None, - embed=discord.Embed( - title="エラーが発生しました。", description=resp_data["message_ja"] - ), - ) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(imgcheck(bot)) diff --git a/cogs/ping.py b/cogs/ping.py deleted file mode 100644 index d1d7ef3..0000000 --- a/cogs/ping.py +++ /dev/null @@ -1,16 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord - - -class ping(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.command(name="ping", description="ping値を測定します。") - async def pingpong(self, i: discord.Interaction): - await i.response.send_message(f"{round(self.bot.latency * 1000)}ms") - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(ping(bot)) diff --git a/cogs/role_all.py b/cogs/role_all.py deleted file mode 100644 index ac6411e..0000000 --- a/cogs/role_all.py +++ /dev/null @@ -1,54 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord -import enum - - -class bot(enum.Enum): - はい = True - いいえ = False - - -class roleall(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.describe(bot="Botにもロールを付与する?") - @app_commands.choices( - bot=[ - app_commands.Choice(name="はい", value="y"), - app_commands.Choice(name="いいえ", value="f"), - ] - ) - @app_commands.command(name="role_all_add", description="全メンバーにロールを付与します。") - async def roleall_add(self, i: discord.Interaction, role: discord.Role, bot: str): - if bot == "y": - for member in i.guild.members: - await member.add_roles(role) - elif bot == "f": - for member in i.guild.members: - if not member.bot: - await member.add_roles(role) - - @app_commands.describe(bot="Botのロールも除去する?") - @app_commands.choices( - bot=[ - app_commands.Choice(name="はい", value="y"), - app_commands.Choice(name="いいえ", value="f"), - ] - ) - @app_commands.command(name="role_all_remove", description="全員からロールを除去します。") - async def roleall_remove( - self, i: discord.Interaction, role: discord.Role, bot: str - ): - if bot == "y": - for member in i.guild.members: - await member.remove_roles(role) - elif bot == "f": - for member in i.guild.members: - if not member.bot: - await member.remove_roles(role) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(roleall(bot)) diff --git a/cogs/role_list.py b/cogs/role_list.py deleted file mode 100644 index 01e4eea..0000000 --- a/cogs/role_list.py +++ /dev/null @@ -1,22 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord - - -class role_list(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.command(name="role_list", description="ロールのリストを送信します。") - async def rolelists(self, i: discord.Interaction): - guild = i.guild - if len(guild.roles) > 1: - role = "\n".join([r.mention for r in guild.roles][1:]) - embed = discord.Embed(title="ロール一覧", description=f"{role}") - await i.response.send_message(embed=embed) - else: - await i.response.send_message("ロールが見つかりませんでした。") - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(role_list(bot)) diff --git a/cogs/splatoon2.py b/cogs/splatoon2.py deleted file mode 100644 index 4b9b6d3..0000000 --- a/cogs/splatoon2.py +++ /dev/null @@ -1,12 +0,0 @@ -from discord.ext import commands - - -class splatoon_cog_one(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - # 近日追加。 - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(splatoon_cog_one(bot)) diff --git a/cogs/trans.py b/cogs/trans.py deleted file mode 100644 index bff49d3..0000000 --- a/cogs/trans.py +++ /dev/null @@ -1,44 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord -import async_google_trans_new - - -class trans_kinou(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.describe(text="翻訳するテキスト", lang="翻訳をする言語") - @app_commands.choices( - lang=[ - app_commands.Choice(name="アルメニア語", value="hy"), - app_commands.Choice(name="中国語(簡体)", value="zh"), - app_commands.Choice(name="オランダ語", value="nl"), - app_commands.Choice(name="英語", value="en"), - app_commands.Choice(name="エスペラント語", value="eo"), - app_commands.Choice(name="フランス語", value="fr"), - app_commands.Choice(name="グルジア語", value="ka"), - app_commands.Choice(name="ドイツ語", value="de"), - app_commands.Choice(name="ギリシャ語", value="el"), - app_commands.Choice(name="イタリア語", value="it"), - app_commands.Choice(name="日本語", value="ja"), - app_commands.Choice(name="韓国語", value="ko"), - app_commands.Choice(name="クルド語", value="ku"), - app_commands.Choice(name="ペルシャ語", value="fa"), - app_commands.Choice(name="ポーランド語", value="pl"), - app_commands.Choice(name="ポルトガル語(ポルトガル、ブラジル)", value="pt"), - app_commands.Choice(name="ルーマニア語", value="ro"), - app_commands.Choice(name="スペイン語", value="es"), - app_commands.Choice(name="スウェーデン語", value="sv"), - app_commands.Choice(name="トルコ語", value="tr"), - app_commands.Choice(name="ウルドゥー語", value="ur"), - ] - ) - @app_commands.command(name="google_trans", description="Google翻訳をします。") - async def trans_cmd(self, i: discord.Interaction, lang: str, text: str): - g = async_google_trans_new.AsyncTranslator() - await i.response.send_message(content=await g.translate(text, lang)) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(trans_kinou(bot)) diff --git a/cogs/uptime.py b/cogs/uptime.py deleted file mode 100644 index 881e852..0000000 --- a/cogs/uptime.py +++ /dev/null @@ -1,16 +0,0 @@ -from discord.ext import commands -from discord import app_commands -import discord - - -class uptime(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.command(name="up_time", description="Botの起動時間を送信します。") - async def uptime(self, i: discord.Interaction): - await i.response.send_message(f"") - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(uptime(bot)) diff --git a/cogs/userinfo.py b/cogs/userinfo.py deleted file mode 100644 index 73a5054..0000000 --- a/cogs/userinfo.py +++ /dev/null @@ -1,47 +0,0 @@ -import discord -from discord.ext import commands -from discord import app_commands - - -class user(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.describe(user="ユーザー") - @app_commands.command(name="user", description="指定したユーザーの情報を返します。") - async def user(self, i: discord.Interaction, user: discord.User): - embed = discord.Embed(title=f"{user.name}のユーザー情報") - base = "https://media.discordapp.net/avatars" - if hasattr(user.avatar, "key"): - embed.set_author( - name=f"{user.name}#{user.discriminator}の情報", - icon_url=f"{base}/{user.id}/{user.avatar.key}.png", - ) - embed.set_thumbnail(url=f"{base}/{user.id}/{user.avatar.key}.png") - else: - embed.set_author( - name=f"{user.name}#{user.discriminator}", - icon_url=user.default_avatar.url, - ) - embed.set_thumbnail(url=user.default_avatar.url) - if user.bot is True: - b = "はい" - else: - b = "いいえ" - if user.system is True: - c = "はい" - else: - c = "いいえ" - embed.add_field( - name="アカウント作成日時", value=discord.utils.format_dt(user.created_at, "f") - ) - embed.add_field(name="ユーザー名", value=user.name) - embed.add_field(name="id", value=f"`{user.id}`") - embed.add_field(name="ディスクリミネーター", value=f"`{user.discriminator}`") - embed.add_field(name="Botアカウントですか?", value=b) - embed.add_field(name="システムユーザーですか?", value=c) - await i.response.send_message(embed=embed, ephemeral=True) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(user(bot)) diff --git a/cogs/verify.py b/cogs/verify.py deleted file mode 100644 index 4358cb0..0000000 --- a/cogs/verify.py +++ /dev/null @@ -1,56 +0,0 @@ -import discord -from discord.ext import commands -from discord import app_commands -from replit import db - - -def verify_db(key, data): - db[f"verify_1_db_{key}"] = data - - -def verify_db_get(key): - return db[f"verify_1_db_{key}"] - - -class Button1(discord.ui.Button): - def __init__(self): - super().__init__( - label="認証", style=discord.ButtonStyle.primary, custom_id="verify_type_1" - ) - - -class verify(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @commands.Cog.listener(name="on_interaction") - async def verify_interaction_callback(self, i: discord.Interaction): - if i.data.get("custom_id") == "verify_type_1": - data = verify_db_get(int(i.message.id)) - await i.guild.get_member(i.user.id).add_roles( - i.guild.get_role(int(data["role_id"])) - ) - await i.response.send_message("ロールを付与しました。", ephemeral=True) - else: - return - - @app_commands.describe(name="パネルの名前", description="パネルの説明", role="付与するロール") - @app_commands.command(name="verify", description="ボタン式の認証パネルを生成します。") - async def nomal_verify( - self, i: discord.Interaction, name: str, description: str, role: discord.Role - ): - buttonView = discord.ui.View(timeout=None) - buttonView.add_item(Button1()) - - msg = await self.bot.get_channel(i.channel.id).send( - embed=discord.Embed(title=name, description=description).add_field( - name="付与するロール", value=f"{role.mention}" - ), - view=buttonView, - ) - verify_db(int(msg.id), {"msg_id": int(msg.id), "role_id": role.id}) - await i.response.send_message("パネルの生成が完了しました。", ephemeral=True) - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(verify(bot)) diff --git a/cogs/voicetext.py b/cogs/voicetext.py deleted file mode 100644 index e744219..0000000 --- a/cogs/voicetext.py +++ /dev/null @@ -1,10 +0,0 @@ -from discord.ext import commands - - -class voiceText(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(voiceText(bot)) diff --git a/cogs/weather.py b/cogs/weather.py deleted file mode 100644 index 5621024..0000000 --- a/cogs/weather.py +++ /dev/null @@ -1,65 +0,0 @@ -import discord -from discord.ext import commands -from discord import app_commands -import aiohttp - - -class weather(commands.Cog): - def __init__(self, bot: commands.Bot) -> None: - self.bot: commands.Bot = bot - - @app_commands.choices( - city=[ - app_commands.Choice(name="札幌", value="016010"), - app_commands.Choice(name="青森", value="020010"), - app_commands.Choice(name="秋田", value="050010"), - app_commands.Choice(name="山形", value="060010"), - app_commands.Choice(name="福島", value="070010"), - app_commands.Choice(name="埼玉", value="110010"), - app_commands.Choice(name="千葉", value="120010"), - app_commands.Choice(name="東京", value="130010"), - app_commands.Choice(name="新潟", value="150010"), - app_commands.Choice(name="金沢", value="170010"), - app_commands.Choice(name="福井", value="180010"), - app_commands.Choice(name="長野", value="200010"), - app_commands.Choice(name="岐阜", value="210010"), - app_commands.Choice(name="静岡", value="220010"), - app_commands.Choice(name="京都", value="260010"), - app_commands.Choice(name="大阪", value="270000"), - app_commands.Choice(name="神戸", value="280010"), - app_commands.Choice(name="奈良", value="290010"), - app_commands.Choice(name="和歌山", value="300010"), - app_commands.Choice(name="鳥取", value="310010"), - app_commands.Choice(name="岡山", value="330010"), - app_commands.Choice(name="広島", value="340010"), - app_commands.Choice(name="山口", value="350020"), - app_commands.Choice(name="徳島", value="360010"), - app_commands.Choice(name="福岡", value="400010"), - ] - ) - @app_commands.command(name="weather") - async def weather(self, i: discord.Interaction, city: str): - - """天気を表示します。""" - base = "https://weather.tsukumijima.net/api/forecast/city" - async with aiohttp.ClientSession() as session: - headers = {"User-Agent": "EightBot/2.2(DiscordBot)"} - async with session.get(f"{base}/{city}", headers=headers) as r: - if r.status == 200: - js = await r.json() - f = js["forecasts"][0] - embed = discord.Embed( - title=js["title"], - description=js["description"]["bodyText"], - color=0x3498DB, - ) - embed.add_field( - name=f["date"] + "の天気。", value="天気は" + f["telop"] + "です。" - ) - await i.response.send_message(embed=embed) - else: - await i.response.send_message("取得できません。") - - -async def setup(bot: commands.Bot) -> None: - await bot.add_cog(weather(bot)) diff --git a/commands/bot/bot_invite.ts b/commands/bot/bot_invite.ts new file mode 100644 index 0000000..02c5431 --- /dev/null +++ b/commands/bot/bot_invite.ts @@ -0,0 +1,65 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { MessageEmbed, MessageActionRow, MessageButton } from "discord.js"; +export class BotInvite extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("bot_invite") + .setDescription("指定したBotの招待リンクを生成します。") + .addUserOption((input) => + input.setName("bot").setDescription("Bot").setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + const user = interaction.options.getUser("bot"); + if (!user?.bot) + return await interaction.reply({ + content: "指定したBotはユーザーです。", + ephemeral: true, + }); + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setLabel("管理者権限で招待") + .setStyle("LINK") + .setURL( + `https://discord.com/api/oauth2/authorize?client_id=${user?.id}&permissions=8&scope=bot%20applications.commands` + ) + ) + .addComponents( + new MessageButton() + .setLabel("権限を選択して招待") + .setStyle("LINK") + .setURL( + `https://discord.com/api/oauth2/authorize?client_id=${user?.id}&permissions=4398046511095&scope=bot%20applications.commands` + ) + ) + .addComponents( + new MessageButton() + .setLabel("権限なしで招待") + .setStyle("LINK") + .setURL( + `https://discord.com/api/oauth2/authorize?client_id=${user?.id}&permissions=0&scope=bot%20applications.commands` + ) + ); + await interaction.reply({ + embeds: [ + new MessageEmbed() + .setTitle(`${user?.tag}を招待。`) + .setDescription( + `以下のボタンをクリックすることで、${user?.tag}を招待出来ます。` + ) + .setColor(0x3498db), + ], + components: [row], + }); + } +} diff --git a/commands/bot/help.ts b/commands/bot/help.ts new file mode 100644 index 0000000..81997d5 --- /dev/null +++ b/commands/bot/help.ts @@ -0,0 +1,34 @@ +import { isMessageInstance } from "@sapphire/discord.js-utilities"; +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { MessageEmbed } from "discord.js"; +export class help extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder.setName("help").setDescription("Botのヘルプを表示します。") + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + const app = + this.container.client.application?.commands?.cache?.map( + (appcmd) => appcmd + ) || []; + const embed = new MessageEmbed(); + embed.setTitle("EightBotヘルプ").setColor(0x3498db); + let num: number = 0; + for (const cmd of app) { + num = num + 1; + embed.addFields({ + name: cmd.name, + value: cmd.description || "説明はありません。", + }); + } + await interaction.reply({ embeds: [embed] }); + } +} diff --git a/commands/bot/ping.ts b/commands/bot/ping.ts new file mode 100644 index 0000000..d6cdae1 --- /dev/null +++ b/commands/bot/ping.ts @@ -0,0 +1,53 @@ +import { isMessageInstance } from "@sapphire/discord.js-utilities"; +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { MessageEmbed } from "discord.js"; +export class Ping extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder.setName("ping").setDescription("Botの現在のPing値を返します。") + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + const msg = await interaction.reply({ + embeds: [ + new MessageEmbed().setDescription("**Ping?**").setColor(0x3498db), + ], + ephemeral: true, + fetchReply: true, + }); + + if (isMessageInstance(msg)) { + const diff = msg.createdTimestamp - interaction.createdTimestamp; + const ping = Math.round(this.container.client.ws.ping); + return interaction.editReply({ + embeds: [ + new MessageEmbed() + .setDescription("**Pong 🏓!**") + .setColor(0x3498db) + .addFields( + { + name: "往復でかかった時間", + value: `${diff / 1000}秒(${diff}ミリ秒)`, + }, + { name: "ハートビート", value: `${ping / 1000}秒(${ping}ミリ秒)` } + ), + ], + }); + } + + return interaction.editReply({ + embeds: [ + new MessageEmbed() + .setDescription("**Pingの取得に失敗しました。**") + .setColor(0x3498db), + ], + }); + } +} diff --git a/commands/individual/5000.ts b/commands/individual/5000.ts new file mode 100644 index 0000000..6ac838e --- /dev/null +++ b/commands/individual/5000.ts @@ -0,0 +1,103 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { MessageEmbed } from "discord.js"; +export class GosenChyoen extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("5000") + .setDescription("5000兆円ほしいを生成します。") + .addStringOption((option) => + option.setName("top").setDescription("上部文字列").setRequired(true) + ) + .addStringOption((option) => + option + .setName("bottom") + .setDescription("下部文字列") + .setRequired(true) + ) + .addStringOption((option) => + option + .setName("type") + .setDescription("画像の拡張子") + .setChoices( + { name: "png(お勧め)", value: "png" }, + { name: "jpg", value: "jpg" }, + { name: "webp", value: "webp" } + ) + .setRequired(true) + ) + .addStringOption((option) => + option + .setName("quality") + .setDescription("画像の画質") + .setChoices( + { name: "低", value: "30" }, + { name: "中", value: "70" }, + { name: "高", value: "100" } + ) + .setRequired(true) + ) + .addStringOption((option) => + option + .setName("hoshii") + .setDescription("下部文字列を「欲しい!」に固定する") + .setChoices( + { name: "固定する", value: "true" }, + { name: "固定しない", value: "false" } + ) + .setRequired(true) + ) + .addStringOption((option) => + option + .setName("noalpha") + .setDescription("背景色を白にする") + .setChoices( + { name: "白にする", value: "true" }, + { name: "白にしない", value: "false" } + ) + .setRequired(true) + ) + .addStringOption((option) => + option + .setName("rainbow") + .setDescription("虹色にする") + .setChoices( + { name: "虹色にする", value: "true" }, + { name: "虹色にしない", value: "false" } + ) + .setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + const op = interaction.options; + await interaction.reply({ + embeds: [ + new MessageEmbed() + .setImage( + encodeURI( + `https://gsapi.cbrx.io/image?top=${op.getString( + "top" + )}&bottom=${op.getString("bottom")}&type=${op.getString( + "type" + )}&quality=${op.getString("quality")}&hoshii=${op.getString( + "hoshii" + )}&noalpha=${op.getString("noalpha")}&rainbow=${op.getString( + "rainbow" + )}` + ) + ) + .setTitle("5000兆円ほしい!!") + .setFooter({ text: "5000choyen-apiで生成しています。" }) + .setColor(0x3498db), + ], + }); + } +} diff --git a/commands/individual/akinator.ts b/commands/individual/akinator.ts new file mode 100644 index 0000000..c947afd --- /dev/null +++ b/commands/individual/akinator.ts @@ -0,0 +1,27 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import akinator from "discord.js-akinator"; +export class Akinator extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("akinator") + .setDescription("アキネーターをプレイすることができます。") + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + akinator(interaction, { + language: "ja", + childMode: false, + gameType: "character", + useButtons: true, + embedColor: "#3498db", + }); + } +} diff --git a/commands/individual/downcheck.ts b/commands/individual/downcheck.ts new file mode 100644 index 0000000..aed6cbc --- /dev/null +++ b/commands/individual/downcheck.ts @@ -0,0 +1,91 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +export class DownCheck extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("downcheck") + .setDescription("入力したサービスがダウンしているか調べます。") + .addStringOption((input) => + input + .setName("サービス名") + .setDescription("ダウンしているか調べるサービスの名前。") + .setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + await interaction.reply("現在解析中です。"); + await fetch( + `https://downdetector.jp/shougai/${interaction.options.getString( + "サービス名" + )}` + ) + .then((res) => res.text()) + .then(async (dd) => { + if (dd.indexOf("現在問題がない") != -1) { + await interaction.editReply({ + content: "解析が完了しました。", + embeds: [ + { + title: "ダウンチェック", + description: `${interaction.options.getString( + "サービス名" + )}には現在障害が発生していません。`, + color: 0x00ff00, + }, + ], + }); + return; + } else if (dd.indexOf("で起こり得る問題") != -1) { + await interaction.editReply({ + content: "解析が完了しました。", + embeds: [ + { + title: "ダウンチェック", + description: `${interaction.options.getString( + "サービス名" + )}には現在障害が発生している可能性があります`, + color: 0xf5dd42, + }, + ], + }); + return; + } else if (dd.indexOf("での問題を示し") != -1) { + await interaction.editReply({ + content: "解析が完了しました。", + embeds: [ + { + title: "ダウンチェック", + description: `${interaction.options.getString( + "サービス名" + )}には現在障害が発生しています。`, + color: 0xff0000, + }, + ], + }); + return; + } else if (dd.indexOf("ページが見つかりません") != -1) { + await interaction.editReply({ + content: "解析が完了しました。", + embeds: [ + { + title: "ダウンチェック", + description: `${interaction.options.getString( + "サービス名" + )}というサービスが見つかりませんでした`, + color: 0x546e7a, + }, + ], + }); + return; + } + }); + } +} diff --git a/commands/individual/google.ts b/commands/individual/google.ts new file mode 100644 index 0000000..3407d07 --- /dev/null +++ b/commands/individual/google.ts @@ -0,0 +1,105 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +export class Google extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("google") + .setDescription("google検索をします。") + .addStringOption((option) => + option + .setName("検索ワード") + .setDescription("検索する言葉。") + .setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + try { + await interaction.reply("検索をしています。"); + const cheerio = require("cheerio"); + + const urlRegExp = + /https?:\/\/([\w\-\.\/\?\,\=\#\:\u3000-\u30FE\u4E00-\u9FA0\uFF01-\uFFE3])+\/([\w\-\.\/\=\?\,\#\:\u3000-\u30FE\u4E00-\u9FA0\uFF01-\uFFE3%0-9])+/; + + const baseUrl = "https://www.google.com/search?q="; + + const userAgents = [ + "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/108.0", + "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/100.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54", + ]; + + const blackList = [ + "https://support.google.com/websearch?p=ws_settings_location", + "https://www.google.com/preferences", + "https://policies.google.com/privacy", + "https://policies.google.com/terms", + "https://support.google.com", + "https://www.google.com/", + "https://accounts.google.com", + "https://www.google.com/imghp", + "https://www.google.com/webhp", + ]; + + const reducer = async (a, element) => { + a = await a; + const matchGroup = element.attribs.href.match(urlRegExp); + if (!matchGroup) return a; + const url = decodeURIComponent(matchGroup[0]); + if ( + blackList.some((pre) => url.startsWith(pre)) || + /https:\/\/[a-w]+\.google\.com\/maps\?q=/.test(url) + ) + return a; + const cheerioAPI = cheerio.load(element); + await new Promise((r) => setImmediate(r)); + const title = cheerioAPI("h3").text(); + if (title) return a.main.push({ title, url }), a; + a.sub.push({ title: cheerioAPI.text() || "No title", url }); + return a; + }; + const keyword = interaction.options.getString("検索ワード") || ""; + const url = baseUrl + encodeURIComponent(keyword); + const userAgent = + userAgents[Math.floor(Math.random() * (userAgents.length - 1))]; + const headers = { "user-agent": userAgent }; + const response = await fetch(url, { headers }); + await new Promise((r) => setImmediate(r)); + const responseText = await response.text(); + await new Promise((r) => setImmediate(r)); + const cheerioAPI = cheerio.load(responseText); + await new Promise((r) => setImmediate(r)); + const result = await [...cheerioAPI('#main a[href*="http"]')].reduce( + reducer, + { + main: [], + sub: [], + } + ); + await interaction.editReply({ + content: "検索が完了しました。", + embeds: [ + { + title: `${keyword}の検索結果`, + description: `[**${result.main[0].title}**](${result.main[0].url})\n[**${result.main[1].title}**](${result.main[1].url})\n[**${result.main[2].title}**](${result.main[2].url})\n[**${result.main[3].title}**](${result.main[3].url})`, + color: 0x3498db, + }, + ], + }); + } catch { + await interaction.editReply({ + content: `${interaction.options.getString( + "検索ワード" + )}に一致する情報は見つかりませんでした。`, + }); + } + } +} diff --git a/commands/individual/slot.ts b/commands/individual/slot.ts new file mode 100644 index 0000000..dabba9e --- /dev/null +++ b/commands/individual/slot.ts @@ -0,0 +1,60 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { setTimeout } from "node:timers/promises"; +export class Slot extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder.setName("slot").setDescription("slotをします。") + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + let arr = [ + "🍏", + "🍎", + "🍐", + "🍊", + "🍋", + "🍉", + "🍇", + "🫐", + "🍅", + "🥝", + "🍍", + "🍒", + "🍈", + "🍓", + ]; + var random = Math.floor(Math.random() * arr.length); + var result = arr[random]; + var random2 = Math.floor(Math.random() * arr.length); + var result2 = arr[random2]; + var random3 = Math.floor(Math.random() * arr.length); + var result3 = arr[random3]; + await interaction.reply(result + result2 + result3); + let x = 0; + while (x < 10) { + x++; + await setTimeout(1000); + var random = Math.floor(Math.random() * arr.length); + var result = arr[random]; + var random2 = Math.floor(Math.random() * arr.length); + var result2 = arr[random2]; + var random3 = Math.floor(Math.random() * arr.length); + var result3 = arr[random3]; + await interaction.editReply(result + result2 + result3); + if (x == 10) { + if (result === result2 && result2 === result3) { + await interaction.followUp("あなたは勝利しました。"); + } else { + await interaction.followUp("あなたは負けました。"); + } + } + } + } +} diff --git a/commands/individual/tanzaku.ts b/commands/individual/tanzaku.ts new file mode 100644 index 0000000..61c56e0 --- /dev/null +++ b/commands/individual/tanzaku.ts @@ -0,0 +1,142 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +export class Tanzaku extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("tanzaku") + .setDescription("短冊を生成します。") + .addStringOption((input) => + input.setName("テキスト").setDescription("テキスト").setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + function zenkaku2Hankaku(str: string) { + return str.replace(/[A-Za-z0-9]/g, function (s) { + return String.fromCharCode(s.charCodeAt(0) + 0xfee0); + }); + } + function hankana2Zenkana(str: string) { + var kanaMap = { + ガ: "ガ", + ギ: "ギ", + グ: "グ", + ゲ: "ゲ", + ゴ: "ゴ", + ザ: "ザ", + ジ: "ジ", + ズ: "ズ", + ゼ: "ゼ", + ゾ: "ゾ", + ダ: "ダ", + ヂ: "ヂ", + ヅ: "ヅ", + デ: "デ", + ド: "ド", + バ: "バ", + ビ: "ビ", + ブ: "ブ", + ベ: "ベ", + ボ: "ボ", + パ: "パ", + ピ: "ピ", + プ: "プ", + ペ: "ペ", + ポ: "ポ", + ヴ: "ヴ", + ヷ: "ヷ", + ヺ: "ヺ", + ア: "ア", + イ: "イ", + ウ: "ウ", + エ: "エ", + オ: "オ", + カ: "カ", + キ: "キ", + ク: "ク", + ケ: "ケ", + コ: "コ", + サ: "サ", + シ: "シ", + ス: "ス", + セ: "セ", + ソ: "ソ", + タ: "タ", + チ: "チ", + ツ: "ツ", + テ: "テ", + ト: "ト", + ナ: "ナ", + ニ: "ニ", + ヌ: "ヌ", + ネ: "ネ", + ノ: "ノ", + ハ: "ハ", + ヒ: "ヒ", + フ: "フ", + ヘ: "ヘ", + ホ: "ホ", + マ: "マ", + ミ: "ミ", + ム: "ム", + メ: "メ", + モ: "モ", + ヤ: "ヤ", + ユ: "ユ", + ヨ: "ヨ", + ラ: "ラ", + リ: "リ", + ル: "ル", + レ: "レ", + ロ: "ロ", + ワ: "ワ", + ヲ: "ヲ", + ン: "ン", + ァ: "ァ", + ィ: "ィ", + ゥ: "ゥ", + ェ: "ェ", + ォ: "ォ", + ッ: "ッ", + ャ: "ャ", + ュ: "ュ", + ョ: "ョ", + "。": "。", + "、": "、", + ー: "ー", + "「": "「", + "」": "」", + "・": "・", + }; + var reg = new RegExp("(" + Object.keys(kanaMap).join("|") + ")", "g"); + return str + .replace(reg, function (match: string | number) { + return kanaMap[match]; + }) + .replace(/゙/g, "゛") + .replace(/゚/g, "゜"); + } + const mae = "┏┷┓\n"; + const usiro = "┗━☆彡"; + const hidari = " ┃"; + const migi = "┃\n"; + const moji = hankana2Zenkana( + zenkaku2Hankaku(interaction.options.getString("テキスト") || "") + ).split(""); + const ahaha = moji.map((arg: any) => `${hidari}${arg}${migi}`); + let text = `${mae}${ahaha}${usiro}`; + const count = (text.match(/,\s/g) || []).length; + text = text.replace(/\s┃/, "┃"); + for (let i = 0; i <= count; i++) { + text = text.replace(/,\s/, ""); + } + await interaction.reply(text); + } +} diff --git a/commands/individual/textspace.ts b/commands/individual/textspace.ts new file mode 100644 index 0000000..c9dd06e --- /dev/null +++ b/commands/individual/textspace.ts @@ -0,0 +1,33 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +export class TextSpace extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("textspace") + .setDescription("テキストの間に空白を入れます。") + .addStringOption((input) => + input + .setName("テキスト") + .setDescription("空白を入れるテキスト") + .setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + const op = interaction.options.getString("テキスト") || ""; + let result = op.split(""); + let newText = ""; + + for (let i = 0; i < result.length; i++) { + newText += result[i] + " "; + } + await interaction.reply(newText); + } +} diff --git a/commands/individual/totuzen.ts b/commands/individual/totuzen.ts new file mode 100644 index 0000000..27b2d15 --- /dev/null +++ b/commands/individual/totuzen.ts @@ -0,0 +1,26 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import totsuzen from "totsuzen-text"; +export class Totsuzen extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("totuzen") + .setDescription("突然の死を生成します。") + .addStringOption((input) => + input.setName("テキスト").setDescription("テキスト").setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + await interaction.reply( + totsuzen(interaction.options.getString("テキスト") || "") + ); + } +} diff --git a/commands/individual/url_check.ts b/commands/individual/url_check.ts new file mode 100644 index 0000000..de41535 --- /dev/null +++ b/commands/individual/url_check.ts @@ -0,0 +1,92 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; + +export class UrlCheck extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("url_check") + .setDescription("URLが安全かチェックします。") + .addStringOption((input) => + input + .setName("url") + .setDescription("チェックしたいurl") + .setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + try { + await interaction.deferReply(); + const url = interaction.options.getString("url") || ""; + await fetch( + `https://safeweb.norton.com/report/show?url=${encodeURI(url)}&ulang=jpn` + ) + .then((res) => res.text()) + .then(async (norton) => { + //NortonSafeWebにアクセス + if (norton.indexOf("安全性") != -1) { + await interaction.editReply({ + embeds: [ + { + title: "結果は安全です。", + description: `ノートン セーフウェブが ${url} を分析して安全性とセキュリティの問題を調べました。`, + footer: { + text: "Powered by Norton Safeweb", + }, + color: 0x00ff00, + }, + ], + }); + } else if (norton.indexOf("[注意]") != -1) { + await interaction.editReply({ + embeds: [ + { + title: "結果は注意です。", + description: `[注意]の評価を受けた Web サイトは少数の脅威または迷惑を伴いますが、赤色の[警告]に相当するほど危険とは見なされません。サイトにアクセスする場合には注意が必要です。`, + footer: { + text: "Powered by Norton Safeweb", + }, + color: 0xf5dd42, + }, + ], + }); + } else if (norton.indexOf("警告") != -1) { + await interaction.editReply({ + embeds: [ + { + title: "結果は警告です。", + description: `これは既知の危険な Web ページです。このページを表示**しない**ことを推奨します。`, + footer: { + text: "Powered by Norton Safeweb", + }, + color: 0xff0000, + }, + ], + }); + } else { + await interaction.editReply({ + embeds: [ + { + title: "結果は未評価です。", + description: `このサイトはまだ評価されていません。`, + footer: { + text: "Powered by Norton Safeweb", + }, + color: 0x546e7a, + }, + ], + }); + } + }); + } catch { + await interaction.editReply("解析中にエラーが発生しました。"); + } + } +} diff --git a/commands/individual/url_short.ts b/commands/individual/url_short.ts new file mode 100644 index 0000000..2471ac5 --- /dev/null +++ b/commands/individual/url_short.ts @@ -0,0 +1,69 @@ +import https from "node:https"; +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { MessageActionRow, MessageButton } from "discord.js"; +export class URLShort extends Command { + shorten: Function; + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + this.shorten = function ( + url: string | number | boolean, + cb: (arg0: string) => void + ) { + https.get( + "https://is.gd/create.php?format=simple&url=" + encodeURIComponent(url), + function (res) { + var body = ""; + res.on("data", function (chunk) { + body += chunk; + }); + res.on("end", function () { + cb(body); + }); + } + ); + }; + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("url_short") + .setDescription("URLを短縮します。") + .addStringOption((input) => + input.setName("url").setDescription("短縮するurl").setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + this.shorten( + interaction.options.getString("url") || "", + async function (res: string) { + if ( + res === + "Error: Sorry, the URL you entered is on our internal blacklist. It may have been used abusively in the past, or it may link to another URL redirection service." + ) { + await interaction.reply( + "is.gdのブラックリストに入っているURLを短縮しようとしています。" + ); + } else if (res === "Error: Please enter a valid URL to shorten") { + await interaction.reply("無効なURLを短縮しようとしています。"); + } else if (res.startsWith("https://is.gd/")) { + await interaction.reply({ + content: `[短縮しました。](${res})`, + components: [ + new MessageActionRow().addComponents( + new MessageButton() + .setStyle("LINK") + .setURL(res) + .setLabel("短縮したURLを開く。") + ), + ], + }); + } + } + ); + } +} diff --git a/commands/server/ban_member.ts b/commands/server/ban_member.ts new file mode 100644 index 0000000..0eb833f --- /dev/null +++ b/commands/server/ban_member.ts @@ -0,0 +1,56 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { MessageEmbed } from "discord.js"; + +export class BanMember extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("ban_member") + .setDescription("Banされたメンバー一覧を表示します。") + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + if (interaction.guild) { + const bans = await interaction.guild.bans.fetch(); + const str = + bans.map((ban) => ban.user.tag).join(", ") || + "Banされたユーザーがいません。"; + if (str.length > 4096) { + const str2 = str.substring(4096, str.length); + await interaction.reply({ + embeds: [ + new MessageEmbed() + .setTitle("Banされたユーザー一覧") + .setDescription(str) + .setColor(0x3498db), + new MessageEmbed() + .setTitle("Banされたユーザー一覧") + .setDescription(str2) + .setColor(0x3498db), + ], + }); + } else { + await interaction.reply({ + embeds: [ + new MessageEmbed() + .setTitle("Banされたユーザー一覧") + .setDescription(str) + .setColor(0x3498db), + ], + }); + } + } else { + await interaction.reply({ + content: "ここはサーバーではありません。", + ephemeral: true, + }); + } + } +} diff --git a/commands/server/embed.ts b/commands/server/embed.ts new file mode 100644 index 0000000..721c81f --- /dev/null +++ b/commands/server/embed.ts @@ -0,0 +1,46 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { + TextInputComponent, + MessageActionRow, + ModalActionRowComponent, + Modal, +} from "discord.js"; + +export class Embed extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder.setName("embed").setDescription("Embedを生成できます。") + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + const title = new TextInputComponent() + .setCustomId("em_ti") + .setLabel("タイトル") + .setRequired(true) + .setStyle("PARAGRAPH") + .setMaxLength(256); + const description = new TextInputComponent() + .setCustomId("em_de") + .setLabel("説明") + .setRequired(true) + .setStyle("PARAGRAPH") + .setMaxLength(4000); + const modal = new Modal() + .setCustomId("embed_modal") + .setTitle("Embed作成") + .addComponents( + new MessageActionRow().addComponents(title), + new MessageActionRow().addComponents( + description + ) + ); + await interaction.showModal(modal); + } +} diff --git a/commands/server/poll.ts b/commands/server/poll.ts new file mode 100644 index 0000000..079fe4d --- /dev/null +++ b/commands/server/poll.ts @@ -0,0 +1,85 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { + MessageActionRow, + Modal, + TextInputComponent, + ModalActionRowComponent, +} from "discord.js"; +export class Poll extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("poll") + .setDescription("簡易投票を作成します。") + .addIntegerOption((option) => + option + .setName("選択肢の数") + .setDescription("選択肢の数を入力してください。") + .addChoices({ name: "2", value: 2 }, { name: "3", value: 3 }) + .setRequired(true) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + const modal = new Modal().setCustomId("poll_MODAL").setTitle("poll作成"); + const i = interaction.options.getInteger("選択肢の数"); + const title = new TextInputComponent() + .setCustomId("title") + .setLabel("タイトル") + .setStyle("PARAGRAPH") + .setRequired(true); + if (i === 2) { + const o = new TextInputComponent() + .setCustomId("1") + .setLabel("選択肢1") + .setRequired(true) + .setStyle("SHORT"); + const t = new TextInputComponent() + .setCustomId("2") + .setLabel("選択肢2") + .setRequired(true) + .setStyle("SHORT"); + modal.addComponents( + new MessageActionRow().addComponents(title), + new MessageActionRow().addComponents(o), + new MessageActionRow().addComponents(t) + ); + return await interaction.showModal(modal); + } else if (i === 3) { + const o = new TextInputComponent() + .setCustomId("1") + .setLabel("選択肢1") + .setRequired(true) + .setStyle("SHORT"); + const t = new TextInputComponent() + .setCustomId("2") + .setLabel("選択肢2") + .setRequired(true) + .setStyle("SHORT"); + const t2 = new TextInputComponent() + .setCustomId("3") + .setLabel("選択肢3") + .setRequired(true) + .setStyle("SHORT"); + modal.addComponents( + new MessageActionRow().addComponents(title), + new MessageActionRow().addComponents(o), + new MessageActionRow().addComponents(t), + new MessageActionRow().addComponents(t2) + ); + return await interaction.showModal(modal); + } else { + return await interaction.reply({ + content: "不明なエラーが発生しました。", + ephemeral: true, + }); + } + } +} diff --git a/commands/server/poll_stop.ts b/commands/server/poll_stop.ts new file mode 100644 index 0000000..c55cb65 --- /dev/null +++ b/commands/server/poll_stop.ts @@ -0,0 +1,49 @@ +import { Command } from "@sapphire/framework"; +import { ApplicationCommandType } from "discord-api-types/v9"; +import { MessageEmbed } from "discord.js"; +import Keyv from "keyv"; +export class PollStop extends Command { + poll: Keyv; + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + this.poll = new Keyv("sqlite://db/db.sqlite", { table: "poll" }); + this.poll.on("error", (e) => this.container.logger.error(e)); + } + + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerContextMenuCommand((builder) => + builder.setName("投票を集計する").setType(ApplicationCommandType.Message) + ); + } + + public async contextMenuRun(interaction: Command.ContextMenuInteraction) { + if (!interaction.isMessageContextMenu()) return; + if (await this.poll.get(`${interaction.targetMessage.id}`)) { + if (await this.poll.get(`${interaction.targetMessage.id}_3`)) { + await interaction.reply({ + embeds: [ + new MessageEmbed() + .setTitle( + interaction.targetMessage.embeds[0].title + "の集計結果" + ) + .setDescription( + `1番: ${await this.poll.get( + `${interaction.targetMessage.id}_1` + )}票\n2番: ${await this.poll.get( + `${interaction.targetMessage.id}_2` + )}票\n3番: ${await this.poll.get( + `${interaction.targetMessage.id}_3` + )}票` + ) + .setColor(0x3498db), + ], + }); + } + } else { + return await interaction.reply({ + content: "このメッセージはEightBot簡易投票ではありません。", + ephemeral: true, + }); + } + } +} diff --git a/commands/server/role_all.ts b/commands/server/role_all.ts new file mode 100644 index 0000000..c064536 --- /dev/null +++ b/commands/server/role_all.ts @@ -0,0 +1,102 @@ +import { Command, ChatInputCommand } from "@sapphire/framework"; +import { Role } from "discord.js"; +export class RoleAll extends Command { + public constructor(context: Command.Context, options: Command.Options) { + super(context, { ...options }); + } + + public override registerApplicationCommands( + registry: ChatInputCommand.Registry + ) { + registry.registerChatInputCommand((builder) => + builder + .setName("role_all") + .setDescription("すべてのユーザーにロールをOOするサブコマンド。") + .addSubcommand((input) => + input + .setName("add") + .setDescription("すべてのユーザーにロールを付与します。") + .addRoleOption((input) => + input + .setName("ロール") + .setDescription("付与するロール") + .setRequired(true) + ) + .addStringOption((input) => + input + .setName("botにも付与するか") + .setDescription("botにも付与するか") + .addChoices( + { name: "はい", value: "true" }, + { name: "いいえ", value: "false" } + ) + .setRequired(true) + ) + ) + .addSubcommand((input) => + input + .setName("remove") + .setDescription("すべてのユーザーにロールをはく奪します。") + .addRoleOption((input) => + input + .setName("ロール") + .setDescription("はく奪するロール") + .setRequired(true) + ) + .addStringOption((input) => + input + .setName("botにもはく奪するか") + .setDescription("botにもはく奪するか") + .addChoices( + { name: "はい", value: "true" }, + { name: "いいえ", value: "false" } + ) + .setRequired(true) + ) + ) + ); + } + + public async chatInputRun(interaction: Command.ChatInputInteraction) { + if (!interaction.guild) + return await interaction.reply({ + content: "ここはサーバーではありません。", + ephemeral: true, + }); + await interaction.deferReply(); + + if (interaction.options.getSubcommand() === "add") { + const role = interaction.options.getRole("ロール"); + await interaction.guild.members.fetch().then((members) => + Promise.all(members.map((member) => member.roles.add(`${role?.id}`))) + .then(async () => { + await interaction.editReply({ + content: "ロールの付与に成功しました。", + }); + }) + .catch(async (e) => { + console.log(e); + return await interaction.editReply({ + content: "ロールの付与に失敗しました。", + }); + }) + ); + } else if (interaction.options.getSubcommand() === "remove") { + const role = interaction.options.getRole("ロール"); + await interaction.guild.members.fetch().then((members) => + Promise.all(members.map((member) => member.roles.remove(`${role?.id}`))) + .then(async () => { + return await interaction.editReply({ + content: "ロールの剥奪に成功しました。", + }); + }) + .catch(async (e) => { + console.log(e); + return await interaction.editReply({ + content: "ロールの付与に失敗しました。", + }); + }) + ); + } + } +} diff --git a/db/readme.md b/db/readme.md new file mode 100644 index 0000000..44d6fc7 --- /dev/null +++ b/db/readme.md @@ -0,0 +1 @@ +このフォルダは sqlite ファイルを保存するフォルダです。 diff --git a/env.md b/env.md new file mode 100644 index 0000000..98627ed --- /dev/null +++ b/env.md @@ -0,0 +1,16 @@ +# env.readme + +env の key の説明です。 + +## token + +本番環境の DiscordBot のトークンを入れてください。 + +## test_token + +テスト環境の DiscordBot のトークンを入れてください。 + +## test_mode + +テストモードを ON にするか。ON にすると実験機能が追加されます。 +入力値は`y` or `n`です。 diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..622715c --- /dev/null +++ b/index.ts @@ -0,0 +1,17 @@ +import { SapphireClient } from "@sapphire/framework"; +import { Intents } from "discord.js"; +import { config } from "dotenv"; +const client = new SapphireClient({ + intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MEMBERS], +}); +// replitで動かす場合は6行目を消してください。 +config(); +if (process.env.test_mode === "y") { + console.info("\x1b[46m\x1b[30mInfo\x1b[49m\x1b[39m Log in in Test mode."); + client.login(process.env.test_token); +} else { + console.info( + "\x1b[46m\x1b[30mInfo\x1b[49m\x1b[39m Log in in production mode." + ); + client.login(process.env.token); +} diff --git a/listeners/embed_color.ts b/listeners/embed_color.ts new file mode 100644 index 0000000..83fc864 --- /dev/null +++ b/listeners/embed_color.ts @@ -0,0 +1,71 @@ +import { Listener, Events } from "@sapphire/framework"; +import { + Interaction, + CacheType, + MessageEmbed, + MessageActionRow, + MessageButton, +} from "discord.js"; +import { APIEmbed } from "discord-api-types/v9"; +export class EmbedColor extends Listener { + public constructor(context: Listener.Context, options: Listener.Options) { + super(context, { + ...options, + once: false, + event: Events.InteractionCreate, + }); + } + public async run(interaction: Interaction) { + if (!interaction.isButton()) return; + if (interaction.customId === "color_1") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0xdd2e44)], + }); + } else if (interaction.customId === "color_2") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0xff6723)], + }); + } else if (interaction.customId === "color_3") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0xfcd53f)], + }); + } else if (interaction.customId === "color_4") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0x00d26a)], + }); + } else if (interaction.customId === "color_5") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0x0074ba)], + }); + } else if (interaction.customId === "color_6") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0x8d65c5)], + }); + } else if (interaction.customId === "color_7") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0x6d4534)], + }); + } else if (interaction.customId === "color_8") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0x000000)], + }); + } else if (interaction.customId === "color_9") { + const embed = interaction.message?.embeds[0]; + return await interaction.update({ + embeds: [new MessageEmbed(embed).setColor(0xffffff)], + }); + } else if (interaction.customId === "color_d") { + return await interaction.update({ + components: [], + }); + } + } +} diff --git a/listeners/embed_res.ts b/listeners/embed_res.ts new file mode 100644 index 0000000..8e80893 --- /dev/null +++ b/listeners/embed_res.ts @@ -0,0 +1,90 @@ +import { Listener, Events } from "@sapphire/framework"; +import { + Interaction, + CacheType, + MessageEmbed, + MessageActionRow, + MessageButton, +} from "discord.js"; + +export class EmbedResponse1 extends Listener { + public constructor(context: Listener.Context, options: Listener.Options) { + super(context, { + ...options, + once: false, + event: Events.InteractionCreate, + }); + } + public async run(interaction: Interaction) { + if (!interaction.isModalSubmit()) return; + if (interaction.customId === "embed_modal") { + const embed = new MessageEmbed(); + embed.setTitle(interaction.fields.getTextInputValue("em_ti")); + embed.setDescription(interaction.fields.getTextInputValue("em_de")); + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setEmoji("🔴") + .setStyle("SECONDARY") + .setCustomId("color_1") + ) + .addComponents( + new MessageButton() + .setEmoji("🟠") + .setStyle("SECONDARY") + .setCustomId("color_2") + ) + .addComponents( + new MessageButton() + .setEmoji("🟡") + .setStyle("SECONDARY") + .setCustomId("color_3") + ) + .addComponents( + new MessageButton() + .setEmoji("🟢") + .setStyle("SECONDARY") + .setCustomId("color_4") + ) + .addComponents( + new MessageButton() + .setEmoji("🔵") + .setStyle("SECONDARY") + .setCustomId("color_5") + ); + const row2 = new MessageActionRow() + .addComponents( + new MessageButton() + .setEmoji("🟣") + .setStyle("SECONDARY") + .setCustomId("color_6") + ) + .addComponents( + new MessageButton() + .setEmoji("🟤") + .setStyle("SECONDARY") + .setCustomId("color_7") + ) + .addComponents( + new MessageButton() + .setEmoji("⚫") + .setStyle("SECONDARY") + .setCustomId("color_8") + ) + .addComponents( + new MessageButton() + .setEmoji("⚪") + .setStyle("SECONDARY") + .setCustomId("color_9") + ) + .addComponents( + new MessageButton() + .setEmoji("🗑️") + .setLabel("色選択ボタンを消す(戻せません)") + .setStyle("DANGER") + .setCustomId("color_d") + ); + await interaction.reply({ embeds: [embed], components: [row, row2] }); + } + } +} diff --git a/listeners/poll.ts b/listeners/poll.ts new file mode 100644 index 0000000..b1bfbc3 --- /dev/null +++ b/listeners/poll.ts @@ -0,0 +1,105 @@ +import { Listener, Events } from "@sapphire/framework"; +import { + Interaction, + CacheType, + MessageEmbed, + Message, + MessageActionRow, + MessageButton, +} from "discord.js"; +import Keyv from "keyv"; + +export class PollModal extends Listener { + poll: Keyv; + public constructor(context: Listener.Context, options: Listener.Options) { + super(context, { + ...options, + once: false, + event: Events.InteractionCreate, + }); + this.poll = new Keyv("sqlite://db/db.sqlite", { table: "poll" }); + this.poll.on("error", (e) => this.container.logger.info(e)); + } + public async run(interaction: Interaction) { + if (!interaction.isModalSubmit()) return; + + if (interaction.customId === "poll_MODAL") { + try { + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setCustomId("1") + .setLabel("1") + .setStyle("PRIMARY") + ) + .addComponents( + new MessageButton() + .setCustomId("2") + .setLabel("2") + .setStyle("PRIMARY") + ) + .addComponents( + new MessageButton() + .setCustomId("3") + .setLabel("3") + .setStyle("PRIMARY") + ); + const embed = new MessageEmbed() + .setTitle(interaction.fields.getTextInputValue("title")) + .setDescription( + `1: ${interaction.fields.getTextInputValue( + "1" + )}\n2: ${interaction.fields.getTextInputValue( + "2" + )}\n3: ${interaction.fields.getTextInputValue("3")}` + ) + .setColor(0x3498db); + + await interaction.reply({ + content: "アンケートを生成しました。", + ephemeral: true, + }); + const msg = await interaction.channel?.send({ + embeds: [embed], + components: [row], + }); + await this.poll.set(`${msg?.id}`, true); + await this.poll.set(`${msg?.id}_1`, 0); + await this.poll.set(`${msg?.id}_2`, 0); + await this.poll.set(`${msg?.id}_3`, 0); + } catch { + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setCustomId("1") + .setLabel("1") + .setStyle("PRIMARY") + ) + .addComponents( + new MessageButton() + .setCustomId("2") + .setLabel("2") + .setStyle("PRIMARY") + ); + const embed = new MessageEmbed() + .setTitle(interaction.fields.getTextInputValue("title")) + .setDescription( + `1: ${interaction.fields.getTextInputValue( + "1" + )}\n2: ${interaction.fields.getTextInputValue("2")}` + ) + .setColor(0x3498db); + await interaction.reply({ + content: "アンケートを生成しました。", + ephemeral: true, + }); + const ch = await interaction.channel?.send({ + embeds: [embed], + components: [row], + }); + await this.poll.set(`${ch?.id}_1`, 0); + await this.poll.set(`${ch?.id}_2`, 0); + } + } + } +} diff --git a/listeners/poll_res.ts b/listeners/poll_res.ts new file mode 100644 index 0000000..343fb18 --- /dev/null +++ b/listeners/poll_res.ts @@ -0,0 +1,56 @@ +import { Listener, Events } from "@sapphire/framework"; +import { Interaction, CacheType } from "discord.js"; +import Keyv from "keyv"; + +export class PollResponse extends Listener { + poll: Keyv; + public constructor(context: Listener.Context, options: Listener.Options) { + super(context, { + ...options, + once: false, + event: Events.InteractionCreate, + }); + this.poll = new Keyv("sqlite://db/db.sqlite", { table: "poll" }); + this.poll.on("error", (e) => this.container.logger.error(e)); + } + public async run(interaction: Interaction) { + if (!interaction.isButton()) return; + if (interaction.customId === "1") { + if (!(await this.poll.get(`${interaction.message.id}`))) { + return await interaction.reply({ + content: "投票は終了しました。", + ephemeral: true, + }); + } else { + let num: number = await this.poll.get(`${interaction.message.id}_1`); + num = num + 1; + await this.poll.set(`${interaction.message.id}_1`, num); + await interaction.reply({ content: "投票しました。", ephemeral: true }); + } + } else if (interaction.customId === "2") { + if (!(await this.poll.get(`${interaction.message.id}`))) { + return await interaction.reply({ + content: "投票は終了しました。", + ephemeral: true, + }); + } else { + let num: number = await this.poll.get(`${interaction.message.id}_2`); + num = num + 1; + await this.poll.set(`${interaction.message.id}_2`, num); + await interaction.reply({ content: "投票しました。", ephemeral: true }); + } + } else if (interaction.customId === "3") { + if (!(await this.poll.get(`${interaction.message.id}`))) { + return await interaction.reply({ + content: "投票は終了しました。", + ephemeral: true, + }); + } else { + let num: number = await this.poll.get(`${interaction.message.id}_3`); + num = num + 1; + await this.poll.set(`${interaction.message.id}_3`, num); + await interaction.reply({ content: "投票しました。", ephemeral: true }); + } + } + } +} diff --git a/listeners/ready.ts b/listeners/ready.ts new file mode 100644 index 0000000..c17f352 --- /dev/null +++ b/listeners/ready.ts @@ -0,0 +1,15 @@ +import { Events, Listener } from "@sapphire/framework"; +import { Client } from "discord.js"; +export class ReadyListener extends Listener { + public constructor(context: Listener.Context, options: Listener.Options) { + super(context, { + ...options, + once: true, + event: Events.ClientReady, + }); + } + public run(client: Client) { + const { username, id } = client.user!; + this.container.logger.info(`Successfully logged in as ${username} (${id})`); + } +} diff --git a/main.py b/main.py deleted file mode 100644 index c033195..0000000 --- a/main.py +++ /dev/null @@ -1,69 +0,0 @@ -from discord import ( - Intents, - Status, - Activity, - ActivityType, - Game, - errors, - AllowedMentions, -) -from itertools import cycle -from discord.ext import commands, tasks -from os import listdir, getenv -from webserver import keep_alive -from datetime import datetime - - -class EightBot(commands.Bot): - async def setup_hook(self): - self.kidou = 0 - await keep_alive() - for name in listdir("cogs"): - if not name.startswith(("_", ".")): - await bot.load_extension( - f"cogs.{name[:-3] if name.endswith('.py') else name}" - ) - await bot.load_extension("jishaku") - await self.tree.sync() - - -bot = EightBot( - command_prefix="eg!", - intents=Intents.all(), - activity=Activity( - type=ActivityType.watching, - name="起動準備をしています...", - ), - allowed_mentions=AllowedMentions( - everyone=False, users=True, roles=False, replied_user=True - ), - status=Status.dnd, - help_command=None, -) - - -@tasks.loop(seconds=5) -async def status_swap(cycle_d): - activity = Game(next(cycle_d)) - await bot.change_presence(activity=activity, status=Status.online) - - -@bot.listen(name="on_ready") -async def bot_ready(): - bot.kidou = int(datetime.now().timestamp()) - print("login.") - await status_swap.start( - cycle( - [ - f"/help | {len(bot.guilds)} server", - f"/help | {len(bot.users)} user", - ] - ) - ) - - -try: - bot.run(getenv("token")) - -except errors.HTTPException: - print("レートリミットに引っかかってます。") diff --git a/package.json b/package.json new file mode 100644 index 0000000..ee8fb12 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "eightbot", + "version": "2.2.0", + "description": "Discord BOT", + "main": "index.ts", + "repository": "https://github.com/EightBot-Developer/EightBot", + "author": "EightBot developer", + "private": true, + "scripts": { + "start": "yarn node --loader ts-node/esm ." + }, + "dependencies": { + "@keyv/sqlite": "^3.6.4", + "@sapphire/framework": "^3.1.4", + "@types/node": "^18.11.17", + "cheerio": "^1.0.0-rc.12", + "discord-api-types": "0.33.5", + "discord.js": "13.x", + "discord.js-akinator": "3.4.5", + "dotenv": "^16.0.3", + "keyv": "^4.5.2", + "pify": "^6.1.0", + "totsuzen-text": "^1.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.4" + }, + "devDependencies": { + "prettier": "^2.8.1" + } +} diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index fcbac30..0000000 --- a/poetry.lock +++ /dev/null @@ -1,844 +0,0 @@ -[[package]] -name = "aiohttp" -version = "3.8.3" -description = "Async http client/server framework (asyncio)" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" -attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] - -[[package]] -name = "aiosignal" -version = "1.2.0" -description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -frozenlist = ">=1.1.0" - -[[package]] -name = "async-timeout" -version = "4.0.2" -description = "Timeout context manager for asyncio programs" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "attrs" -version = "22.1.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] - -[[package]] -name = "autoflake" -version = "1.7.7" -description = "Removes unused imports and unused variables" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pyflakes = ">=1.1.0" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} - -[[package]] -name = "black" -version = "22.10.0" -description = "The uncompromising code formatter." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "certifi" -version = "2022.12.7" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "charset-normalizer" -version = "2.1.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" -optional = false -python-versions = ">=3.6.0" - -[package.extras] -unicode-backport = ["unicodedata2"] - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" - -[[package]] -name = "discord" -version = "2.0.0" -description = "A mirror package for discord.py. Please install that instead." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -"discord.py" = ">=2.0.0" - -[[package]] -name = "discord-py" -version = "2.0.1" -description = "A Python wrapper for the Discord API" -category = "main" -optional = false -python-versions = ">=3.8.0" - -[package.dependencies] -aiohttp = ">=3.7.4,<4" - -[package.extras] -docs = ["sphinx (==4.4.0)", "sphinxcontrib-trio (==1.1.2)", "sphinxcontrib-websupport", "typing-extensions (>=4.3,<5)"] -speed = ["Brotli", "aiodns (>=1.1)", "cchardet (==2.1.7)", "orjson (>=3.5.4)"] -test = ["coverage[toml]", "pytest", "pytest-asyncio", "pytest-cov", "pytest-mock", "typing-extensions (>=4.3,<5)"] -voice = ["PyNaCl (>=1.3.0,<1.6)"] - -[[package]] -name = "flask" -version = "2.2.2" -description = "A simple framework for building complex web applications." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -click = ">=8.0" -importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} -itsdangerous = ">=2.0" -Jinja2 = ">=3.0" -Werkzeug = ">=2.2.2" - -[package.extras] -async = ["asgiref (>=3.2)"] -dotenv = ["python-dotenv"] - -[[package]] -name = "frozenlist" -version = "1.3.1" -description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "importlib-metadata" -version = "5.0.0" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] - -[[package]] -name = "itsdangerous" -version = "2.1.2" -description = "Safely pass data to untrusted environments and back." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "markupsafe" -version = "2.1.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "multidict" -version = "6.0.2" -description = "multidict implementation" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "numpy" -version = "1.23.4" -description = "NumPy is the fundamental package for array computing with Python." -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "pathspec" -version = "0.10.1" -description = "Utility library for gitignore style pattern matching of file paths." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] - -[[package]] -name = "pyflakes" -version = "2.5.0" -description = "passive checker of Python programs" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "requests" -version = "2.28.1" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=3.7, <4" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "typing-extensions" -version = "4.4.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "urllib3" -version = "1.26.12" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "werkzeug" -version = "2.2.2" -description = "The comprehensive WSGI web application library." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=2.1.1" - -[package.extras] -watchdog = ["watchdog"] - -[[package]] -name = "yarl" -version = "1.8.1" -description = "Yet another URL library" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - -[[package]] -name = "zipp" -version = "3.10.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[metadata] -lock-version = "1.1" -python-versions = ">=3.8.0,<3.9" -content-hash = "6b93baa97031f984ee2e674fc0a2984e050647b41795831dc33368561b0db784" - -[metadata.files] -aiohttp = [ - {file = "aiohttp-3.8.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ba71c9b4dcbb16212f334126cc3d8beb6af377f6703d9dc2d9fb3874fd667ee9"}, - {file = "aiohttp-3.8.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d24b8bb40d5c61ef2d9b6a8f4528c2f17f1c5d2d31fed62ec860f6006142e83e"}, - {file = "aiohttp-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f88df3a83cf9df566f171adba39d5bd52814ac0b94778d2448652fc77f9eb491"}, - {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97decbb3372d4b69e4d4c8117f44632551c692bb1361b356a02b97b69e18a62"}, - {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:309aa21c1d54b8ef0723181d430347d7452daaff93e8e2363db8e75c72c2fb2d"}, - {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad5383a67514e8e76906a06741febd9126fc7c7ff0f599d6fcce3e82b80d026f"}, - {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20acae4f268317bb975671e375493dbdbc67cddb5f6c71eebdb85b34444ac46b"}, - {file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05a3c31c6d7cd08c149e50dc7aa2568317f5844acd745621983380597f027a18"}, - {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d6f76310355e9fae637c3162936e9504b4767d5c52ca268331e2756e54fd4ca5"}, - {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:256deb4b29fe5e47893fa32e1de2d73c3afe7407738bd3c63829874661d4822d"}, - {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5c59fcd80b9049b49acd29bd3598cada4afc8d8d69bd4160cd613246912535d7"}, - {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:059a91e88f2c00fe40aed9031b3606c3f311414f86a90d696dd982e7aec48142"}, - {file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2feebbb6074cdbd1ac276dbd737b40e890a1361b3cc30b74ac2f5e24aab41f7b"}, - {file = "aiohttp-3.8.3-cp310-cp310-win32.whl", hash = "sha256:5bf651afd22d5f0c4be16cf39d0482ea494f5c88f03e75e5fef3a85177fecdeb"}, - {file = "aiohttp-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:653acc3880459f82a65e27bd6526e47ddf19e643457d36a2250b85b41a564715"}, - {file = "aiohttp-3.8.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:86fc24e58ecb32aee09f864cb11bb91bc4c1086615001647dbfc4dc8c32f4008"}, - {file = "aiohttp-3.8.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75e14eac916f024305db517e00a9252714fce0abcb10ad327fb6dcdc0d060f1d"}, - {file = "aiohttp-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d1fde0f44029e02d02d3993ad55ce93ead9bb9b15c6b7ccd580f90bd7e3de476"}, - {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab94426ddb1ecc6a0b601d832d5d9d421820989b8caa929114811369673235c"}, - {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89d2e02167fa95172c017732ed7725bc8523c598757f08d13c5acca308e1a061"}, - {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02f9a2c72fc95d59b881cf38a4b2be9381b9527f9d328771e90f72ac76f31ad8"}, - {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7149272fb5834fc186328e2c1fa01dda3e1fa940ce18fded6d412e8f2cf76d"}, - {file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:512bd5ab136b8dc0ffe3fdf2dfb0c4b4f49c8577f6cae55dca862cd37a4564e2"}, - {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7018ecc5fe97027214556afbc7c502fbd718d0740e87eb1217b17efd05b3d276"}, - {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:88c70ed9da9963d5496d38320160e8eb7e5f1886f9290475a881db12f351ab5d"}, - {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:da22885266bbfb3f78218dc40205fed2671909fbd0720aedba39b4515c038091"}, - {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:e65bc19919c910127c06759a63747ebe14f386cda573d95bcc62b427ca1afc73"}, - {file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:08c78317e950e0762c2983f4dd58dc5e6c9ff75c8a0efeae299d363d439c8e34"}, - {file = "aiohttp-3.8.3-cp311-cp311-win32.whl", hash = "sha256:45d88b016c849d74ebc6f2b6e8bc17cabf26e7e40c0661ddd8fae4c00f015697"}, - {file = "aiohttp-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:96372fc29471646b9b106ee918c8eeb4cca423fcbf9a34daa1b93767a88a2290"}, - {file = "aiohttp-3.8.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c971bf3786b5fad82ce5ad570dc6ee420f5b12527157929e830f51c55dc8af77"}, - {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff25f48fc8e623d95eca0670b8cc1469a83783c924a602e0fbd47363bb54aaca"}, - {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e381581b37db1db7597b62a2e6b8b57c3deec95d93b6d6407c5b61ddc98aca6d"}, - {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db19d60d846283ee275d0416e2a23493f4e6b6028825b51290ac05afc87a6f97"}, - {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25892c92bee6d9449ffac82c2fe257f3a6f297792cdb18ad784737d61e7a9a85"}, - {file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:398701865e7a9565d49189f6c90868efaca21be65c725fc87fc305906be915da"}, - {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4a4fbc769ea9b6bd97f4ad0b430a6807f92f0e5eb020f1e42ece59f3ecfc4585"}, - {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b29bfd650ed8e148f9c515474a6ef0ba1090b7a8faeee26b74a8ff3b33617502"}, - {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:1e56b9cafcd6531bab5d9b2e890bb4937f4165109fe98e2b98ef0dcfcb06ee9d"}, - {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ec40170327d4a404b0d91855d41bfe1fe4b699222b2b93e3d833a27330a87a6d"}, - {file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2df5f139233060578d8c2c975128fb231a89ca0a462b35d4b5fcf7c501ebdbe1"}, - {file = "aiohttp-3.8.3-cp36-cp36m-win32.whl", hash = "sha256:f973157ffeab5459eefe7b97a804987876dd0a55570b8fa56b4e1954bf11329b"}, - {file = "aiohttp-3.8.3-cp36-cp36m-win_amd64.whl", hash = "sha256:437399385f2abcd634865705bdc180c8314124b98299d54fe1d4c8990f2f9494"}, - {file = "aiohttp-3.8.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:09e28f572b21642128ef31f4e8372adb6888846f32fecb288c8b0457597ba61a"}, - {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f3553510abdbec67c043ca85727396ceed1272eef029b050677046d3387be8d"}, - {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e168a7560b7c61342ae0412997b069753f27ac4862ec7867eff74f0fe4ea2ad9"}, - {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db4c979b0b3e0fa7e9e69ecd11b2b3174c6963cebadeecfb7ad24532ffcdd11a"}, - {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e164e0a98e92d06da343d17d4e9c4da4654f4a4588a20d6c73548a29f176abe2"}, - {file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8a78079d9a39ca9ca99a8b0ac2fdc0c4d25fc80c8a8a82e5c8211509c523363"}, - {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:21b30885a63c3f4ff5b77a5d6caf008b037cb521a5f33eab445dc566f6d092cc"}, - {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4b0f30372cef3fdc262f33d06e7b411cd59058ce9174ef159ad938c4a34a89da"}, - {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:8135fa153a20d82ffb64f70a1b5c2738684afa197839b34cc3e3c72fa88d302c"}, - {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ad61a9639792fd790523ba072c0555cd6be5a0baf03a49a5dd8cfcf20d56df48"}, - {file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:978b046ca728073070e9abc074b6299ebf3501e8dee5e26efacb13cec2b2dea0"}, - {file = "aiohttp-3.8.3-cp37-cp37m-win32.whl", hash = "sha256:0d2c6d8c6872df4a6ec37d2ede71eff62395b9e337b4e18efd2177de883a5033"}, - {file = "aiohttp-3.8.3-cp37-cp37m-win_amd64.whl", hash = "sha256:21d69797eb951f155026651f7e9362877334508d39c2fc37bd04ff55b2007091"}, - {file = "aiohttp-3.8.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ca9af5f8f5812d475c5259393f52d712f6d5f0d7fdad9acdb1107dd9e3cb7eb"}, - {file = "aiohttp-3.8.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d90043c1882067f1bd26196d5d2db9aa6d268def3293ed5fb317e13c9413ea4"}, - {file = "aiohttp-3.8.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d737fc67b9a970f3234754974531dc9afeea11c70791dcb7db53b0cf81b79784"}, - {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf909ea0a3fc9596e40d55d8000702a85e27fd578ff41a5500f68f20fd32e6c"}, - {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5835f258ca9f7c455493a57ee707b76d2d9634d84d5d7f62e77be984ea80b849"}, - {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da37dcfbf4b7f45d80ee386a5f81122501ec75672f475da34784196690762f4b"}, - {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f44875f2804bc0511a69ce44a9595d5944837a62caecc8490bbdb0e18b1342"}, - {file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:527b3b87b24844ea7865284aabfab08eb0faf599b385b03c2aa91fc6edd6e4b6"}, - {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5ba88df9aa5e2f806650fcbeedbe4f6e8736e92fc0e73b0400538fd25a4dd96"}, - {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e7b8813be97cab8cb52b1375f41f8e6804f6507fe4660152e8ca5c48f0436017"}, - {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2dea10edfa1a54098703cb7acaa665c07b4e7568472a47f4e64e6319d3821ccf"}, - {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:713d22cd9643ba9025d33c4af43943c7a1eb8547729228de18d3e02e278472b6"}, - {file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2d252771fc85e0cf8da0b823157962d70639e63cb9b578b1dec9868dd1f4f937"}, - {file = "aiohttp-3.8.3-cp38-cp38-win32.whl", hash = "sha256:66bd5f950344fb2b3dbdd421aaa4e84f4411a1a13fca3aeb2bcbe667f80c9f76"}, - {file = "aiohttp-3.8.3-cp38-cp38-win_amd64.whl", hash = "sha256:84b14f36e85295fe69c6b9789b51a0903b774046d5f7df538176516c3e422446"}, - {file = "aiohttp-3.8.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c121ba0b1ec2b44b73e3a8a171c4f999b33929cd2397124a8c7fcfc8cd9e06"}, - {file = "aiohttp-3.8.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8d6aaa4e7155afaf994d7924eb290abbe81a6905b303d8cb61310a2aba1c68ba"}, - {file = "aiohttp-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43046a319664a04b146f81b40e1545d4c8ac7b7dd04c47e40bf09f65f2437346"}, - {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599418aaaf88a6d02a8c515e656f6faf3d10618d3dd95866eb4436520096c84b"}, - {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92a2964319d359f494f16011e23434f6f8ef0434acd3cf154a6b7bec511e2fb7"}, - {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73a4131962e6d91109bca6536416aa067cf6c4efb871975df734f8d2fd821b37"}, - {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598adde339d2cf7d67beaccda3f2ce7c57b3b412702f29c946708f69cf8222aa"}, - {file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75880ed07be39beff1881d81e4a907cafb802f306efd6d2d15f2b3c69935f6fb"}, - {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0239da9fbafd9ff82fd67c16704a7d1bccf0d107a300e790587ad05547681c8"}, - {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4e3a23ec214e95c9fe85a58470b660efe6534b83e6cbe38b3ed52b053d7cb6ad"}, - {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:47841407cc89a4b80b0c52276f3cc8138bbbfba4b179ee3acbd7d77ae33f7ac4"}, - {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:54d107c89a3ebcd13228278d68f1436d3f33f2dd2af5415e3feaeb1156e1a62c"}, - {file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c37c5cce780349d4d51739ae682dec63573847a2a8dcb44381b174c3d9c8d403"}, - {file = "aiohttp-3.8.3-cp39-cp39-win32.whl", hash = "sha256:f178d2aadf0166be4df834c4953da2d7eef24719e8aec9a65289483eeea9d618"}, - {file = "aiohttp-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:88e5be56c231981428f4f506c68b6a46fa25c4123a2e86d156c58a8369d31ab7"}, - {file = "aiohttp-3.8.3.tar.gz", hash = "sha256:3828fb41b7203176b82fe5d699e0d845435f2374750a44b480ea6b930f6be269"}, -] -aiosignal = [ - {file = "aiosignal-1.2.0-py3-none-any.whl", hash = "sha256:26e62109036cd181df6e6ad646f91f0dcfd05fe16d0cb924138ff2ab75d64e3a"}, - {file = "aiosignal-1.2.0.tar.gz", hash = "sha256:78ed67db6c7b7ced4f98e495e572106d5c432a93e1ddd1bf475e1dc05f5b7df2"}, -] -async-timeout = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, -] -attrs = [ - {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, - {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, -] -autoflake = [ - {file = "autoflake-1.7.7-py3-none-any.whl", hash = "sha256:a9b43d08f8e455824e4f7b3f078399f59ba538ba53872f466c09e55c827773ef"}, - {file = "autoflake-1.7.7.tar.gz", hash = "sha256:c8e4fc41aa3eae0f5c94b939e3a3d50923d7a9306786a6cbf4866a077b8f6832"}, -] -black = [ - {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, - {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, - {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, - {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, - {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, - {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, - {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, - {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, - {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, - {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, - {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, - {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, - {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, - {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, - {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, - {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, - {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, - {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, - {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, - {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, - {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, -] -certifi = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] -discord = [ - {file = "discord-2.0.0-py3-none-any.whl", hash = "sha256:ffc714978d338d2b506e4924d66d7d02a649378a46743e2bdf42ef1bd43d1a67"}, - {file = "discord-2.0.0.tar.gz", hash = "sha256:b6df1dd56c19750b3cb9b69de85bf463e712a0db232546ae8109c04bf0a61083"}, -] -discord-py = [ - {file = "discord.py-2.0.1-py3-none-any.whl", hash = "sha256:aeb186348bf011708b085b2715cf92bbb72c692eb4f59c4c0b488130cc4c4b7e"}, - {file = "discord.py-2.0.1.tar.gz", hash = "sha256:309146476e986cb8faf038cd5d604d4b3834ef15c2d34df697ce5064bf5cd779"}, -] -flask = [ - {file = "Flask-2.2.2-py3-none-any.whl", hash = "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526"}, - {file = "Flask-2.2.2.tar.gz", hash = "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b"}, -] -frozenlist = [ - {file = "frozenlist-1.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5f271c93f001748fc26ddea409241312a75e13466b06c94798d1a341cf0e6989"}, - {file = "frozenlist-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c6ef8014b842f01f5d2b55315f1af5cbfde284eb184075c189fd657c2fd8204"}, - {file = "frozenlist-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:219a9676e2eae91cb5cc695a78b4cb43d8123e4160441d2b6ce8d2c70c60e2f3"}, - {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b47d64cdd973aede3dd71a9364742c542587db214e63b7529fbb487ed67cddd9"}, - {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2af6f7a4e93f5d08ee3f9152bce41a6015b5cf87546cb63872cc19b45476e98a"}, - {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a718b427ff781c4f4e975525edb092ee2cdef6a9e7bc49e15063b088961806f8"}, - {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c56c299602c70bc1bb5d1e75f7d8c007ca40c9d7aebaf6e4ba52925d88ef826d"}, - {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717470bfafbb9d9be624da7780c4296aa7935294bd43a075139c3d55659038ca"}, - {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:31b44f1feb3630146cffe56344704b730c33e042ffc78d21f2125a6a91168131"}, - {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c3b31180b82c519b8926e629bf9f19952c743e089c41380ddca5db556817b221"}, - {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d82bed73544e91fb081ab93e3725e45dd8515c675c0e9926b4e1f420a93a6ab9"}, - {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49459f193324fbd6413e8e03bd65789e5198a9fa3095e03f3620dee2f2dabff2"}, - {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:94e680aeedc7fd3b892b6fa8395b7b7cc4b344046c065ed4e7a1e390084e8cb5"}, - {file = "frozenlist-1.3.1-cp310-cp310-win32.whl", hash = "sha256:fabb953ab913dadc1ff9dcc3a7a7d3dc6a92efab3a0373989b8063347f8705be"}, - {file = "frozenlist-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:eee0c5ecb58296580fc495ac99b003f64f82a74f9576a244d04978a7e97166db"}, - {file = "frozenlist-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0bc75692fb3770cf2b5856a6c2c9de967ca744863c5e89595df64e252e4b3944"}, - {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086ca1ac0a40e722d6833d4ce74f5bf1aba2c77cbfdc0cd83722ffea6da52a04"}, - {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b51eb355e7f813bcda00276b0114c4172872dc5fb30e3fea059b9367c18fbcb"}, - {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74140933d45271c1a1283f708c35187f94e1256079b3c43f0c2267f9db5845ff"}, - {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee4c5120ddf7d4dd1eaf079af3af7102b56d919fa13ad55600a4e0ebe532779b"}, - {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97d9e00f3ac7c18e685320601f91468ec06c58acc185d18bb8e511f196c8d4b2"}, - {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6e19add867cebfb249b4e7beac382d33215d6d54476bb6be46b01f8cafb4878b"}, - {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a027f8f723d07c3f21963caa7d585dcc9b089335565dabe9c814b5f70c52705a"}, - {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:61d7857950a3139bce035ad0b0945f839532987dfb4c06cfe160254f4d19df03"}, - {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:53b2b45052e7149ee8b96067793db8ecc1ae1111f2f96fe1f88ea5ad5fd92d10"}, - {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bbb1a71b1784e68870800b1bc9f3313918edc63dbb8f29fbd2e767ce5821696c"}, - {file = "frozenlist-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:ab6fa8c7871877810e1b4e9392c187a60611fbf0226a9e0b11b7b92f5ac72792"}, - {file = "frozenlist-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f89139662cc4e65a4813f4babb9ca9544e42bddb823d2ec434e18dad582543bc"}, - {file = "frozenlist-1.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4c0c99e31491a1d92cde8648f2e7ccad0e9abb181f6ac3ddb9fc48b63301808e"}, - {file = "frozenlist-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61e8cb51fba9f1f33887e22488bad1e28dd8325b72425f04517a4d285a04c519"}, - {file = "frozenlist-1.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc2f3e368ee5242a2cbe28323a866656006382872c40869b49b265add546703f"}, - {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58fb94a01414cddcdc6839807db77ae8057d02ddafc94a42faee6004e46c9ba8"}, - {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:022178b277cb9277d7d3b3f2762d294f15e85cd2534047e68a118c2bb0058f3e"}, - {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:572ce381e9fe027ad5e055f143763637dcbac2542cfe27f1d688846baeef5170"}, - {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19127f8dcbc157ccb14c30e6f00392f372ddb64a6ffa7106b26ff2196477ee9f"}, - {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42719a8bd3792744c9b523674b752091a7962d0d2d117f0b417a3eba97d1164b"}, - {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2743bb63095ef306041c8f8ea22bd6e4d91adabf41887b1ad7886c4c1eb43d5f"}, - {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fa47319a10e0a076709644a0efbcaab9e91902c8bd8ef74c6adb19d320f69b83"}, - {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52137f0aea43e1993264a5180c467a08a3e372ca9d378244c2d86133f948b26b"}, - {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:f5abc8b4d0c5b556ed8cd41490b606fe99293175a82b98e652c3f2711b452988"}, - {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1e1cf7bc8cbbe6ce3881863671bac258b7d6bfc3706c600008925fb799a256e2"}, - {file = "frozenlist-1.3.1-cp38-cp38-win32.whl", hash = "sha256:0dde791b9b97f189874d654c55c24bf7b6782343e14909c84beebd28b7217845"}, - {file = "frozenlist-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:9494122bf39da6422b0972c4579e248867b6b1b50c9b05df7e04a3f30b9a413d"}, - {file = "frozenlist-1.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31bf9539284f39ff9398deabf5561c2b0da5bb475590b4e13dd8b268d7a3c5c1"}, - {file = "frozenlist-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e0c8c803f2f8db7217898d11657cb6042b9b0553a997c4a0601f48a691480fab"}, - {file = "frozenlist-1.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da5ba7b59d954f1f214d352308d1d86994d713b13edd4b24a556bcc43d2ddbc3"}, - {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74e6b2b456f21fc93ce1aff2b9728049f1464428ee2c9752a4b4f61e98c4db96"}, - {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:526d5f20e954d103b1d47232e3839f3453c02077b74203e43407b962ab131e7b"}, - {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b499c6abe62a7a8d023e2c4b2834fce78a6115856ae95522f2f974139814538c"}, - {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab386503f53bbbc64d1ad4b6865bf001414930841a870fc97f1546d4d133f141"}, - {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f63c308f82a7954bf8263a6e6de0adc67c48a8b484fab18ff87f349af356efd"}, - {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:12607804084d2244a7bd4685c9d0dca5df17a6a926d4f1967aa7978b1028f89f"}, - {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:da1cdfa96425cbe51f8afa43e392366ed0b36ce398f08b60de6b97e3ed4affef"}, - {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f810e764617b0748b49a731ffaa525d9bb36ff38332411704c2400125af859a6"}, - {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:35c3d79b81908579beb1fb4e7fcd802b7b4921f1b66055af2578ff7734711cfa"}, - {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c92deb5d9acce226a501b77307b3b60b264ca21862bd7d3e0c1f3594022f01bc"}, - {file = "frozenlist-1.3.1-cp39-cp39-win32.whl", hash = "sha256:5e77a8bd41e54b05e4fb2708dc6ce28ee70325f8c6f50f3df86a44ecb1d7a19b"}, - {file = "frozenlist-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:625d8472c67f2d96f9a4302a947f92a7adbc1e20bedb6aff8dbc8ff039ca6189"}, - {file = "frozenlist-1.3.1.tar.gz", hash = "sha256:3a735e4211a04ccfa3f4833547acdf5d2f863bfeb01cfd3edaffbc251f15cec8"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -importlib-metadata = [ - {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, - {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, -] -itsdangerous = [ - {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, - {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, -] -jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -multidict = [ - {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, - {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, - {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"}, - {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"}, - {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"}, - {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"}, - {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"}, - {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"}, - {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"}, - {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"}, - {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"}, - {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"}, - {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"}, - {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"}, - {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"}, - {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"}, - {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"}, - {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, - {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -numpy = [ - {file = "numpy-1.23.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2"}, - {file = "numpy-1.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f"}, - {file = "numpy-1.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71"}, - {file = "numpy-1.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3"}, - {file = "numpy-1.23.4-cp310-cp310-win32.whl", hash = "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd"}, - {file = "numpy-1.23.4-cp310-cp310-win_amd64.whl", hash = "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329"}, - {file = "numpy-1.23.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db"}, - {file = "numpy-1.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f"}, - {file = "numpy-1.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0"}, - {file = "numpy-1.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488"}, - {file = "numpy-1.23.4-cp311-cp311-win32.whl", hash = "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79"}, - {file = "numpy-1.23.4-cp311-cp311-win_amd64.whl", hash = "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d"}, - {file = "numpy-1.23.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5"}, - {file = "numpy-1.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6"}, - {file = "numpy-1.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f"}, - {file = "numpy-1.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68"}, - {file = "numpy-1.23.4-cp38-cp38-win32.whl", hash = "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba"}, - {file = "numpy-1.23.4-cp38-cp38-win_amd64.whl", hash = "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8"}, - {file = "numpy-1.23.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894"}, - {file = "numpy-1.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7"}, - {file = "numpy-1.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735"}, - {file = "numpy-1.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0"}, - {file = "numpy-1.23.4-cp39-cp39-win32.whl", hash = "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef"}, - {file = "numpy-1.23.4-cp39-cp39-win_amd64.whl", hash = "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e"}, - {file = "numpy-1.23.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911"}, - {file = "numpy-1.23.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810"}, - {file = "numpy-1.23.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962"}, - {file = "numpy-1.23.4.tar.gz", hash = "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c"}, -] -pathspec = [ - {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, - {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, -] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] -pyflakes = [ - {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, - {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, -] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -typing-extensions = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] -urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, -] -werkzeug = [ - {file = "Werkzeug-2.2.2-py3-none-any.whl", hash = "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5"}, - {file = "Werkzeug-2.2.2.tar.gz", hash = "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f"}, -] -yarl = [ - {file = "yarl-1.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:abc06b97407868ef38f3d172762f4069323de52f2b70d133d096a48d72215d28"}, - {file = "yarl-1.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:07b21e274de4c637f3e3b7104694e53260b5fc10d51fb3ec5fed1da8e0f754e3"}, - {file = "yarl-1.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9de955d98e02fab288c7718662afb33aab64212ecb368c5dc866d9a57bf48880"}, - {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ec362167e2c9fd178f82f252b6d97669d7245695dc057ee182118042026da40"}, - {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20df6ff4089bc86e4a66e3b1380460f864df3dd9dccaf88d6b3385d24405893b"}, - {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5999c4662631cb798496535afbd837a102859568adc67d75d2045e31ec3ac497"}, - {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed19b74e81b10b592084a5ad1e70f845f0aacb57577018d31de064e71ffa267a"}, - {file = "yarl-1.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e4808f996ca39a6463f45182e2af2fae55e2560be586d447ce8016f389f626f"}, - {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2d800b9c2eaf0684c08be5f50e52bfa2aa920e7163c2ea43f4f431e829b4f0fd"}, - {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6628d750041550c5d9da50bb40b5cf28a2e63b9388bac10fedd4f19236ef4957"}, - {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f5af52738e225fcc526ae64071b7e5342abe03f42e0e8918227b38c9aa711e28"}, - {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:76577f13333b4fe345c3704811ac7509b31499132ff0181f25ee26619de2c843"}, - {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0c03f456522d1ec815893d85fccb5def01ffaa74c1b16ff30f8aaa03eb21e453"}, - {file = "yarl-1.8.1-cp310-cp310-win32.whl", hash = "sha256:ea30a42dc94d42f2ba4d0f7c0ffb4f4f9baa1b23045910c0c32df9c9902cb272"}, - {file = "yarl-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:9130ddf1ae9978abe63808b6b60a897e41fccb834408cde79522feb37fb72fb0"}, - {file = "yarl-1.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0ab5a138211c1c366404d912824bdcf5545ccba5b3ff52c42c4af4cbdc2c5035"}, - {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0fb2cb4204ddb456a8e32381f9a90000429489a25f64e817e6ff94879d432fc"}, - {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85cba594433915d5c9a0d14b24cfba0339f57a2fff203a5d4fd070e593307d0b"}, - {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca7e596c55bd675432b11320b4eacc62310c2145d6801a1f8e9ad160685a231"}, - {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0f77539733e0ec2475ddcd4e26777d08996f8cd55d2aef82ec4d3896687abda"}, - {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29e256649f42771829974e742061c3501cc50cf16e63f91ed8d1bf98242e5507"}, - {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7fce6cbc6c170ede0221cc8c91b285f7f3c8b9fe28283b51885ff621bbe0f8ee"}, - {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:59ddd85a1214862ce7c7c66457f05543b6a275b70a65de366030d56159a979f0"}, - {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:12768232751689c1a89b0376a96a32bc7633c08da45ad985d0c49ede691f5c0d"}, - {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:b19255dde4b4f4c32e012038f2c169bb72e7f081552bea4641cab4d88bc409dd"}, - {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6c8148e0b52bf9535c40c48faebb00cb294ee577ca069d21bd5c48d302a83780"}, - {file = "yarl-1.8.1-cp37-cp37m-win32.whl", hash = "sha256:de839c3a1826a909fdbfe05f6fe2167c4ab033f1133757b5936efe2f84904c07"}, - {file = "yarl-1.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:dd032e8422a52e5a4860e062eb84ac94ea08861d334a4bcaf142a63ce8ad4802"}, - {file = "yarl-1.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:19cd801d6f983918a3f3a39f3a45b553c015c5aac92ccd1fac619bd74beece4a"}, - {file = "yarl-1.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6347f1a58e658b97b0a0d1ff7658a03cb79bdbda0331603bed24dd7054a6dea1"}, - {file = "yarl-1.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c0da7e44d0c9108d8b98469338705e07f4bb7dab96dbd8fa4e91b337db42548"}, - {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5587bba41399854703212b87071c6d8638fa6e61656385875f8c6dff92b2e461"}, - {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31a9a04ecccd6b03e2b0e12e82131f1488dea5555a13a4d32f064e22a6003cfe"}, - {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:205904cffd69ae972a1707a1bd3ea7cded594b1d773a0ce66714edf17833cdae"}, - {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea513a25976d21733bff523e0ca836ef1679630ef4ad22d46987d04b372d57fc"}, - {file = "yarl-1.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0b51530877d3ad7a8d47b2fff0c8df3b8f3b8deddf057379ba50b13df2a5eae"}, - {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d2b8f245dad9e331540c350285910b20dd913dc86d4ee410c11d48523c4fd546"}, - {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ab2a60d57ca88e1d4ca34a10e9fb4ab2ac5ad315543351de3a612bbb0560bead"}, - {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:449c957ffc6bc2309e1fbe67ab7d2c1efca89d3f4912baeb8ead207bb3cc1cd4"}, - {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a165442348c211b5dea67c0206fc61366212d7082ba8118c8c5c1c853ea4d82e"}, - {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b3ded839a5c5608eec8b6f9ae9a62cb22cd037ea97c627f38ae0841a48f09eae"}, - {file = "yarl-1.8.1-cp38-cp38-win32.whl", hash = "sha256:c1445a0c562ed561d06d8cbc5c8916c6008a31c60bc3655cdd2de1d3bf5174a0"}, - {file = "yarl-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:56c11efb0a89700987d05597b08a1efcd78d74c52febe530126785e1b1a285f4"}, - {file = "yarl-1.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e80ed5a9939ceb6fda42811542f31c8602be336b1fb977bccb012e83da7e4936"}, - {file = "yarl-1.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6afb336e23a793cd3b6476c30f030a0d4c7539cd81649683b5e0c1b0ab0bf350"}, - {file = "yarl-1.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c322cbaa4ed78a8aac89b2174a6df398faf50e5fc12c4c191c40c59d5e28357"}, - {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fae37373155f5ef9b403ab48af5136ae9851151f7aacd9926251ab26b953118b"}, - {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5395da939ffa959974577eff2cbfc24b004a2fb6c346918f39966a5786874e54"}, - {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:076eede537ab978b605f41db79a56cad2e7efeea2aa6e0fa8f05a26c24a034fb"}, - {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1a50e461615747dd93c099f297c1994d472b0f4d2db8a64e55b1edf704ec1c"}, - {file = "yarl-1.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7de89c8456525650ffa2bb56a3eee6af891e98f498babd43ae307bd42dca98f6"}, - {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4a88510731cd8d4befaba5fbd734a7dd914de5ab8132a5b3dde0bbd6c9476c64"}, - {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2d93a049d29df172f48bcb09acf9226318e712ce67374f893b460b42cc1380ae"}, - {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:21ac44b763e0eec15746a3d440f5e09ad2ecc8b5f6dcd3ea8cb4773d6d4703e3"}, - {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d0272228fabe78ce00a3365ffffd6f643f57a91043e119c289aaba202f4095b0"}, - {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99449cd5366fe4608e7226c6cae80873296dfa0cde45d9b498fefa1de315a09e"}, - {file = "yarl-1.8.1-cp39-cp39-win32.whl", hash = "sha256:8b0af1cf36b93cee99a31a545fe91d08223e64390c5ecc5e94c39511832a4bb6"}, - {file = "yarl-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:de49d77e968de6626ba7ef4472323f9d2e5a56c1d85b7c0e2a190b2173d3b9be"}, - {file = "yarl-1.8.1.tar.gz", hash = "sha256:af887845b8c2e060eb5605ff72b6f2dd2aab7a761379373fd89d314f4752abbf"}, -] -zipp = [ - {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, - {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, -] diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 422aa47..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,15 +0,0 @@ -[tool.poetry] -name = "EightBot" -version = "2.0.0" -description = "" -authors = ["EightBotDev "] - -[tool.poetry.dependencies] -python = ">=3.8.0,<3.9" -numpy = "^1.22.2" -Flask = "^2.2.0" -urllib3 = "^1.26.12" -discord = "^2.1.0" -requests = "^2.28.1" -black = "^22.10.0" -autoflake = "^1.7.7" diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..55395d1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "Node", + "target": "ES2022", + "jsx": "react", + "strictNullChecks": true, + "strictFunctionTypes": true + }, + "exclude": ["node_modules", "**/node_modules/*"] +} diff --git a/voice/voice.mp3 b/voice/voice.mp3 deleted file mode 100644 index e69de29..0000000 diff --git a/webserver.py b/webserver.py deleted file mode 100644 index c506005..0000000 --- a/webserver.py +++ /dev/null @@ -1,18 +0,0 @@ -from flask import Flask -from threading import Thread - -app = Flask("") - - -@app.route("/") -def home(): - return "online!" - - -def run(): - app.run(host="0.0.0.0", port=8080) - - -async def keep_alive(): - t = Thread(target=run) - t.start() diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..06a4805 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1513 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@discordjs/builders@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.16.0.tgz#3201f57fa57c4dd77aebb480cf47da77b7ba2e8c" + integrity sha512-9/NCiZrLivgRub2/kBc0Vm5pMBE5AUdYbdXsLu/yg9ANgvnaJ0bZKTY8yYnLbsEc/LYUP79lEIdC73qEYhWq7A== + dependencies: + "@sapphire/shapeshift" "^3.5.1" + discord-api-types "^0.36.2" + fast-deep-equal "^3.1.3" + ts-mixer "^6.0.1" + tslib "^2.4.0" + +"@discordjs/collection@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.7.0.tgz#1a6c00198b744ba2b73a64442145da637ac073b8" + integrity sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA== + +"@discordjs/collection@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.3.0.tgz#65bf9674db72f38c25212be562bb28fa0dba6aa3" + integrity sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg== + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@keyv/sqlite@^3.6.4": + version "3.6.4" + resolved "https://registry.yarnpkg.com/@keyv/sqlite/-/sqlite-3.6.4.tgz#5582efe86e3fbbf9a65b895973d73d6d5950c879" + integrity sha512-nE7bjOU6lmGn3QBkaAZS+LLvBHebBKDwDbMGlTbhRNJoREam69LZewspGbePb8dpZS1C6IazedVRCq2eb5kFWw== + dependencies: + pify "^5.0.0" + sqlite3 "^5.1.4" + +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c" + integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@sapphire/async-queue@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8" + integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== + +"@sapphire/discord-utilities@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@sapphire/discord-utilities/-/discord-utilities-2.12.0.tgz#d0ec3d345877593142cddbfcd08e5420868bf055" + integrity sha512-E/Qqb8PwEoX/WLVfcGvTglTgEGGcc/2rGtKBqhMcHcEEtNIY8dhQVYbW/KMNJpR/J81OqUJquVzpkzRe6fQWiw== + dependencies: + discord-api-types "^0.36.3" + +"@sapphire/discord.js-utilities@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@sapphire/discord.js-utilities/-/discord.js-utilities-5.1.2.tgz#0dec0c700375fa5f787d2f9ebd7fdaed7bcc5a95" + integrity sha512-zKXUkVzueT3Zag9D/ubpey0g/vLXLCVVFlmYoZqpkx1HsTLSTKz4hxbD7IQ/8q7rvI5Pm/Ex1jajPHMLXKmlpw== + dependencies: + "@sapphire/discord-utilities" "^2.12.0" + "@sapphire/duration" "^1.0.0" + "@sapphire/utilities" "^3.11.0" + tslib "^2.4.1" + +"@sapphire/duration@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sapphire/duration/-/duration-1.0.0.tgz#baec4898ee71099093580db774474b25167150ff" + integrity sha512-B+6nKYnBmIlqqbamcR4iBvbQHz6/Kq2JUVM0rA3lQ+aYUYDdcA1Spt66CKtPWwdTYEtSv0VY6Jv27WCtFNYTUg== + +"@sapphire/framework@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@sapphire/framework/-/framework-3.1.4.tgz#1f880ed1e39e5aa300ef87f9f3a7f3b846a8625b" + integrity sha512-IuivG0V/fRkBb5F7TTjgIEl9XIMZ57HjpJ31+Aev0FwYDW6/WqHXUjLE3FLUWQ1gZsDNpnu1C0c1qW4VkLdzKg== + dependencies: + "@discordjs/builders" "^0.16.0" + "@sapphire/discord-utilities" "^2.12.0" + "@sapphire/discord.js-utilities" "^5.1.2" + "@sapphire/lexure" "^1.1.2" + "@sapphire/pieces" "^3.6.0" + "@sapphire/ratelimits" "^2.4.5" + "@sapphire/result" "^2.6.0" + "@sapphire/stopwatch" "^1.5.0" + "@sapphire/utilities" "^3.11.0" + +"@sapphire/lexure@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@sapphire/lexure/-/lexure-1.1.2.tgz#219b91a0b2165d0e6b34c773e592141b2b1b92e1" + integrity sha512-+v3P3EMDdFoybHH7c7cMcz30jEyxujkxWu5f958cf/Sm27fMM0IqwILnNFUpExZCBAueEM/eoSgbRl4q+K+0jg== + dependencies: + "@sapphire/result" "^2.6.0" + +"@sapphire/pieces@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@sapphire/pieces/-/pieces-3.6.0.tgz#e0017f39255a5711ca5bc4794ad28b97cd464445" + integrity sha512-6Zd6as4e8501NLbjbjTxsi0lVkT850kJroqyjBZClBW32Izr+1XW6sGQM/hl3Pil1/L4QMQqu4khszHejtnbjA== + dependencies: + "@discordjs/collection" "^1.2.0" + "@sapphire/utilities" "^3.11.0" + tslib "^2.4.0" + +"@sapphire/ratelimits@^2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@sapphire/ratelimits/-/ratelimits-2.4.5.tgz#40049436fcd3694acb8ddaf2eb61ea0963a0f9a0" + integrity sha512-2wqpVPRaPUE+CWStLm6wGLj1uA4Ln/9qbH4Ue/eCHC6/R5lJz0+8nGD1LpiYOcyeVLTHbmwODGeD92obkPej2g== + dependencies: + "@sapphire/timer-manager" "^1.0.0" + +"@sapphire/result@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@sapphire/result/-/result-2.6.0.tgz#0d29996fb96403b76018a2fa8f10198f4c65d06e" + integrity sha512-gdW6n/oDZ8aC1439Ub3RiLQ6L4VHAxbN0AhGJWNkEZ6Z6Ww2V62fwRiA/73OPfgYQKXk9ljhAFiqNO91KAonHQ== + +"@sapphire/shapeshift@^3.5.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz#b98dc6a7180f9b38219267917b2e6fa33f9ec656" + integrity sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw== + dependencies: + fast-deep-equal "^3.1.3" + lodash "^4.17.21" + +"@sapphire/stopwatch@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@sapphire/stopwatch/-/stopwatch-1.5.0.tgz#4acf7352f969f0c81d69a838ecbfc8b6026ff660" + integrity sha512-DtyKugdy3JTqm6JnEepTY64fGJAqlusDVrlrzifEgSCfGYCqpvB+SBldkWtDH+z+zLcp+PyaFLq7xpVfkhmvGg== + dependencies: + tslib "^2.4.0" + +"@sapphire/timer-manager@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sapphire/timer-manager/-/timer-manager-1.0.0.tgz#e8ecf15a7042ee611048b4f90fab1399653d3934" + integrity sha512-vxxnv75QPMGKt6IB6nL2xRJfwzcUQ9DBGzJLg6G8eS5O4u7j3IR/yr/GQsa4gIpjw6kQOgn8lUdnSTlpnERTbQ== + +"@sapphire/utilities@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@sapphire/utilities/-/utilities-3.11.0.tgz#2dccfb332dc5c119e1425cce6b2c64160b770bad" + integrity sha512-ich7J+329UTEgWxgk8b871rMhbFW/hvXdabdiKaUKd6g10eIMkIakWf+EGkDQsiDSiebIXll9TIPPmWtN3cVSw== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/node-fetch@^2.6.2": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*", "@types/node@^18.11.17": + version "18.11.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.17.tgz#5c009e1d9c38f4a2a9d45c0b0c493fe6cdb4bcb5" + integrity sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng== + +"@types/ws@^8.5.3": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@vitalets/google-translate-api@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@vitalets/google-translate-api/-/google-translate-api-7.0.0.tgz#0aa37d92d475daf4a434ded27e72d80b03686a23" + integrity sha512-zuKF+jG0EhFzRU/QAyHgTVzIDhrv5zDUmQWy7umwZryMbG8H0jK4fdMGrgla5AhQGU8ViiDWi/xbxNCKK7KHYA== + dependencies: + configstore "^5.0.1" + got "^9.6.0" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +aki-api@^6.0.8: + version "6.0.8" + resolved "https://registry.yarnpkg.com/aki-api/-/aki-api-6.0.8.tgz#2e2091ea1ffdc0773ec4585f0441d00c95b16b2e" + integrity sha512-fOMHSPfcyT2WFrf2wsQf5GNpwCSJzWA7+YO3DU8j8wOS16I10lmpIxXkdx3rCiWfmhD6kXVdUaEGJ4DKkiPbMA== + dependencies: + axios "^0.21.1" + https-proxy-agent "^5.0.0" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +debug@4, debug@^4.1.0, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +detect-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +discord-api-types@0.33.5, discord-api-types@^0.33.5: + version "0.33.5" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.33.5.tgz#6548b70520f7b944c60984dca4ab58654d664a12" + integrity sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg== + +discord-api-types@^0.36.2, discord-api-types@^0.36.3: + version "0.36.3" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.36.3.tgz#a931b7e57473a5c971d6937fa5f392eb30047579" + integrity sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg== + +discord.js-akinator@3.4.5: + version "3.4.5" + resolved "https://registry.yarnpkg.com/discord.js-akinator/-/discord.js-akinator-3.4.5.tgz#728dab9578e362575f7d79da350ab525f9ee7e34" + integrity sha512-jn2zb3weEhGuF62AoBmn7i69XXkMMNcGFhZ+BnkCRiz1f/eJEvDDn2hawyghPCr7zbD66aMOmS/SFyKx+ViJcQ== + dependencies: + "@vitalets/google-translate-api" "^7.0.0" + aki-api "^6.0.8" + discord.js "^13.6.0" + +discord.js@13.x, discord.js@^13.6.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.12.0.tgz#e4839c14a02b1947e063b72f09a49b11336a58f5" + integrity sha512-K5qhREsYcTHkEqt7+7LcSoXTeQYZpI+SQRs9ei/FhbhUpirmjqFtN99P8W2mrKUyhhy7WXWm7rnna0AooKtIpw== + dependencies: + "@discordjs/builders" "^0.16.0" + "@discordjs/collection" "^0.7.0" + "@sapphire/async-queue" "^1.5.0" + "@types/node-fetch" "^2.6.2" + "@types/ws" "^8.5.3" + discord-api-types "^0.33.5" + form-data "^4.0.0" + node-fetch "^2.6.7" + ws "^8.9.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +follow-redirects@^1.14.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.2.6: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +htmlparser2@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +keyv@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.0.tgz#7cebb0f9fa7d56f0c5b17853cbe28838a8dbbd3b" + integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pify@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-6.1.0.tgz#db9f2ebfba65f0bc144db65ae84d1a486ab72909" + integrity sha512-KocF8ve28eFjjuBKKGvzOBGzG8ew2OqOOSxTTZhirkzH7h3BI1vyzqlR0qbfcDBve1Yzo3FVlWUAtCRrbVN8Fw== + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +prettier@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +sqlite3@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.4.tgz#35f83d368963168b324ad2f0fffce09f3b8723a7" + integrity sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + node-addon-api "^4.2.0" + tar "^6.1.11" + optionalDependencies: + node-gyp "8.x" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.1.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^4.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +totsuzen-text@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/totsuzen-text/-/totsuzen-text-1.0.0.tgz#921cd88e6d59efd9d5d832b0a3bd5d0f31d8d356" + integrity sha512-EtKpKJ+PdZLKyGa9Un2tdY2LzPkfgEp7CQ9JM/qOyaFM4/AGLz6gT2lbNWK80XvXkfttY5g9PpsXRH5u6UmxoA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-mixer@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.2.tgz#3e4e4bb8daffb24435f6980b15204cb5b287e016" + integrity sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A== + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@^2.4.0, tslib@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.9.4: + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^8.9.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==